串行数据导入 python "every other data point"

Serialdata import python "every other data point"

我正在尝试读取 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);
    }

首先,您不需要 raspberry Pi 上的 sleep - readline 将阻塞直到输出出现。

您应该构建代码以分别读取电压和电流:

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

另请注意,如果您想使用 readline 返回的字符串值,您应该首先将它们显式转换为数字形式。

请记住 readline returns 一个包含行终止符的字符串 - 这些是您在评论中提到的 '\r\n' 个字符。我看不出你提到的 "bad values" 是如何创建的,但如果 Arduino 输出允许你区分电压和电流值,它可能会有所帮助。

我的建议是,您实际上从 Arduino 以一种可以很容易地被您的 Python 程序解码的格式在一行中打印出这两个值。由于当您 运行 Pi 上的 Python 程序时,Arduino 似乎已经 运行ning 了,因此您可以简单地忽略您阅读的第一行(可能是部分行),这将保证所有后续行都是完整的输出。

你看到的 "odd values" 是因为我假设因为你使用了 print(voltage) 的形式,所以你正在使用 Python 3!由于您似乎正在使用 Python 2,因此您的 print 语句可能应该读作

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

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