значение int, полученное через serial, выводится неправильно - PullRequest
0 голосов
/ 25 октября 2018

Я подключил Arduino Uno к малины через последовательный порт.Малина получает данные от робота и посылает эти значения int через последовательный порт в arduino.Проблема теперь в том, что когда я печатаю значения на последовательном мониторе, значения int разделяются на несколько строк.

Код Arduino

int usbRead = 1;
int i = 0;

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

void loop() {
  if(Serial.available()) {
    usbRead = (Serial.read() - '0');
    Serial.print("Received:");
    Serial.println(usbRead);
  }
}

Сценарий Python:

import time
import sys
import signal
import serial

usbCom = serial.Serial('/dev/ttyACM0', 9600)

try:
    while True:
        a=robot.read("EXTRUDER")
        b = int(a)
        c=b'%d' %b
        print(c)

        usbCom.write(c)
        time.sleep( 1 )
except KeyboardInterrupt:
    print('interrupted')

Вывод должен быть

Received: 56
Received: 56
Received: 56

Но я получаю

Received: 5
Received: 6
Received: 5
Received: 6
Received: 5
Received: 6

Я просто не понимаю, что я делаю неправильно.

1 Ответ

0 голосов
/ 25 октября 2018

Вы можете использовать Serial.parseInt (), чтобы прочитать число, отправленное с Serial Monitor.parseInt ожидает всех числовых символов отправленного текста, поэтому он блокирует выполнение вашего эскиза на очень короткое время, пока все символы не будут получены.При более высокой скорости передачи это будет быстрее.Если ваш эскиз не должен зацикливаться как можно быстрее, вы можете использовать его.parseInt останавливается на первом символе, который не является цифрой (например, символ новой строки), и возвращает полученный номер как длинный.

void setup() {
  Serial.begin(115200);     
}

void loop() {
  if (Serial.available() > 0) {
    long number = Serial.parseInt();
    Serial.println(number);
  }
}
...