Conexión de lenguaje en C a Arduino

Iniciado por Emily, 13 Junio 2017, 06:25 AM

0 Miembros y 1 Visitante están viendo este tema.

Emily

hola disculpen tengo este codigo :
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

void SerialSendByte(HANDLE hPort, char byte); //envía datos enn el puerto
char SerialRecieveByte(HANDLE hPort); //recive datos en el puerto
BOOL CloseSerialPort(HANDLE hPort); //cierra puerto

HANDLE OpenSerialPort(char *psPort,//es pecifica en que COM se trbajará
                     DWORD dwBaudRate, // tasa de transferencia
                     BYTE dwByteSize, //especifica el tamaño de la cadena
                     BYTE bParity, // para asegurar si la cadena se envió completa o no
                     BYTE bStopBits, // para la cadena de caracteres
                     DWORD Timeout) // espera cierto tiempo para recibir orden y si no recieb nada despliega un mensaje
{
   HANDLE hPort;
   DCB dcbPort;
   DWORD dwError;
   COMMTIMEOUTS commTimeouts;
   hPort = CreateFile(psPort, //se crea un archivo el cual contiene ciertos parametros para poder funcionar
   GENERIC_READ | GENERIC_WRITE,
   0,
   NULL,
   OPEN_EXISTING,
   0,
   NULL);
   if(hPort == INVALID_HANDLE_VALUE) //se crea un if para saber si se creó el archivo
   {
        dwError = GetLastError();
        system("pause");
        return(hPort);
   }
   FillMemory(&dcbPort/*indica memoria de puerto*/, sizeof(dcbPort)/*indica el tamaño de la memoria designada al puerto*/,0/*indica si esta activo*/); //permite la administracion de la memoria del puerto, para esto es necesario la variable DCBport
   dcbPort.DCBlength = sizeof(dcbPort);
   GetCommState (hPort, &dcbPort); //recoge el puerto, el tamaño y el estado
   dcbPort.BaudRate = dwBaudRate; //atributo del objeto dcb port e indica la tasa de transferencia
   dcbPort.ByteSize = dwByteSize;
   dcbPort.Parity = bParity;
   dcbPort.StopBits = bStopBits;
   if(!SetCommState(hPort, &dcbPort)) //Verificar el estado del puerto
   {
       dwError = GetLastError();
       CloseSerialPort(hPort);
       hPort = INVALID_HANDLE_VALUE;
       return(hPort);
   }
   if(!SetCommTimeouts(hPort, &commTimeouts)) //Verificar el tiempo de espera
   {
       dwError = GetLastError();
       CloseSerialPort(hPort);
       hPort = INVALID_HANDLE_VALUE;
       return(hPort);
   }
   return hPort;
}

char SerialReceiveByte(HANDLE hPort)
{

  DWORD bytesread;
  DWORD *ptrbytesread = &bytesread;
  char read;
  char *ptrread = &read;
 
  ReadFile(hPort,ptrread,1,ptrbytesread,NULL);
   if (read == 'a')
   {
      printf("\nProceso\n\n");
      printf("aqui %c\n",read );
   }
 
  return (read);
 
}

void SerialSendByte(HANDLE hPort, char byte) // permite enviar datos
{
   
    DWORD byteswritten;
DWORD *ptrbyteswritten = &byteswritten;
    char *ptrwrite = &byte;
    WriteFile(hPort,&byte,1,ptrbyteswritten,NULL);
 
}




BOOL CloseSerialPort(HANDLE hPort)
{
  BOOL bRes;
  DWORD dwError;
  bRes = CloseHandle(hPort);
  if(!bRes)
  {
    dwError = GetLastError();
  }
  return bRes;
}
int main()
{
  HANDLE hPort;
  char byte;
  char a='a';
  hPort = OpenSerialPort("COM3",CBR_9600,8,NOPARITY,ONESTOPBIT,10000);
  if(hPort == INVALID_HANDLE_VALUE)
  {
     printf("Error al abrir el puerto\n");
     system("pause");
     return 1;
  }
  while(1)
  {    
     SerialSendByte(hPort, a);
     byte = SerialReceiveByte(hPort);
     if (byte == 'a')
          printf("dato %c\n",byte);
  }

  CloseSerialPort(hPort);
  system ("pause");
  return 0;
}

me preguntaba como puedo hacer para que este mande un mensaje a arduino y que arduino me muestre el mensaje en su monitor serie


hola a todos
hice este código pero deseo que las horas se manden a arduino y aparezcan en una pantalla lcd


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
void america(int a,int b, int c)
{
       if (a<23) { printf ("Caracas Venezuela: %d:%d:%d\n",a+1,b,c); }
       else      { printf ("Caracas Venezuela: 00:%d:%d",b,c);       }
}
void asia (int a,int b,int c)//10:00 - 00:00
{
    if (a<10) { printf ("Corea del Sur: %d:%d:%d\n",a+14,b,c); }
else if (a==10){ printf ("Corea del Sur: 00:%d:%d\n",b,c);      }
  else        { printf ("Corea del Sur: %d:%d:%d\n",a-10,b,c); }
 
}
void africa (int a,int b, int c)// 17:00 - 00:00
{
    if (a<17) { printf ("Egipto: %d:%d:%d\n",a+7,b,c); }
else if (a==17){ printf ("Egipto: 00:%d:%d\n",b,c);     }
  else        { printf ("Egipto: %d:%d:%d\n",a-17,b,c);}
}
void oceania (int a, int b, int c)// 11:00 - 00:00
{
    if (a<11) { printf ("Sydney: %d:%d:%d\n",a+13,b,c); }
else if (a==11){ printf ("Sydney: 00:%d:%d\n",b,c);      }
  else        { printf ("Sydney: %d:%d:%d\n",a-11,b,c); }
}
void europa (int a, int b, int c)//18:00 - 00:00
{
    if (a<18) { printf ("Londres: %d:%d:%d\n",a+6,b,c);  }
else if (a==18){ printf ("Londres: 00:%d:%d\n",b,c);      }
  else        { printf ("Londres: %d:%d:%d\n",a-18,b,c); }
}
void local (int a, int b, int c)
{
    if (c>59) printf ("%d:%d:0",a,b+1);
else if (b>59) printf ("%d:0:%d",a+1,c);
else if (a>23) printf ("0:%d:%d",b+c);
else printf ("%d:%d:%d",a,b,c+1);
 
}
int main ()
{
     int a,b,c;
     char opc;
     WORD pausa=1000;
      printf ("ingrese los datos\n");
                 printf ("ingrese la hora (24 hrs)\t");    
                 scanf ("%i",&a);
                 printf ("\ningrese los minutos           \t");
                 scanf ("%i",&b);
                 printf ("\ningrese los segundos          \t");
                 scanf ("%i",&c);
                 printf("%d:%d:%d",a,b,c);
                 getch();
                 inicio:
                 system("cls");
                 printf ("\n");
                 local (a,b,c);
                    if (a<24&&b<=59&&c<=59)
                 {
                   printf ("\namerica\t");//  (^u^)/
                   america (a,b,c);
                   printf ("\nasia\t");//     (^u^)/
                   asia (a,b,c);
                   printf ("\nafrica\t");//   (^u^)/
                   africa (a,b,c);
                   printf ("\noceania\t");//  (^u^)/
                   oceania (a,b,c);
                   printf ("\neuropa\t");//   (^u^)/
                   europa (a,b,c);
                   c++;
                 if (c==60) {c=0; b++;}
                 if (b==60) {b=0; a++;}
                 if (a==24) a=0;
                 Sleep(pausa);
                   goto inicio;
                 }
 getch();
}

alguien de favor me podría decir el como hacer que aparezcan




· No hagas dos temas sobre el mismo asunto
>aquí las reglas del foro
-Engel Lex

engel lex

con esa función sendbyte le enviarías via serial al arduino lo que quieras, ya lo que haga el arduino con lo que le mandes depende del codigo en el arduino
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MAFUS

Aclarando lo que quiere decirte engel lex: tiene que construir el código para el arduino y subírselo.

Emily

#3
Muchas por su ayuda
Una duda mas
Y en Arduino cómo sería el código para recibir ese dato que se envía ??

engel lex

depende de como armes todo... pero el mismo IDE de arduino tiene ejemplos de codigos simples, revisalo
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.