Max7219 и десятичная точка
- Войдите на сайт для отправки комментариев
Чт, 17/05/2012 - 08:47
Есть драйвер индикатора Мах7219 и 3-х цифровой 7 сегментный индикатор.
Небходимо вывести температуру от датчика 18b20 с точностью 1/10.
Пробывал разные варианты но не получается
Подскажите как правильно это сделать
Програмист я неопытный поэтому желательно с примером
Зараннее спасибо.
#include <OneWire.h> // #include <DallasTemperature.h> #include "LedControl.h" // LedControl lc=LedControl(12,11,10,1); // // pin 12 is connected to the MAX7219 pin 1 // pin 11 is connected to the CLK pin 13 // pin 10 is connected to LOAD pin 12 // 1 as we are only using 1 MAX7219 OneWire ds(8); float T; //переменная для хранения температуры int T1; // переменная текущей температуры int ones; int tens; int hundreds; void setup() { lc.clearDisplay(0);// clear screen lc.shutdown(0,false);// turn off power saving, enables display lc.setIntensity(0,7);// sets brightness (0~15 possible values) lc.setScanLimit(1, 3); } void loop() { byte data[12]; // массив для хранения принимаемых от датчика данных byte i; //работа с 1Wire ds.reset(); // любой обмен начинается с импульса reset ds.write(0xCC,1); // т.к. датчик пока один то будем обращаться к нему не по // адресу, а используя команду "пропуск ROM" (0xCC) ds.write(0x44,1); // 0x44 - команда на конвертирование температуры delay(1000); // ждем 1 с (время на конвертацию температуры) ds.reset(); ds.write(0xCC,1); // пропуск ROM ds.write(0xBE); // команда на считывание ОЗУ датчика for ( i = 0; i < 9; i++) { // считываем 9 байт (достаточно 2-х) data[i] = ds.read(); } T = float((data[1] << 8) + data[0])/16; //конвертируем 2 байта в десятичное значение температуры T1 = T*10; hundreds = T1/100; tens=(T1-hundreds*100)/10; ones=T1-(hundreds*100+tens*10); lc.setDigit(0,0,hundreds,false); lc.setDigit(0,1,tens,true); / сюда и надо вставить светящуюся точку во 2 разряде lc.setDigit(0,2,ones,false); // lc.setDigit(0,1,(tens & '.'),true); // lc.setChar(0,1,',',true); }
что именно не получается ?
на Serial датчик температуры правильно кажет?
на сериал показывает точно - но на индикаторах показывает с ошибкой при нагревании и охлаждении температуру показывает десятки и десятые нормально а единицы - четные цифры . Вот такая хрень ...
1. А зачем вы сами, руками, читаете датчик, если уже подключили библиотеку DallasTemperature. Она же может эту "грязную работу" сделать за вас.
2. Убедитесь что у вас свежая версия библиотеки. http://milesburton.com/Dallas_Temperature_Control_Library, там же и пример найти можно.
3. В строке 65, выведите в сериал T,hundreds,tens,ones и напишите тут, что видите в Serial (нужно определится что-то неправильно вычисляем или неправильно LCD рулим). И что при этом видите на LCD
leshak
Спасибо за подсказку!
Все заработало как надо!
Окончательный скетч
Arduino + 18b20 + max7219 +АЛС318