我试图读取一个已经成功的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
s-readline
将阻塞,直到输出出现。你知道吗您应该将代码构造为分别读取电压和电流:
另外请注意,如果要处理
readline
返回的字符串值,应该首先显式地将它们转换为数字形式。你知道吗请记住,
readline
返回一个包含行终止符的字符串-这些是您在注释中提到的'\r\n'
字符。我看不出你提到的“坏值”是如何产生的,但是如果Arduino的输出允许你区分电压值和电流值,那可能会有帮助。你知道吗我的建议是,您可以在Arduino的一行上以Python程序可以轻松解码的格式打印这两个值。因为在Pi上运行Python程序时,Arduino似乎已经在运行了,所以您可以忽略读取的第一行(可能是部分的),这将保证所有后续行都是完整的输出。你知道吗
您看到的“奇数值”是因为我假设您使用的是python3!因为您似乎在使用python2,所以您的
print
语句应该是这样的然后解释器将输出打印为字符串,而不是试图向您显示包含要打印的四个内容的元组的值。你知道吗
相关问题 更多 >
编程相关推荐