Serialdata导入python“每隔一个数据点”

2024-09-28 01:27:26 发布

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

我试图读取一个已经成功的arduino的串行数据。从arduino读取的值是电压和电流。我现在正试图区分不同的变量,但我不知道如何区分。arduino正在按以下顺序发送值,延迟1秒。电压,安培,电压,安培。 如何将这些值区分为不同的变量? 这是我当前的代码,它根本不区分变量。你知道吗

import time
import serial
values = []
serialVoltage = serial.Serial('/dev/ttyACM0', baudrate=9600, timeout=1)
voltage = serialVoltage.readline()
time.sleep(1)
while True:print(voltage)



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

    void loop() {
      float voltageRead = analogRead(A0);
      float ampsRead = analogRead(A1);
      float calculatedVoltage = voltageRead / 103;
      float calculatedCurrent = ampsRead / 1;
      Serial.println(calculatedVoltage);
      delay(1000);
      Serial.println(calculatedCurrent);

      delay(1000);
    }

Tags: importtimeserialfloatarduino区分电压voltage
1条回答
网友
1楼 · 发布于 2024-09-28 01:27:26

首先,您不需要raspberry Pi上的sleeps-readline将阻塞,直到输出出现。你知道吗

您应该将代码构造为分别读取电压和电流:

while True:
    voltage = serialVoltage.readline()
    current = serialVoltage.readline()
    print("V:", voltage, "A:", current)

另外请注意,如果要处理readline返回的字符串值,应该首先显式地将它们转换为数字形式。你知道吗

请记住,readline返回一个包含行终止符的字符串-这些是您在注释中提到的'\r\n'字符。我看不出你提到的“坏值”是如何产生的,但是如果Arduino的输出允许你区分电压值和电流值,那可能会有帮助。你知道吗

我的建议是,您可以在Arduino的一行上以Python程序可以轻松解码的格式打印这两个值。因为在Pi上运行Python程序时,Arduino似乎已经在运行了,所以您可以忽略读取的第一行(可能是部分的),这将保证所有后续行都是完整的输出。你知道吗

您看到的“奇数值”是因为我假设您使用的是python3!因为您似乎在使用python2,所以您的print语句应该是这样的

print "V:", voltage, "A:", current

然后解释器将输出打印为字符串,而不是试图向您显示包含要打印的四个内容的元组的值。你知道吗

相关问题 更多 >

    热门问题