Я запустил простую последовательную программу на моем Arduino Uno , которая просто повторяет все, что вы вводите в нее. Это отлично работает при запуске в Arduino Sketch IDE (v22).
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);
}
}
(Код взят из http://arduino.cc/en/Serial/Available )
Однако я предпочитаю не использовать IDE Arduino и предпочитаю компилировать свой код C ++ с avr- g ++, поэтому я написал это, которое должно работать точно так же, как указано выше:
extern "C" {
#include
}
#include
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;
}
Я компилирую и запускаю его, но он не работает. Я никогда не видел, чтобы мой текст отражался от меня. Я попытался распечатать значение Serial.available ()
в цикле while (1)
, и оно всегда равно нулю. Каждый раз, когда я печатаю на клавиатуре, я вижу, как загорается светодиод RX, но после этого ничего не происходит. Я могу отредактировать свой код для успешного вызова Serial.println ()
, если он находится вне условного условия Serial.available ()
.
Я подтвердил, что моя скорость передачи в моем последовательном программном обеспечении также установлена на 115200. И да, мое последовательное программное обеспечение указывает на правильный последовательный порт.
Что мне не хватает?