Всем привет. У меня есть два XBee модуля. Один подключен к Arduino Mega (работает как END DEVICE/ROUTER AT), а другой подключен к компьютеру (работает как COORDINTATOR AT). На ардуино у меня выполняется следующий скетч: Код (Text): void setup() { Serial.begin(9600); Serial1.begin(9600); } void loop() { if (Serial1.available()) { char incoming = Serial1.read(); Serial.print("Serial1 data: "); Serial.println(incoming); } Serial.println("cycle"); if (Serial.available()) { Serial1.print("Serial data: "); Serial1.println(Serial.read()); } delay(1000); } Далее, я запускаю скетч, а на компьютере (к которому подключен координатор) записываю в порт данные: Код (Text): vir@laptop:~$ echo fuck >> /dev/ttyACM1 Результат (на serial monitor'е), я получаю, следующий: Код (Text): cycle cycle cycle cycle cycle Serial1 data: f cycle Serial1 data: u cycle Serial1 data: c cycle Serial1 data: k cycle Serial1 data: cycle Serial1 data: cycle cycle cycle cycle cycle Собственно вопрос, почему данные приходят по одному символу, т.е. считываются по одному за цикл (loop)? Почему я не получаю слово целиком? И откуда беруться два пустых символа?
Не успевают просто за раз прийти. Это нормально. Вы можете настроить /dev/ttyACM0 через `stty` так, что флашиться он будет сразу со всей строкой. А что касается двух пустых символов, полагаю что это \r и \n. Т.е. перенос строки, который добавляет `echo`
Всем спасибо. В который раз, беда в моей невнимательности. Как тут уже сказали, вместо if'а, нужно было использовать while. А за echo -n - спасибо.