Python没有从arduino串行输出读取正确的值

Python没有从arduino串行输出读取正确的值,python,arduino,pyserial,Python,Arduino,Pyserial,我正在尝试使用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( ': ' ) +

我正在尝试使用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


希望这能有所帮助。

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

看看出现了什么。如果草图试图通过Serial.print()将数据发送回,通常会非常有用。几点注意事项。绝对确保串行监视器内设置的波特率与草图中的波特率完全匹配(在几乎所有情况下,9600都是一个不错的选择)

第二个要点至关重要。启动串行监视器将强制在Arduino板上重置。你的素描(总是)重新开始。这是一件好事,因为它每次都给你一次全新的体验。请注意,您可以强制重置,只需将波特率设置为9600(即使它已经是9600)。这使您可以在串行监视器内运行许多测试,而无需每次重新启动串行监视器


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

+1用于发布源代码和发布找到的解决方案。您可以将解决方案作为答案发布,然后接受自己的答案,而不是用答案编辑问题。这让发现问题的人明白,有一个解决方案。