es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>

Tags:  ,

Answer

  1. Avatar for 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:

    if (!EscapeCommFunction(hComm, CLRDTR)){
            LocalFree(NULL);
    }
    if (!EscapeCommFunction(hComm, SETDTR)){
            LocalFree(NULL);
    }
    

    Esto debería resolver el problema y permitir que su programa en C funcione correctamente con su micro Arduino.

Comments are closed.