2011-12-27 4 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 - Счастлив, это решило проблему. Поскольку вы новичок, я надеюсь, вы не возражаете, если я напомню вам, что, когда ответ решает вашу проблему, вы должны выбрать ее как принятую. Помимо предоставления репутации респонденту (что в конечном итоге является единственной причиной, по которой мы все отвечаем на вопросы!), Важно также, чтобы будущий посетитель сразу увидел, что проблема решена навсегда. Только один ответ на вопрос может быть отмечен как принятый. Если более одного ответа верны, вы обычно выбираете тот, который был опубликован первым, или самый полный/более четкий. Добро пожаловать на StackOverflow! :) – mac

+0

Хорошо, я согласился с ответом, как вы сказали, но я не могу проголосовать за ответ, поскольку у меня недостаточно репутации. Но когда я это сделаю, я обязательно приму участие в сообществе StackOverflow. Спасибо за приветствие, а также за помощь! – tabchas

3

Для преобразования к поплавку:

float(b'76.66\r\n') 

Для округлить до нуля:

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

'Int (поплавком (b'76.66')) 'будет выполните округление части без необходимости импорта другого модуля. – Makoto

+0

Спасибо, что это прекрасно! – tabchas

Смежные вопросы