Uno + DS3231 + DHT11 + 1602-I2C + 4-bit digital tube module 74hc595
- Войдите на сайт для отправки комментариев
Добрый вечер господа и дамы!
Живем в семье с женой, 1,5 годовалям сыном и 2х месячным сыном. Погода в последнее время крайне не постоянная. Жена попросила "спаять" ей что-то типа термометра рядом с детской кроваткой со встроенными часиками. Не долга думая начал "паять" как говориться, из того, что было. А было у меня много чего, но выбрал я arduino UNO r3 добавил к ней DHT11 и LCD1602 через I2C. Термометр не самый точный, но если холодает в квартире, то видим и включаем обогреватель. Недавно моей жене захотелось, что бы помимо термометра еще отображались часики, и я нашел парочку примеров подобных решений и прикрутил к термометру дату и время, как раз в дисплей все удачно вписалось. Через пару деньков супруга моя изьявила еще одно желание - сделать часики по крупнее, а то ночью плоховато видно, и я достал из шляпы 4-bit digital tube module 74hc595 дисплей и начал его "припаивать". Тут то у меня и закончились все навыки и умения, и с примерами подобных решений как-то не очень в интернете дела обстоят. Все дело в том, что часики на LCD1602 показывают время с :, например: 23:01:57, а дисплей всего четырех символьный. Помогите господа прикрутить дисплейчик к термометру, жена очень просит, я отказать не могу, и сам доделать до конца не могу, а жену не охото огорчать)))
Скеч мой ниже:
#include <LiquidCrystal_I2C.h> #include <DS3231.h> #include <EEPROM.h> #include <DHT.h> #define DHTPIN A0 // к какому пину будет подключен сигнальный выход датчика //выбор используемого датчика #define DHTTYPE DHT11 // DHT 11 используем в данный момент //#define DHTTYPE DHT22 // DHT 22 (AM2302) не используем //#define DHTTYPE DHT21 // DHT 21 (AM2301) не используем //-----------дисплей----------- #include <TM74HC595Display.h> int SCLK = 7; int RCLK = 6; int DIO = 5; TM74HC595Display disp(SCLK, RCLK, DIO); unsigned char LED_0F[29]; //--------дисплей------- //инициализация датчика DHT dht(DHTPIN, DHTTYPE); byte degree[8] = // кодируем символ градуса { B00111, B00101, B00111, B00000, B00000, B00000, B00000, }; LiquidCrystal_I2C lcd(0x27, 16, 2); //Массив, содержащий время компиляции char compileTime[] = __TIME__; char compileDate[] = __DATE__; DS3231 Clock(SDA, SCL); Time RTC_Time; void setup() { Serial.begin(115200); Clock.begin(); // initialize the LCD lcd.begin(); lcd.backlight(); lcd.clear(); dht.begin(); lcd.createChar(1, degree); // Создаем символ под номером 1 //Получаем число из строки, зная номер первого символа byte hour = getInt(compileTime, 0); byte minute = getInt(compileTime, 3); byte second = getInt(compileTime, 6); unsigned int hash = hour * 60 * 60 + minute * 60 + second; if (EEPROMReadInt(0) != hash) { //Сохраняем новый хэш EEPROMWriteInt(0, hash); // Записываем время в часы Clock.adjust(compileDate, compileTime); } //для дисплея цифры LED_0F[0] = 0xC0; //0 LED_0F[1] = 0xF9; //1 LED_0F[2] = 0xA4; //2 LED_0F[3] = 0xB0; //3 LED_0F[4] = 0x99; //4 LED_0F[5] = 0x92; //5 LED_0F[6] = 0x82; //6 LED_0F[7] = 0xF8; //7 LED_0F[8] = 0x80; //8 LED_0F[9] = 0x90; //9 } void loop() { //Для запроса времени в структуру "Time" RTC_Time = Clock.getTime(); // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor) float h = dht.readHumidity(); // Read temperature as Celsius float t = dht.readTemperature(); // Read temperature as Fahrenheit float f = dht.readTemperature(true); // Выводим показания влажности и температуры //Вывод дня недели: Пока их не вывдим, дисплей не позволяет //Serial.print(Clock.getDOWStr()); //Serial.print(" "); lcd.setCursor(0, 0); lcd.print(Clock.getDateStr()); lcd.setCursor(11, 0); lcd.print("%"); lcd.setCursor(12, 0); // Устанавливаем курсор на 7 символ lcd.print(h, 1); // Выводим на экран значение влажности lcd.setCursor(0, 1); lcd.print(Clock.getTimeStr()); lcd.setCursor(11, 1); lcd.print("\1C"); lcd.setCursor(12, 1); // Устанавливаем курсор на 7 символ lcd.print(t, 1); // Выводим значение температуры //disp.digit4(Clock.getTimeStr(),50); //вывод на дисплей 4Bit delay(1000); } char getInt(const char* string, int startIndex) { return int(string[startIndex] - '0') * 10 + int(string[startIndex + 1]) - '0'; } //Запись двухбайтового числа в память void EEPROMWriteInt(int address, int value) { EEPROM.write(address, lowByte(value)); EEPROM.write(address + 1, highByte(value)); } //Чтение числа из памяти unsigned int EEPROMReadInt(int address) { byte lowByte = EEPROM.read(address); byte highByte = EEPROM.read(address + 1); return (highByte << 8) | lowByte; }
Друзья, я много не прошу, мне бы только помочь разобраться как из этого
сделать переменную и из 4х символов и записать ее, а после вывести в
только вместо Clock.getTimeStr будет новая переменая, которая будет выводиться на дисплей
Вообще-то приведенный фрагмент связан с коррекцией частв и никакого отношения к индикации не имеет.
Если же надо "раздраконить" байтовыю переменную на десятичные разряды, для этого применяются операции деления и взятия остатка по модулю 10.
Я язык знаю условно поверхостно, может есть некий подобный пример, был бы блпгодарен?
или может можно прменить какое-то другое решение?
http://www.programming1189.ru/files/Kern_Ritch.pdf
Спасибо за книжку, конечно, но наличие 2х деток напрочь исключают возможность изучения языка, любого языка, кроме русского, со старши сыном... но, к сожалению, не русском языке нельзя программировать ардуину, а к великому счастью можно на нем программировать сына))) но сын не может отображать точное время на дисплее 4-bit digital tube module 74hc595.
Короче, у кого нибуть есть живые примеры или хоть что-то из чего можно взять полезную инормацию, кроме книг, конечно, на 800 страниц.
... но, к сожалению, не русском языке нельзя программировать ардуину
Отнюдь.
Программировать можно (и нужно!) именно на русском языке. А потом просто переводить алгоритм на Си для заливки в Ардуину.
И насчет того, что наличие двух детей что-то там исключает - это совершенно не так. Например, электронику я изучал исключительно методом самообразования, дома, и как раз при наличии двух малолетних детей. И это не помешало мне собрать немало конструкций, среди которых, например, электромузыкальный инструмент на полусотне микросхем, на котором потом старший ребенок, когда подрос, закончил первый класс музыкальной школы.
Короче, у кого нибуть есть живые примеры или хоть что-то из чего можно взять полезную инормацию, кроме книг, конечно, на 800 страниц.
Тут можно только повторить истину про "отсутствие царского пути".
PS. Вообще-то при желании можно было, даже не читая книгу целиком, найти там подходящие примеры. Разумеется, если есть желание.
когда-нибудь обязательно займусь изучением...
На данный момент идет сессия - не до этого.