Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить

простенькие часики на Ардуино

Пт ноя 20, 2020 06:52:17

Переделал свои часики, унесенные в своё время с завода Ресурс в Богородицке и верно отслужившие почти 30 лет.
Собрал простенькие часики на Ардуино, TM1637 и DS3231. Индикатор вот такой E40803-I4-PG2-0-W. Функционал минимальный.
Показывают время и раз в минуту - температуру. Есть будильник и автоматическая регулировка яркости. При попадании питания кажут время 1 сек раз в минуту.
Скетчик написан по прочтению разных форумов и пугает меня самого :shock:
Прошу помочь с оптимизацией кода и схемы.
Вложения
индикатор.lay6
(22.55 KiB) Скачиваний: 455
индикатор.dip
(117.72 KiB) Скачиваний: 406
test.rar
(488.69 KiB) Скачиваний: 446
Последний раз редактировалось chern55 Пт ноя 20, 2020 17:13:10, всего редактировалось 1 раз.

Re: простенькие часики на Ардуино

Пт ноя 20, 2020 12:10:40

TM1637 мне не очень понравилась... Там разве что индикатор крупногабаритный... или ёжли ее функционал по опросу клавиатуры задействовать...
С моего взгляду более эффективна MAX7219 ... но там дисплей поменьше, зато позиций поболее...
Хоша... то уже "у кого чего имеется".
:dont_know:
Относительно СКОТча... ежли работает как требуется - то и хорошо.
Каждый пишет как умеет и как ему удобнее.
8)
По функциональности... ежли ставить "мультифункционал" проблемы с индикацией статуса устройства (и соответственно клавиатуры) из-за ограниченных возможностей дисплея. Придется вводить данные "по кускам" занимая одну-две позиции под код/символ текущего статуса. Это также более "на усмотрение автора" - кому как хочется, так и делают.
Иногда добавляют индикаторов "рода работы", иногда знакомест на дисплее.
ЕЕПРОМ при использовании RTC, содержащей встроенные будильники явно... излишнее.
Другое дело, когда уставок больше чем 2 позиции. Тогда или ресурс DS1307(энергонезависимое ОЗУ) или ЕЕПРОМ МК (при DS3231 - у нее ОЗУ нету) задействовать можно.
Для DS18B20 уставка пользователя обычно записывается в самом DS18B20...
Ну а контроль питания можно проводить при помощи встроенного АЦП по заданному интервалу опросов.
:roll:

Re: простенькие часики на Ардуино

Пт ноя 20, 2020 12:52:21

Есть ещё куча драйверов для дисплея и разрядов поболее и количеством сегментов более 8.
Типа PT, ET, MC, TM1628,TM1638 коих полно на платах бытовой электроники.
Правда у многих трех-проводный интерфес, но и для MAX программу нужно доработать.
Да и практически все вышеназванные мс умеют и десяток кнопок сканировать.

Re: простенькие часики на Ардуино

Пт ноя 20, 2020 13:28:55

Только вот провести макетную проверку и корректировку программы по ним сможет лишь тот, у кого они в наличии имеются.
Да и документация под те микросхемы... мягко говоря .... "не очень"...
:(
Насчет программ... Это вполне по силам самому написать.
(за редким исключением нескольких библиотек протоколов реального времени)...
:roll:
Моё "домашнее КРУ"(ЖОНА) за часейки со светодиодным табло и "на шнурке" может мал прогневаться...
За излишний перерасход энергии и ...т.д....
8)

Теперь несколько замечаний по поводу "причесать" исходник...
Собственно данный вопрос я скорее как пример в свою https://radiokot.ru/forum/viewtopic.php?f=62&t=156720
перетащу... Поскольку данный вопрос затрагивает и аспекты написания многофайловиков в среде ардуиноIDE.
Пока добавлю ранее уже упоминавшееся...
В тексте исходника имееются ссылки на "сторонние библиотеки".
У Вас оные когда-то скачаны и размещены как минимум в каталоге
Код:
C:\Documents and Settings\User\Мои документы\Arduino\libraries

однако для корректной обработки исходника на другом ПК (у тех, кто пожелает с разборкой заняться) необходимо также наличие данных библиотек той же, что и на Вашем ПК версии. Конечно можно и по ссылке в инете порыться... Но иной раз просто ВЛОМ, а иной раз "не та версия броузера" или "ОС не той системы" у пользователя установлена. Вобщемс... я обычно "нештатные" библиотеки таки отдельной папкой в проект укладываю... А пользователь уже смотрит что использовать - свои установленные, или дополнительные к себе закинуть.
Ну и ессно версию установленной IDE также указывать необходимо (а иногда и версию "платформы")...
:beer:

Re: простенькие часики на Ардуино

Сб ноя 21, 2020 14:19:31

https://users.livejournal.com/klu-/58342.html

Re: простенькие часики на Ардуино

Сб ноя 21, 2020 19:01:16

Так ведь вопрос - то в ОБСУЖДЕНИИ возможных вариантов, а не в приказно-повелительном "делать только вот так".
8)
Рекомендации без проверки на действующем макете - штука неблагодарная. Посему или у кого уже готовые наработки будут выложены для обмена или "под заказ и быстро".
Готовое - вряд-ли подойдет Вам (не те индикаторы, не та элементная база) да и средства разработки могут отличаться.
Вопрос о версии ардуино IDE не случайное пожелание - в разных версиях несколько отличаются и компиляторы и варианты версии "платформ" (сделанное под "старшими" версиями не во всех случаях скомпилируется под "младшими").
У меня на разных машинах - и то разные - для ХР SP3(х32) 1.8.9, а для 10ки 1.8.13 (ее на ХР уже не установить).
Варианты коррекции схемы... - у каждого свой "набор предпочтений" не всегда совместимый с возможностями задающего вопросы. Касательно "свертки кода" - для того надо полноценно с Си/С++ познакомиться да перейти к самостоятельному изготовлению многофайловых проектов (еще и "особенности" самой IDE учитывать). К сожалению заинтересованных в разборе кода для ардуиноIDE среди матерых КОТОВ не так уж и много - скорее предложат на "чистый Си" или на АРМ перейти.
:beer:

Re: простенькие часики на Ардуино

Сб ноя 21, 2020 20:50:58

скорее предложат на "чистый Си" или на АРМ перейти

вот с этим полностью согласен.

хотелось бы уточнить метод округления температуры до целого числа перед выводом на дисплей
Код:
sensor.requestTemp();                            // Запрашиваем преобразование температуры
      delay(100);                                              // Ожидаем окончания преобразования
      temp = sensor.getTemp();
      disp.clear();
      disp.display(0, temp / 10);
      disp.display(1, temp % 10);


или тут http://arduino.ru/ спросить?

Re: простенькие часики на Ардуино

Сб ноя 21, 2020 21:20:17

Метод округления зависит от автора программы - как кому удобно, так и делается.
Относительно "округления перед выводом" встроенного в библиотеку драйвера дисплея - смотрим состав/описание функций соответствующей библиотеки.
Касательно правил работы с DS18B20...
Вначале обрабатывается полный комплект данных (зависит от установленной для датчика разрядности), а затем уже округляем до нужного значения, приводим к надлежащей форме (двоичное -> двоично-десятичное -> позиционный сегментный код) и скармливаем микросхеме драйвера.
Первичная обработка ВСЕХ данных (целой и дробной частей) необходима для корректной работы с минусовыми температурами.
Там сначала перевод в положительное число, а уж затем обработка значения.
Я пользовался только минимальным набором "сторонних" библиотек - Adafruit_NeoPixel и OneWire - остальное дописывал самостоятельно - так что не факт, что мой вариант Вам подойдет.
Вот к примеру показометр, одна из функций которого работа с тем же DS18B20:
mdht_22m.zip
(171.38 KiB) Скачиваний: 341

Как я понимаю подход совсем иной...
:tea:
Посему... возможно у меня в КОТУИНКО будет чего-то подобного еще разбираться (аналогия часов на основе К145ИК1901 с применением RTC и прочих "модификаций" на основе ардуино)... Но там пока ничего особо нового не придумывается...
:dont_know:
Видно осенне-зимний творческий отпад...
:beer:

Re: простенькие часики на Ардуино

Вс ноя 22, 2020 08:11:34

хотелось бы уточнить метод округления температуры до целого числа перед выводом на дисплей

Вы вдумайтесь в то что пишете. Метод округления до целого числа... Ужос!

Re: простенькие часики на Ардуино

Вс ноя 22, 2020 09:58:59

Скорее там интерес как с битами дробной части обращаться - у них же несколько "непривычный" весовой коэффициент.
Да работа с отрицательным значением порой является источником для "тараканов".
8)

Re: простенькие часики на Ардуино

Вс ноя 22, 2020 19:06:42

Я прибавил бы 0,5 и отбросил дробную часть.
Не знаю точно, как в С ( наверное тоже просто) а в асме- как два пальца.

Re: простенькие часики на Ардуино

Вс ноя 22, 2020 19:13:15

В случае с ассемблером обработка (на уровне команд) заметно отличается от того, что в Си делается.
Тут еще и особенности функций используемой в проекте библиотеки.
8)

Re: простенькие часики на Ардуино

Вс ноя 22, 2020 19:14:53

Блин, совсем не секу в С :(

Re: простенькие часики на Ардуино

Вс ноя 22, 2020 19:28:11

Я его (Си/С++) пока только на начальной стадии изучаю.
Правда в приложении к ардуино IDE.
И при открытом обсуждении учебных проектов.
8)

Re: простенькие часики на Ардуино

Вс ноя 22, 2020 19:49:16

При чём здесь Си не Си. Ты в логике распиши сначала. Язык это уже до жопы.

Добавлено after 13 minutes 37 seconds:
BOB51, извини что так обращаюсь.( Это больше к другим относится.

Re: простенькие часики на Ардуино

Вс ноя 22, 2020 22:08:23

OKF, ко мне что ли? Так я и распиСал. Всё предельно просто.

Re: простенькие часики на Ардуино

Пн ноя 23, 2020 10:49:51

Весовой коэффициент для байта целого числа:
d7:d6:d5:d4:d3:d2:d1:d0
d0=1 (2 в степени 0)
d1=2 (2 в степени 1)
d2=4 (2 в степени 2)
d3=8 (2 в степени 3)
d4=16 (2 в степени 4)
d5=32 (2 в степени 5)
d6=64 (2 в степени 6)
d7=128 (2 в степени 7)
а вот для дробной части... чуток "с извратом"....
вот тот "хвостик дробный" у данных DSки:
d3:d2:d1:d0
d0=0,0625 (2 в степени -4)
d1=0,125 (2 в степени -3)
d2=0,25 (2 в степени -2)
d3=0,5 (2 в степени -1)
поскольку в ассемблере привычно работать с целыми для обработки дробной части предварительно меняем весовые коэффициенты
d0=625 (2 в степени -4)
d1=1250 (2 в степени -3)
d2=2500 (2 в степени -2)
d3=5000 (2 в степени -1)
а уже полученный результат превращаем в соответствующий (сегментный) код для индикации после запятой.
Только вот для отрицательных значений необходимо В ОБЯЗАТЕЛЬНОМ ПОРЯДКЕ предварительно для всего полученного после замера значения данных выполнить "дополнение до 2х" получив в результате положительное число. А уж затем - округлять или отбрасывать дробную часть.
8)

Re: простенькие часики на Ардуино

Пн ноя 23, 2020 19:07:00

Код:
 sensor.requestTemp();                            // Запрашиваем преобразование температуры
      delay(100);                                      // Ожидаем окончания преобразования
      float temp;                                      // температура будет с десятыми градуса
      temp = sensor.getTemp();                         // получаем температуру
      disp.clear();                                    // очищаем дисплей
      int t;                                           // задаём временную переменную
      t = round(temp);                                 // t станет целым
      disp.display(0, t / 10);                         // выводм десятки градусов
      disp.display(1, t % 10);                         // выводм единицы градусов
      disp.displayByte(2, _degree);                    // выводим знак градуса
      disp.displayByte(3, _C);                         // выводим знак Цельсия

:)))
а отрицательной температуры у меня дома, к счастью, не бывает. Проект — не метеостанция. название темы — простенькие часики на Ардуино
Вложения
test.txt
(11.78 KiB) Скачиваний: 263

Re: простенькие часики на Ардуино

Чт апр 29, 2021 22:30:12

обновил скетчик. добавилась небольшая анимация.
Вложения
test.rar
(48.17 KiB) Скачиваний: 243

Re: простенькие часики на Ардуино

Пн апр 11, 2022 21:53:00

замутил на MAX7219 и индикаторах E11501-G-PG2-0-W http://modul-x.ru/displei-svetodiodnye/ ... g2-0-w.htm
Вложения
nev.rar
(45.08 KiB) Скачиваний: 147
Ответить