Как правильно читать данные с XBee?

Vir
Offline
Зарегистрирован: 04.12.2012

Всем привет.

У меня есть два XBee модуля. Один подключен к Arduino Mega (работает как END DEVICE/ROUTER AT), а другой подключен к компьютеру (работает как COORDINTATOR AT).

На ардуино у меня выполняется следующий скетч:

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);
}

Далее, я запускаю скетч, а на компьютере (к которому подключен координатор) записываю в порт данные:

vir@laptop:~$ echo fuck >> /dev/ttyACM1

Результат, я получаю, следующий:

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)? Почему я не получаю слово целиком? И откуда беруться два пустых символа?

maksim
Offline
Зарегистрирован: 12.02.2012

Vir пишет:
почему данные приходят по одному символу, т.е. считываются по одному за цикл (loop)? Почему я не получаю слово целиком? 
Потому что у вас так написан код.

void setup()
{
  Serial.begin(9600);
  Serial1.begin(9600);
}

void loop()
{
  while(Serial1.available())
  {
    Serial.write(Serial1.read());
    delay(1);
  }
 
  Serial.println("cycle");
  
  while(Serial.available())
  {
    Serial1.write(Serial.read());
    delay(1);
  }
  
  delay(1000);
}

Vir пишет:
И откуда беруться два пустых символа?
Это уже ворос к люнуксоиду, потому как эти два символа шлет ваша строка vir@laptop:~$ echo fuck >> /dev/ttyACM1, могу только предположить, что это символы перехода на новую строку и возврат каретки.