2011-12-27 85 views
2

我需要保持通串行通信的整數數據類型,一些幫助。我現在的設置是一個Arduino微控制器讀取一個溫度傳感器,它通過一個XBee模塊通過串口輸出一個浮點數,例如:76.82。字節轉換爲整數Python中

的的XBee接收機被掛接到我的計算機,其中一個Python程序讀取使用從串行模塊的readline()方法。但是,當我做readline()時,我收到b'76.66\r\n'。我如何刪除所有的字符,並保持原來的數據類型的數字?

這裏是我的Python代碼:

import serial 

ser = serial.Serial(6) 

while True: 
    x = ser.readline(); 
    print(x) 

這裏是我的Arduino的代碼:

#include <OneWire.h> 
#include <DallasTemperature.h> 

#define ONE_WIRE_BUS 3 

OneWire oneWire(ONE_WIRE_BUS); 

DallasTemperature sensors(&oneWire); 

DeviceAddress Thermometer = { 0x28, 0x36, 0x0F, 0xB0, 0x02, 0x00, 0x00, 0xF0 }; 

void setup(void) 
{ 
    Serial.begin(9600); 

    sensors.begin(); 
    sensors.setResolution(Thermometer, 12); 
} 

void printTemperature(DeviceAddress deviceAddress) 
{ 
    float tempC = sensors.getTempC(deviceAddress); 
    Serial.println(DallasTemperature::toFahrenheit(tempC)); 
} 

void loop(void) 
{ 
    delay(5000); 
    sensors.requestTemperatures(); 

    printTemperature(Thermometer); 
} 

回答

4

您是否正在尋找?

>>> a = b'76.66\r\n' 
>>> float(a) 
76.66 

編輯:如果「保留了原有的數據類型」你的意思是 「保持它作爲一個字符串」:

>>> a.strip() 
'76.66' 
+0

非常感謝你的完美! – tabchas 2011-12-27 04:44:30

+0

@TabishChasmawala - 開心解決了這個問題。因爲你是新手,我希望你不要介意,如果我提醒你,當答案解決了你的問題時,你應該選擇它作爲接受。除了向回答者提供聲望點(這最終是我們所有人回答問題的唯一原因!)對於未來的訪問者來說,立即看到問題已經解決好也很重要。每個問題只有一個答案可以被標記爲接受。如果不止一個答案是正確的,你通常選擇首先發布的答案,或者最完整/更清楚的答案。歡迎來到StackOverflow! :) – mac 2011-12-27 10:47:12

+0

好吧,我接受了你說的答案,但我不能投票答案,因爲我沒有足夠的聲譽。但是當我這樣做時,我肯定會開始廣泛參與StackOverflow社區。感謝您的歡迎和幫助! – tabchas 2011-12-27 13:56:23

3

要轉換爲float:

float(b'76.66\r\n') 

要整數下降到int:

math.floor(float(b'76.66\r\n')) 
+0

'INT(浮動(b'76.66' ))'會完成舍入部分而無需導入另一個模塊。 – Makoto 2011-12-27 03:39:52

+0

非常感謝你這是完美的! – tabchas 2011-12-27 04:45:15