Я запустил простую последовательную программу на моем 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)
Однако я предпочитаю не использовать Arduino IDE и скорее скомпилируюмой код C ++ с avr-g ++, поэтому я написал это, которое должно функционировать точно так же, как указано выше:
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;
}
Я компилирую и запускаю его, но он не работает.Я никогда не вижу, чтобы мой текст эхом возвращался ко мне. Я попытался распечатать значение Serial.available()
в цикле while(1)
, и оно всегда равно нулю. Всякий раз, когда я печатаю на клавиатуре, я вижу, что загорается светодиод RX, но ничего не происходитпосле этого я могу отредактировать свой код для успешного вызова Serial.println()
, если он находится вне условного Serial.available()
.
Я подтвердил, что моя скорость передачи в моем последовательном программном обеспечениитакже установлен на 115200. И да, мое последовательное программное обеспечение указывает на правильный последовательный порт.
Чего мне не хватает?