【问题标题】:int value obtained via serial is output incorrectly通过串口获取的 int 值输出错误
【发布时间】:2018-10-25 19:31:32
【问题描述】:

我通过串行端口将 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

我只是不明白我做错了什么。

【问题讨论】:

  • 这里只是确认一下,当你在 python 中 print(c) 时,它会输出 56 到控制台吗?
  • @BobserLuck 是的,python 的输出是正确的,我得到 56
  • Serial.read() 返回串行传入数据的第一个字节。也许this Q&A 有帮助。
  • @shmee 感谢您的帮助,它成功了

标签: python arduino serial-port


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多