【问题标题】:arduino serial and pySerialarduino 串行和 pySerial
【发布时间】: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 监视器?

标签: python arduino pyserial


【解决方案1】:

您的 Arduino 将温度以外的其他内容打印到串行接口上​​。尝试在温度前加上一些标签并在 python 端解析它:

Serail.print('Temp:')
Serial.println(temperature);

在客户端:

input = ser.readline()
print "Input from arduino", input
try:
    if input.startswith('Temp:')
    temperature = float(input[len('Temp'):])
        print "Float temperature", temperature

【讨论】:

    猜你喜欢
    • 2014-09-10
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多