【问题标题】:Python not reading correct values from arduino serial outputPython没有从arduino串行输出中读取正确的值
【发布时间】:2013-10-27 09:22:48
【问题描述】:

我正在尝试使用 python 从 arduino 读取电位器值。但是我的串行读取值很奇怪。

Python 代码:

import serial

ser = serial.Serial('COM12')

print ( "connected to: " + ser.portstr )
count = 1                    

while True:
    for line in ser.read():
        print( str(count) + str( ': ' ) + str( line ) )
        count = count + 1


ser.close()

Arduino 代码:

int potpin = 0;  // analog pin used to connect the potentiometer
int val = 0;       // variable to store the value coming from the sensor
int oldVal = 0;   // used for updating the serial print

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

void loop() 
{ 
  val = analogRead(potpin);             
  val = map(val, 0, 1023, 0, 179);     

  if( val != oldVal )
  {
    Serial.print(val);         // print the value from the potentiometer
    oldVal = val;
  }

  delay(100);
}

一些 Python 输出: 该输出来自电位器的直线缓慢增加,我从未在任何时候将其调低。

1: 56
2: 57
3: 49
4: 48
5: 49
6: 49
7: 49
8: 50
9: 49
10: 51

当我运行 arduino 串行终端时,我得到的值范围是 0-179。为什么 Python 不能从串口获取正确的值?

谢谢

编辑:

解决了这个问题。 48-55 是 1-9 的 ascii 值,因此只需更改 python 代码以打印字符而不是值。但是,这会导致另一个问题,因为它会打印单个数字。例如,数字“10”以单个“1”和“0”的形式出现。这可以通过在 arduino 草图中使用 Serial.write 而不是 Serial.print 来解决。这也意味着您将收到一个字节,它是您的数字,而不是数字的 ascii 值,因此您无需将读取的行从值转换为 ascii。

希望这会有所帮助。

【问题讨论】:

  • +1 用于发布您的源代码,以及发布您找到的解决方案。
  • 您可以将解决方案作为答案发布,然后接受您自己的答案,而不是用答案编辑您的问题。这让人们清楚地发现问题是有解决方案的。

标签: python arduino pyserial


【解决方案1】:

让我尝试提供一些可能对其他有类似问题的人有帮助的 cmets(即使这个问题已经解决了)。首先,尝试使用串行监视器运行几次 Arduino 草图。您可以在 IDE 菜单的工具下找到串行监视器。您还可以键入 Ctrl-Shift-M 来调用串行监视器。

看看出现了什么。如果您的草图尝试通过 Serial.print() 发回数据,这通常会很有帮助。一些笔记。确保串行监视器中设置的波特率与草图中的波特率完全匹配(9600 在几乎所有情况下都是不错的选择)。

第二个注释很关键。启动串行监视器会强制在 Arduino 板上进行重置。您的草图(总是)重新开始。这是一件好事,因为它每次都能让您焕然一新。请注意,您可以强制重置,只需将波特率设置为 9600(即使它已经是 9600)。这使您可以在串行监视器中运行许多测试,而不必每次都重新启动串行监视器。

至于您最初的问题,您可能应该有某种数据分隔符。例如,您可以发送 之类的值。在 Python 中,您将扫描“”。这将允许将多个数字作为一个数值发送。

【讨论】:

    猜你喜欢
    • 2022-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    相关资源
    最近更新 更多