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

2024-05-23 15:26:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用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代码:

^{pr2}$

一些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的素描里。这也意味着您将收到一个字节,它是您的数字,而不是该数字的ascii值,因此您不需要将read-in行从值转换为ascii。在

希望这有帮助。在


Tags: 代码inreadcountlineasciiserial数字
1条回答
网友
1楼 · 发布于 2024-05-23 15:26:23

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

看看出现了什么。如果草图试图通过连续打印(). 几点注意事项。确保串行监视器内设置的波特率与草图中的波特率完全匹配(几乎所有情况下9600都是一个不错的选择)。在

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

对于最初的问题,您可能应该有某种数据分隔符。例如,您可以发送类似于<;53>;的值;。在Python中,您将扫描“<;”,然后继续读取数字,直到得到“>;”。这将允许多个数字作为一个数值发送。在

相关问题 更多 >