Float и VirtualWire

Ru-bi
Offline
Зарегистрирован: 12.09.2014

Считываются показания с датчика температуры .Если температура положительная без "-" разбиваем Float

на на 2 по int затем в обьеденям в строку и передаем проблем нет пока температура не отрицательная.

Что делать если температура отрицательная к примеру -10С. Конструкция в роде

float temperature;///// = getTemp();
temperature=10.28;                                                                                                                                  char msg[50];                                                                                                                      sprintf(msg,"%f",temperature)                                                                                                                 vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();

 

не работает?

Вопрос как передать отрицательный Float по VirtualWire , а затем как его в приемнике обработать обратно?

roman2712@mail.ru
Offline
Зарегистрирован: 16.01.2014

В передатчике к темперетаре прибавте к "temperature" переменной n (к примеру 273, получите температуру в кельвинах :) ) что бы не было отрицательного значения

в приемнике - вычтите n из полученно "temperature"

 

Пушной звер
Пушной звер аватар
Offline
Зарегистрирован: 17.03.2013
leshak
Offline
Зарегистрирован: 29.09.2011

Либо передавать в бинарном виде (тогда пофиг на знаки и проч.), либо, если по прежнему хочется их в текстовом гнать, то.... а в чем проблема?
Положительные числа передавать умеете же? Ну так а в чем сложность отрицательное превратить в положительное? Домножте на -1 да и все. И перед отправкой сделайте Serial.write('-');
А когда приняли, то опять на минус -1 домножить (если перед числом прилетел символ '-')
Это если вам еще и глазами эти летающие строки где-то читать хочется. Что-бы "цифры выглядили натурально".

Если это не важно, и человек никогда не будет это читать, то можно, действительно, как предложил roman2712 просто добавлять ко ВСЕМ числам (и отрицательным и положительным) какое-то большое число, а по приемке - вычитать его. Не обязательно к каким-то реальным цифрам привязываться (кельвинам, фаренгейтам и проч). Можно просто, какое-то круглое, скажем 500, добавлять. Тогда и "на глаз", проще будет читать подобное "сдвинутое число".

Есть третий вариант. Уйдите от float. Просто перед отсылкой домножте, скажем на 100. Получите 1028 или -1028. И запихните в Int переменную. С int-тами, sprintf уже нормально работает. А по приемке - опять таки, разделите на 100. И получите свой float.