【发布时间】:2014-03-12 09:09:32
【问题描述】:
我在玩 arduino。在项目手册中,它有一个从温度传感器获取温度的项目。我上钩了,写了下面的简单代码
const int sensorPin = A0;
void loop(){
int sensorVal = analogRead(sensorPin);
float voltage = (sensorVal / 1024.0)* 5.0;
float temperature = (voltage - .5) * 100;
Serial.println(temperature);
}
在串行监视器中打印温度。我使用 pySerial 像这样从 arduino 获取温度
try:
ser = serial.Serial('/dev/ttyACM0', 9600)
except serial.SerialException as se:
print se
exit()
while True:
temperature = ser.readline()
print "Temp from arduino", temperature
try:
temperature = float(temperature)
print "FLoat temperature", temperature
except ValueError as ve:
print ve
continue
但问题是,虽然来自 arduino ide 的串行监视器正常显示温度(例如 22.3),但一个正常的浮点数是 python 的数字除以 10
Temp from arduino 2.27
FLoat temperature 2.27
我该如何处理?
【问题讨论】:
-
你的输出是一样的吗?此外,你会想要更早地做
float(),因为在收到数据之后......你已经毁了它,因为从一开始就没有把它当作float()。例如,您不能使用x = 10.15; x = int(x); x = float(x);,因为即使您尝试将其转换回来,它也会以10结束。并不是说这会有所帮助,而是改为使用temperature = float(ser.readline()。 -
串行监视器中的输出和输入pySerial中的输出之间存在差异很奇怪。我认为没有理由 - 它们都显示来自串行接口的文本。我有两个问题和一个建议。为什么不除以 1023 而不是 1024?为什么是
- .5?尝试将voltage的值打印到串口以查看结果。 -
@Torxed ValueError: invalid literal for float(): 22.73.24 这就是我得到的 float(ser.readline()) 它就像它从下一行读取一行和一些东西.. .我必须同步arduino Serial.println() 和python 的serial.readline() 吗?
-
@Torxed 我不认为有什么东西被毁了......第一次
temperature是一个字符串,这是在将其转换为浮点数之前打印以进行调试的好主意。确实,为此使用不同的变量是一种更好的做法...... -
可能是因为我在运行 python 脚本的同时打开了 Ide 监视器?