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

2024-09-30 04:27:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我通过串行端口将一个arduino uno连接到一个raspberry。树莓正在接收来自机器人的数据,并通过串口将这些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

我只是不明白我做错了什么。你知道吗


Tags: 端口importreadtimeserialraspberryarduinoint
1条回答
网友
1楼 · 发布于 2024-09-30 04:27:53

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

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

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

相关问题 更多 >

    热门问题