Как отправить целое число через pyserial с Python на Arduino и получить тот же результат?

В Интернете были подобные вопросы, но ни один из них, похоже, не ответил на мой вопрос. Может ли кто-нибудь сказать мне, что не так с этим кодом и как я могу это исправить?

Код Python:

import serial

arduino_linux=serial.Serial("/dev/ttyACM0",9600)
while True:
    print('write:',str.encode('90')) #print the sent value through the serial to check it with the readed value
    arduino_linux.write(str.encode('90'))#send the following value
    print('readed:',arduino_linux.read())#read the same value back from the arduino

мой код Arduino выглядит следующим образом

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

}

void loop() {
  Serial.write(Serial.read());

}

Это простой пример проекта. Моя цель в этом коде — отправить целое число 90 из pyserial и убедиться, что значение, считываемое Arduino, является тем же целым числом.

В случае необходимости мой проект представляет собой отслеживание объекта с детектором объектов, и после расчета всех углов и всего остального он отправляет их на Arduino, чтобы Arduino мог воздействовать на сервоприводы.

Вот результат, который я получаю:

Но мне бы хотелось что-то вроде:

write:b '90'

прочитано:b '90', а не b'9' или b'0'

Мне также хотелось бы знать, как преобразовать эти байты в целые числа, прежде чем записывать их в сервопривод.

, 👍0


1 ответ


Лучший ответ:

0

Используйте Serial.write() на Arduino для отправки необработанных байтов. print преобразует их в текст.

read не блокируется, не ждет байта и возвращает -1, если буфер приема пуст. Проверьте, вернуло ли чтение значение -1, или используйте Serial.available(), чтобы получить количество байтов в буфере RX.

Серийное «эхо»:

void loop() {
  if (Serial.available()) {
    Serial.write(Serial.read());
  }
}
,