通过串行获取的int值输出不正确

时间:2018-10-25 09:37:47

标签: python arduino serial-port

我通过串行端口将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 :(得分:0)

您可以使用Serial.parseInt()读取从串行监视器发送的数字。 parseInt等待发送文本的所有数字字符,因此它会在很短的时间内阻止草图的执行,直到收到所有字符。波特率越高,速度越快。如果您的草图不需要尽可能快地循环,则可以使用它。 parseInt会以第一个不是数字的字符(例如换行符)停止,并返回接收到的数字。

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

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