Разделить float на разряды
- Войдите на сайт для отправки комментариев
Делаю часы с термометром и большим светодиодным дисплеем (63 светодиода на цифру). Дисплей управляется двумя 16-разрядными драйверами MBI5026. Информацию вывожу в них бесхитростным ШифтАут. С выводом времени всё ясно, поделил целое четырёхзначное на разряды, да отправил. А вот с температурой засада. Есть у меня переменная float mytemp= (celsius/16.0); celsius ранее объявлена как volatile int celsius; Заполнение переменных происходит в следующем участке кода
ISR (WDT_vect){ //вектор прерывания WD static boolean n=0; // флаг работы: запрос температуры или её чтение n=!n; counter++; digitalWrite(4,n); if (counter==5) {counter=0;} if (n) {ds.reset(); // сброс шины ds.select(addr); // выбор адреса ds.write(0x44); // начать преобразование (без паразитного питания) } else {ds.reset(); ds.select(addr); ds.write(0xBE); // Read Scratchpad (чтение регистров) celsius = ds.read() | (ds.read()<<8); //прочитаны 2 байта
Код этот я взял когда-то здесь, на форуме, однако принципа его работы я не понимаю. А именно, сколько не читал даташит к ДС18Б20, так и не выяснил в каком чудо-формате датчик в двух байтах хранит и отправляет измеренную температуру. Отсюда и вопрос, что делает эта строка celsius = ds.read() | (ds.read()<<8); //прочитаны 2 байта ...Вжжжух, и температура измерена....
Так вот, к самому вопросу: есть у меня переменная mytemp. Она то отрицательная, то положительная. То больше 9,9, то меньше (разное колличество десятичных разрядов).Имеет после запятой то один знак, то два. А мне её надо на дислей вытащить. То есть точно разложить по четырём знакоместам. Коллеги, как это сделать с float?
Код этот я взял когда-то здесь, на форуме, однако принципа его работы я не понимаю. А именно, сколько не читал даташит к ДС18Б20, так и не выяснил в каком чудо-формате датчик в двух байтах хранит и отправляет измеренную температуру. Отсюда и вопрос, что делает эта строка celsius = ds.read() | (ds.read()<<8); //прочитаны 2 байта ...Вжжжух, и температура измерена....
Здесь немного разбирались.
Раз уж Вы используете float, то (кутить, так кутить) воспользуйтесь функцией dtostrf. Получите число в строке с нужным форматированием, ну а там уж всё просто.