Официальный сайт компании Arduino по адресу arduino.cc
Часы на ssd1306 (много)
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пнд, 09/08/2021 - 21:01
По запросу из темы
http://arduino.ru/forum/proekty/imitatsiya-razlichnykh-shkal-na-displee-...
и от нечего делать (бейджик к Ардуино не цепляется :-( , сделал макет часов - каких точно ни у кого нет :-)
///////////// ЧАСЫ НА 2 ДИСПЛЕЯХ ИЗ 3 (можно добавить секунды ещё) #include <OLED_I2C.h> OLED myOLED(SDA, SCL); #define disp_1 12 // управляющие дисплееями выводы #define disp_2 11 #define disp_3 10 ///////////// #include <SPI.h> #include <iarduino_RTC.h> iarduino_RTC time(RTC_DS3231); //SDA - A4 //SCL - A5 //ПОДКЛЮЧЕНИЕ ВЫВОДОВ МОДУЛЯ ВРЕМЕНИ ///////////////// int t = 100; // пауза между считыванием данных по времени с модуля extern uint8_t BigZif_0_9[];//внебиблиотечные цифры - самопальный шрифт, добавленный в библиотеку экранчика void setup() { delay(50); ////// подключение всех дисплеев pinMode(disp_1, OUTPUT); digitalWrite(disp_1, HIGH); myOLED.begin(); digitalWrite(disp_1, LOW); delay(50); ////// pinMode(disp_2, OUTPUT); digitalWrite(disp_2, HIGH); myOLED.begin(); digitalWrite(disp_2, LOW); delay(50); //////// pinMode(disp_3, OUTPUT); digitalWrite(disp_3, HIGH); myOLED.begin(); digitalWrite(disp_3, LOW); delay(50); //////// myOLED.setFont(BigZif_0_9);//внебиблиотечные цифры - самопальный шрифт myOLED.invert(0);//инверсия цвета ///////////// time.begin(); ////////начальная установка часов//////// //time.settime(0,58,18,20,8,19,2); // 0 сек, 58 мин, 18 час, 20, АВГУСТА, 2019 года, ВТОРНИК (раскомментить, выставить желаемое, загрузить скетч, закомментить,загрузить скетч) } void loop() { //////////////////// String cmd1 = time.gettime("H"); int K = cmd1.substring(0, 1).toInt(); myOLED. printNumI(K, 0, 0); //десятки часов K = cmd1.substring(1).toInt(); myOLED.printNumI( K, 63, 0); //единицы часов myOLED.drawLine(127, 0, 127, 63);//разделительная линия dis_3(); //// cmd1 = time.gettime("i"); K = cmd1.substring(0, 1).toInt(); myOLED. printNumI(K, 0, 0); //десятки минут K = cmd1.substring(1).toInt(); myOLED.printNumI( K, 63, 0); //единицы минут myOLED.drawLine(0, 0, 0, 63); dis_2(); /////////////////// delay(t); } //////////////////////////// //////////////////////////// /////////////////////////// void dis_1() { //функции обновления изображений на экранах digitalWrite(disp_1, HIGH); myOLED.update(); digitalWrite(disp_1, LOW); myOLED.clrScr(); // очищаем дисплей } void dis_2() { digitalWrite(disp_2, HIGH); myOLED.update(); digitalWrite(disp_2, LOW); myOLED.clrScr(); // очищаем дисплей } void dis_3() { digitalWrite(disp_3, HIGH); myOLED.update(); digitalWrite(disp_3, LOW); myOLED.clrScr(); // очищаем дисплей } /////////////////////////
Картина маслом.
Запрос из 329 поста (забыл указать).
Забыл файл добавленных цифр.(файл DefaultFonts.c заменить на этот).
Красивое решение!
Интересно, а с ILI9341 по SPI можно такое сотворить?
Сотворить можно все, что угодно. Более того, в случае цветного дисплея это сделать намного проще.
Вот вариант корпуса под готовую поделку - бомба.
Токи потребления не смотрел?
Смотрел, около 26-28 мА :-)
Часы могут иметь несколько тем для отображения данных. Потом "темные скетчи" можно сложить в один.
По модулю (по ходу) ds3231 возник вопрос - различает ли он самостоятельно дни в месяце, где 28,29,30,31 или в каждом шпарит по 31?
В некоторых Dallas-ах ещё был автопереход на летнее/зимнее время.
Просто смутило, что в начальных настройках весь набор вводится. А если ввести с ошибкой данные они не пройдут, пройдут, но результаты будут с ошибкой?
А проверить? Насколько помню, введётся с ошибкой, но по ходу исправится на корректное значение.
Я именно о DS, а не о библиотеке.
Понял. Но библиотека любая, по идее, просто выводит в переменных что ей дают, без программной обработки?
Добавил третью тему отображения данных из часов реального времени. А вот интересно функцию ниже можно использовать в loop?
time.settime(0,58,18,20,8,19,2);
// 0 сек, 58 мин, 18 час, 20, АВГУСТА, 2019 года, ВТОРНИК
Почему ж нельзя? Она просто пишет в регистры новые значения. Ей без разницы - из лупа или из майна.
Циклы и массивы строк (DOW/Month) придадут коду стройности.
Ещё можно в пятницу 13-го выводить жуткий циферблат, а 1-го апреля время отображать по рандомайзу.
Добавил 4 тему и кнопку перебора тем, объединил в один скетч, почти 90 процентов памяти занял. Влезет ещё 1-2 темы :-)
Да, верно, наверное надо подумать об особой - праздничной теме, 1 апреля, день рождения владельцев или влюблённых день, или пятница 13.
В зависимости от выбранной темы потребляет конструкция 20-30мА. Можно и подумать о вариантах снижения потребления :-(
Периодическая сборка-разборка макета часов показала неожиданную досаду! Модуль часов реального времени, со вставленной литиевой батарейкой отстал от часов на ПК на 20 секунд за 40 суток! Как так?
То есть теперь надо как то изгаляться, писать 5 тему для возможности редактирования отображаемого времени - одной кнопкой. Больше кнопок добавлять не хочется и типов нажатий тоже. Как логику темы построить?
Может записать __TIME__? И сменить батарейку.
Я не нашёл подробное описание функции, только такой пример. Не совсем ясно, можно этот "тайм" вызывать при подключении к пк - по кнопке и переустанавливать время?
Делаю так.
какой функции не нашел, _TIME_ ? :)
Это не функция, это макрос, эта строчка при компиляции заменяется текущим временем компиляции.
Из этого следует (для любого программиста очевидно :). что никак этот _TIME_ вызывать нельзя :) Точнее, вставить-то в функцию его можно, только время в нем будет всегда одно и тоже - время компиляции
Человеку как раз и надо ОДНАЖДЫ установить время.)
Человеку как раз и надо ОДНАЖДЫ установить время.)
судя по его вопросу - совсем нет, он хочет вызывать по кнопке - а значит многократно
можно этот "тайм" вызывать при подключении к пк - по кнопке и переустанавливать время?
Иногда делал установку из терминала, типа: 2109261127.)
Как бы, можно написать программулину на ПК, которая бы слала системное время в ком-порт. Но её ведь ещё и запускать надо.
Понял ваши объяснения. Просто думал, функция библиотеки это - послал запрос: получил ответ:-)
Тогда, как вариант, но делать не буду :-) послал время со смартфона через блютуз. Так я уже делал, надо поискать и вспомнить, а вот с кнопкой одной ещё не пробовал.
Тогда, как вариант, но делать не буду :-) послал время со смартфона через блютуз.
тогда уж просто коррекцию времени по сети через есп8266 - не дороже БТ, но много функциональнее
Нее, из схемы выходить не хочу, одна кнопка и всё :-)
Была мысль по совету Григория из 14 поста - прикрутить пьезоизлучатель, чтоб в нужный день играть "хеппи бёздей туюю", но... нет.
Нее, из схемы выходить не хочу, одна кнопка и всё :-)
Так и одной кнопкой можно делать установку. Не очень удобно, но можно. Не так это часто требуется.
Вот я и спрашиваю как логику работы сделать?, имея возможность только нажатий (без коротких и длинных). С ходу в голове не придумывается сценарий.
Как это без "коротких и длинных"?
Вот так примерно.
А словами никак? ТЕМА, tschasi, PUSK... Ужос!
Длинное нажатие - следующая цифра, короткое - крутим по кругу. 2х2.
:-)
В этой кнопке всё просто: короткое нажатие - переход на следующую тему, долгое нажатие - переходы на следующие темы, нажатие просто - закольцованный переход между темами. Теперь в эту гармонию надо добавить 5-ю тему, а в неё надо вставить ещё одну гармонию, только перебирающую-выставляющую новое значение времени. Делов то :-), только как оптимально сделать?
Ну, между темами вы же как то переходите. А теперь нужно вставить в 5-й теме вход в настройки. Ну, а дальше я уже расписал.
С одной кнопкой, обычно определяются короткие, длинные и очень длинные нажатия. Как вариант. В некоторых случаях двойные нажатия, на любителя.
Доп значки на дисплей в каком режиме находишься.
Ну это уже user friendly интерфейс.)
Доп значки на дисплей в каком режиме находишься.
Да, весь трёхглазый дисплей думаю задействовать для отображения процесса в теме " №5 установка времени".
Пока выдумывается такой сценарий: при очередном нажатии кнопки переходим в тему 5 - экран соответственно рисуется, далее ожидание-таймер на 5-10 сек. Если нажимаем кнопку до срабатывания, то переходим вновь к теме №1, иначе запускается процедура установки нового значения времени... Дальше пока не придумал.
Вы это людЯм объясните. То бишь, вы должны думать со стороны конечного пользователя, что бы ИМ было удобно, в первую очередь.
Вы это людЯм объясните. То бишь, вы должны думать со стороны конечного пользователя, что бы ИМ было удобно, в первую очередь.
Это да, так как библиотека iarduino_RTC от царя-гороха чуток поправил, чтобы можно было добавлять через менеджер библиотек ZIP файлом. Здесь же и библиотеку OLED_I2C форкнул и чуток поправил, заменил файл шрифтов и в коде явные логические ошибки.
Теперь обе можно поставить через менеджер библиотек подключив скачанные ZIP файлы.
Но осталось еще очень много предупреждений, помогайте, что еще там надо поправить?
Теперь обе можно поставить через менеджер библиотек подключив скачанные ZIP файлы.
если библиотеки уже скачаны как ZIP - нафига еще менеджер? Кладешь в папку libraries и все
зачем нам это? Автор кода где? - пусть сам исправляет
lilik
Не думали заменить атмегу на esp8266? Тогда возможны 2 варианта по корректировке времени: либо периодический запрос NTP, либо простенькая веб-морда для настроек всего
Теперь обе можно поставить через менеджер библиотек подключив скачанные ZIP файлы.
если библиотеки уже скачаны как ZIP - нафига еще менеджер? Кладешь в папку libraries и все
зачем нам это? Автор кода где? - пусть сам исправляет
Троллишь?
Троллишь?
нет. Ни одну библиотеку в жизни не устанавливал через менеджер. Скачать Zip архивом проще
"Ты меня не тролль, ты меня не тролль..." Нештатные библиотеки размещаю в папке со скетчем. Особенно актуально для глупых юзеров.)
Троллишь?
нет. Ни одну библиотеку в жизни не устанавливал через менеджер. Скачать Zip архивом проще
только при установке через менеджер он сразу сообщит, что библиотека кривая, не соответствует стандарту и не установит, а так да, "можно сделать защиту от дурака но не от изобретательного"
менеджер сразу сообщит, что библиотека кривая, не соответствует стандарту и не установит
фигасе...
а нахера мне это надо, чтобы менеджер за меня решал, какие либы устанавливать, а какие нет?
и что такое "кривая либа" или "не соответвует стандарту"? - ни разу такого не видел
менеджер сразу сообщит, что библиотека кривая, не соответствует стандарту и не установит
фигасе...
а нахера мне это надо, чтобы менеджер за меня решал, какие либы устанавливать, а какие нет?
и что такое "кривая либа" или "не соответвует стандарту"? - ни разу такого не видел
видимо ПАТАМУШТА не писал библиотек, а вот DetSimen пришлось, я ему мозг немного повыносил и даже не налил, каюсь )))
видимо ПАТАМУШТА не писал библиотек, а вот DetSimen пришлось
Чесноговоря, мне абсолютно пох на то, встанет биб-ка в эту убогую IDE или нет, я ей не пользуюсь. Ты сам потом всякие keywords вставлял и прочую шнягу для "менеджера"
Чесноговоря, мне абсолютно пох на то, встанет биб-ка в эту убогую IDE или нет, я ей не пользуюсь. Ты сам потом всякие keywords вставлял и прочую шнягу для "менеджера"
думаю юзеры перебьются и без keywords... пусть сначала сами научаться писать либы. а потом претензии предъявляют :)
видимо ПАТАМУШТА не писал библиотек, а вот DetSimen пришлось
Чесноговоря, мне абсолютно пох на то, встанет биб-ка в эту убогую IDE или нет, я ей не пользуюсь. Ты сам потом всякие keywords вставлял и прочую шнягу для "менеджера"
было дело )))
PS а вот как собрать своё ядро на ГИТхабе по фэншую - не дошло, не в те папки IDE размещает