Ho eseguito il semplice programma seriale sul mio Arduino Uno, il che equivale a qualsiasi cosa venga digitata. Funziona perfettamente quando si esegue l'IDE di Arduino Sketch (v22).Perché non sono disponibili dati seriali sul mio 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);
}
}
(codice preso da http://arduino.cc/en/Serial/Available)
Tuttavia, preferisco non usare l'IDE Arduino e avrei preferito compilare il mio codice C++ con avr-g ++, così ho scritto questo, che dovrebbe funzionare esattamente lo stesso di sopra:
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;
}
Compilare ed eseguirlo, ma non funziona. Non ho mai visto il mio testo richiamato a me. Ho provato a stampare il valore di Serial.available()
nel ciclo while(1)
, ed è sempre zero. Ogni volta che digito sulla tastiera, vedo il LED RX acceso, ma dopo non succede nulla. Posso modificare il mio codice per chiamare con successo Serial.println()
finché non è compreso tra il condizionale Serial.available()
.
Ho confermato che il mio baud rate nel mio software seriale è anch'esso impostato su 115200. E sì, il mio software seriale punta alla porta seriale destra.
Cosa mi manca?