El programa C no se comunicará con Arduino a menos que primero use el monitor de serie de Arduino o PuTTY.
He escrito un programa en C que imprime los datos de mi micro Arduino en la terminal. Mi problema es que cuando conecto el Arduino por primera vez a mi PC con Windows, no funcionará con mi programa hasta que primero use un programa como el Monitor Serie de Arduino IDE o PuTTY. Después de eso funciona bien hasta que desconecto y vuelvo a conectar el USB.
Mi código en C:
#include <stdio.h>
#include <windows.h>
#include <string.h>
int main(){
float val;
int jori;
char buff[1];
DWORD dwRead, dwWrite;
DCB dcb = {sizeof dcb};
HANDLE hComm;
HANDLE screen = GetStdHandle(STD_OUTPUT_HANDLE);
char port[8];
printf("Give port (COM#):\n");
gets(port);
hComm = CreateFile(port, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
if (hComm == INVALID_HANDLE_VALUE){
printf("INVALID HANDLE VALUE\n");
main();
}
dcb.fBinary = TRUE;
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
if (!EscapeCommFunction(hComm, CLRDTR)){
LocalFree(NULL);
}
if (!EscapeCommFunction(hComm, SETDTR)){
LocalFree(NULL);
}
do {
ReadFile(hComm, buff, sizeof(buff), &dwRead, NULL);
if (dwRead){
WriteFile(screen, buff, sizeof(buff), &dwWrite, NULL);
}}
while (jori != 66);
return 0;
}
Y código de Arduino:
int i = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println(i);
i = i + 1;
delay(1000);
}
EDIT: He solucionado el problema.
Tuve que agregar:
if (!EscapeCommFunction(hComm, CLRDTR)){
LocalFree(NULL);
}
if (!EscapeCommFunction(hComm, SETDTR)){
LocalFree(NULL);
}
antes de establecer mi dcb.</string.h></windows.h></stdio.h>
davy.ai
El problema que enfrenta el usuario es que su programa en C no funciona con su Arduino hasta que utilice un programa como el Monitor Serial de Arduino IDE o PuTTY. El problema surge cuando desconectan y vuelven a conectar el USB.
Han proporcionado su código para el programa en C y su código de Arduino.
Para solucionar el problema, agregaron el siguiente código antes de configurar su dcb:
Esto debería resolver el problema y permitir que su programa en C funcione correctamente con su micro Arduino.