Float и VirtualWire
- Войдите на сайт для отправки комментариев
Считываются показания с датчика температуры .Если температура положительная без "-" разбиваем 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 , а затем как его в приемнике обработать обратно?
В передатчике к темперетаре прибавте к "temperature" переменной n (к примеру 273, получите температуру в кельвинах :) ) что бы не было отрицательного значения
в приемнике - вычтите n из полученно "temperature"
http://youtu.be/gPGOPkj9sSQ
Либо передавать в бинарном виде (тогда пофиг на знаки и проч.), либо, если по прежнему хочется их в текстовом гнать, то.... а в чем проблема?
Положительные числа передавать умеете же? Ну так а в чем сложность отрицательное превратить в положительное? Домножте на -1 да и все. И перед отправкой сделайте Serial.write('-');
А когда приняли, то опять на минус -1 домножить (если перед числом прилетел символ '-')
Это если вам еще и глазами эти летающие строки где-то читать хочется. Что-бы "цифры выглядили натурально".
Если это не важно, и человек никогда не будет это читать, то можно, действительно, как предложил roman2712 просто добавлять ко ВСЕМ числам (и отрицательным и положительным) какое-то большое число, а по приемке - вычитать его. Не обязательно к каким-то реальным цифрам привязываться (кельвинам, фаренгейтам и проч). Можно просто, какое-то круглое, скажем 500, добавлять. Тогда и "на глаз", проще будет читать подобное "сдвинутое число".
Есть третий вариант. Уйдите от float. Просто перед отсылкой домножте, скажем на 100. Получите 1028 или -1028. И запихните в Int переменную. С int-тами, sprintf уже нормально работает. А по приемке - опять таки, разделите на 100. И получите свой float.