Я пытаюсь установить связь через последовательный порт между ПК с Ubuntu 14.04LTS и моей платой RoMeo Arduino (Atmega 328). Используемый последовательный интерфейс - это 2 модуля Xbee, один на ПК и другой на плате.Потеря информации с помощью XBee
Во-первых, я пытаюсь разработать простую программу для отправки сообщений на доску и получения их обратно. Код я использую для платы Arduino является следующее:
void loop(void)
{
char msg;
if (Serial.available()){
msg = Serial.read();
msg = Serial.print(msg);
}
}
Когда я посылаю уникальный характер, компьютер получает его обратно правильно. Тем не менее, проблема я столкнулся в том, что для более длинных строк, следующие символы с ошибками, как я получить обратно странные числа шестигранных следующим образом:
>>> import serial
>>> ser = serial.Serial(port='/dev/ttyUSB0', baudrate=57600, timeout=0.1)
>>> ser.write('H')
>>> ser.read(1)
'H'
>>> ser.write('Hello')
>>> ser.read(5)
'H\x8b\xbd'
Спасибо заранее.
EDIT: Кажется, проблема с переполнением с XBee modules, но я не могу понять это полностью: проблема решена, если я жду 0,01 секунды или более между отправленными символами, что является огромным количеством времени. А именно, код, который я использую сейчас для отправки слово является:
for letter in word:
serial.write(letter)
time.sleep(0.01)
Однако, это время ожидания необходимо только при передаче данных от компьютера к Arduino. Когда общение идет в другую сторону (Arduino отправляет данные на ПК), мне не нужно спать, а байты правильно отправляются вместе на скорости 57600 бод.
Попробуйте объявить 'msg' как' int' и использовать 'Serial.write (msg)' для эхо-символа. – mhawke
Сделано, как вы сказали, @mhawke, но проблема сохраняется. Если я пишу в Python >> ser.write ('Hello'), я получаю обратно 'H \ x8b' – Jalo
@mhawke 'Serial.write()' принимает 'byte' не' int' @Jalo попытаться установить задержку между 'ser.write()' и 'ser.read()' – mactro