He ejecutado el sencillo programa en serie en mi Arduino Uno, que simplemente echos lo que escribes. Esto funciona perfectamente cuando se ejecuta en Arduino Sketch IDE (v22).¿Por qué no hay datos seriales disponibles en mi Arduino?
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(115200); // opens serial port, sets data rate
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte, DEC);
}
}
(Código tomado de http://arduino.cc/en/Serial/Available)
Sin embargo, prefiero no utilizar el IDE de Arduino y preferiría compilar mi código C++ con avr-g ++, así que escribí esto, que debería funcionar exactamente el mismo que el anterior:
extern "C" {
#include <avr/io.h>
}
#include <HardwareSerial.h>
extern "C" void __cxa_pure_virtual() { while(1); }
int main (void)
{
int incomingByte = 0;
Serial.begin(115200);
while (1) {
if (Serial.available() > 0) {
incomingByte = Serial.read();
//print as an ASCII character
Serial.print("received: ");
Serial.println(incomingByte, DEC);
}
}
return 1;
}
me compilar y ejecutar, pero no funciona. Nunca veo mi mensaje de eco en mi memoria. Intenté imprimir el valor de Serial.available()
en el lazo while(1)
, y siempre es cero. Cada vez que escribo en el teclado, veo que el LED RX se enciende, pero no pasa nada después de eso. Puedo editar mi código para llamar con éxito al Serial.println()
siempre que esté fuera del condicional Serial.available()
.
He confirmado que mi baud rate en mi software de serie también está configurado en 115200. Y sí, mi software de serie apunta al puerto serie correcto.
¿Qué me estoy perdiendo?