2011-12-27 17 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 

EDIT: "文字列としてそれを維持" あなたは意味 "元のデータ型を保持" による場合:

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

ありがとう、これは完璧です! – tabchas

+0

@ TabishChasmawala - これで問題は解決しました。あなたが新しいものであることから、回答があなたの問題を解決したら、それを受け入れたものとして選択する必要があることを忘れないでください。回答者に評判のポイントを与えるだけでなく(最終的に私たちはすべて質問に答える唯一の理由です)、将来の訪問者が問題が良いものとして解決されたことをすぐに知ることも重要です。受け入れられたとして1つの質問につき1つの回答だけをマークすることができます。複数の回答が正しい場合は、最初に投稿されたもの、または最も完全なもの/より鮮明なものを通常選択します。 StackOverflowへようこそ! :) – mac

+0

あなたが言ったように私は答えを受け入れましたが、私は十分な評判がないので答えを投票することはできません。しかし私がそうするとき、私は間違いなくStackOverflowコミュニティに広く参加し始めます。歓迎だけでなく、助けをありがとう! – tabchas

3

floatに変換するには:

float(b'76.66\r\n') 

へそれを整数に丸める:

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

'int型(float型(b'76.66' ))'だろう別のモジュールをインポートせずに切り捨て部分を実行します。 – Makoto

+0

ありがとう、これは完璧です! – tabchas

関連する問題