2014-02-13 94 views
0

我正在玩arduino。在項目書中,它有一個用於從溫度傳感器獲取溫度的項目。我迷上了它,並寫下如下簡單代碼arduino串行和pySerial

const int sensorPin = A0; 
void loop(){ 
    int sensorVal = analogRead(sensorPin); 
    float voltage = (sensorVal/1024.0)* 5.0; 
    float temperature = (voltage - .5) * 100; 
    Serial.println(temperature); 
} 

打印串口監視器中的溫度。我用pySerial從這樣

try: 
    ser = serial.Serial('/dev/ttyACM0', 9600) 
except serial.SerialException as se: 
    print se 
    exit() 

while True: 
    temperature = ser.readline() 
    print "Temp from arduino", temperature 
    try: 
     temperature = float(temperature) 
     print "FLoat temperature", temperature 
    except ValueError as ve: 
     print ve 
     continue 

Arduino的獲得臨時但問題是,雖然從阿爾杜伊諾IDE串行監視器的顯示通常的溫度(22.3 EG)是蟒正常浮點數具有數除以10

Temp from arduino 2.27 
FLoat temperature 2.27 

我該如何處理?

+0

你的輸出是相同的?另外,你會想要'漂浮()'更早,因爲在收到數據之後..你已經毀了它,從一開始就不把它看作是一個'float()'。例如,你不能做'x = 10.15; x = int(x); x = float(x);'因爲即使你試圖將其轉換回來,它也會結束'10'。不是這樣做會有所幫助,而是使用'temperature = float(ser.readline()'來代替 – Torxed

+0

在串口監視器和輸入pySerial中輸出有區別是很奇怪的,我認爲沒有理由 - 顯示來自串行接口的文本我有兩個問題和一個建議,爲什麼不用1023而不是1024進行分頻?爲什麼這個「 - .5」?試着將串行的「voltage」值打印出來結果 –

+0

@Torxed ValueError:float()的無效文字:22.73.24這就是我得到的float(ser.readline())它就像它讀取一行以及下面一行中的內容......必須同步arduino Serial.println()和python的serial.readline()? – Apostolos

回答

0

它接縫以外的東西除了溫度被Arduino打印到串行接口。嘗試使用一些標籤前綴的溫度和Python端解析它:

Serail.print('Temp:') 
Serial.println(temperature); 

並在客戶端:

input = ser.readline() 
print "Input from arduino", input 
try: 
    if input.startswith('Temp:') 
    temperature = float(input[len('Temp'):]) 
     print "Float temperature", temperature