我正在嘗試使用python從arduino中讀取電位器值。但我的串行讀取值很奇怪。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用於發佈您的源代碼,併發布您找到的解決方案。 – jwygralak67
您可以將解決方案作爲答案發布,然後接受您自己的答案,而不是用答案編輯您的問題。這讓人們很清楚地發現有問題的解決方案。 – Craig