我正在尝试使用 python 从 arduino 读取电位器值。但是我的串行读取值很奇怪。
蟒蛇代码:
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。
希望这可以帮助。