use*_*726 11 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( ': ' ) + str( line ) )
count = count + 1
ser.close()
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
一些Python输出:这个输出来自电位器的直接,缓慢增加,我从来没有在任何时候将其调低.
1: 56
2: 57
3: 49
4: 48
5: 49
6: 49
7: 49
8: 50
9: 49
10: 51
Run Code Online (Sandbox Code Playgroud)
当我运行arduino串行终端时,我得到的值范围为0-179.为什么Python不能从串口获取正确的值?
谢谢
编辑:
解决了这个问题.48-55是1-9的ascii值,因此更改python代码以打印字符而非值.然而,这会导致另一个问题,即它打印个别数字.例如,数字"10"以单个"1"和"0"形式出现.这可以通过在arduino sketch中使用Serial.write而不是Serial.print来解决.这也意味着您将收到一个字节,这是您的数字,而不是数字的ascii值,因此您不需要将读取行的值从一个值转换为ascii.
希望这可以帮助.
让我尝试提供一些可能对其他遇到类似问题的人有所帮助的评论(即使这个问题已经解决)。首先,尝试使用串行监视器运行 Arduino 草图几次。您可以在 IDE 菜单的“工具”下找到“串行监视器”。您还可以键入 Ctrl-Shift-M 来调用串行监视器。
看看会出现什么。如果您的草图尝试通过 Serial.print() 发送回数据,这通常会很有帮助。一些笔记。绝对确保串行监视器内设置的波特率与草图中的波特率完全匹配(在几乎所有情况下 9600 都是一个不错的选择)。
第二个注释很关键。打开串行监视器会强制 Arduino 板上重置。你的草图(总是)重新开始。这是一件好事,因为它每次都能让你焕然一新。请注意,您可以强制重置,只需将波特率设置为 9600(即使它已经是 9600)。这使您可以在串行监视器内运行许多测试,而不必每次都重新启动串行监视器。
至于你原来的问题,你可能应该有某种数据分隔符。例如,您可以发送类似 <53> 的值。在 Python 中,您将扫描“<”,然后继续读取数字,直到找到“>”。这将允许多个数字作为一个数值发送。
| 归档时间: |
|
| 查看次数: |
2725 次 |
| 最近记录: |