Переделал свои часики, унесенные в своё время с завода Ресурс в Богородицке и верно отслужившие почти 30 лет. Собрал простенькие часики на Ардуино, TM1637 и DS3231. Индикатор вот такой E40803-I4-PG2-0-W. Функционал минимальный. Показывают время и раз в минуту - температуру. Есть будильник и автоматическая регулировка яркости. При попадании питания кажут время 1 сек раз в минуту. Скетчик написан по прочтению разных форумов и пугает меня самого Прошу помочь с оптимизацией кода и схемы.
TM1637 мне не очень понравилась... Там разве что индикатор крупногабаритный... или ёжли ее функционал по опросу клавиатуры задействовать... С моего взгляду более эффективна MAX7219 ... но там дисплей поменьше, зато позиций поболее... Хоша... то уже "у кого чего имеется".
Относительно СКОТча... ежли работает как требуется - то и хорошо. Каждый пишет как умеет и как ему удобнее.
По функциональности... ежли ставить "мультифункционал" проблемы с индикацией статуса устройства (и соответственно клавиатуры) из-за ограниченных возможностей дисплея. Придется вводить данные "по кускам" занимая одну-две позиции под код/символ текущего статуса. Это также более "на усмотрение автора" - кому как хочется, так и делают. Иногда добавляют индикаторов "рода работы", иногда знакомест на дисплее. ЕЕПРОМ при использовании RTC, содержащей встроенные будильники явно... излишнее. Другое дело, когда уставок больше чем 2 позиции. Тогда или ресурс DS1307(энергонезависимое ОЗУ) или ЕЕПРОМ МК (при DS3231 - у нее ОЗУ нету) задействовать можно. Для DS18B20 уставка пользователя обычно записывается в самом DS18B20... Ну а контроль питания можно проводить при помощи встроенного АЦП по заданному интервалу опросов.
Есть ещё куча драйверов для дисплея и разрядов поболее и количеством сегментов более 8. Типа PT, ET, MC, TM1628,TM1638 коих полно на платах бытовой электроники. Правда у многих трех-проводный интерфес, но и для MAX программу нужно доработать. Да и практически все вышеназванные мс умеют и десяток кнопок сканировать.
Только вот провести макетную проверку и корректировку программы по ним сможет лишь тот, у кого они в наличии имеются. Да и документация под те микросхемы... мягко говоря .... "не очень"...
Насчет программ... Это вполне по силам самому написать. (за редким исключением нескольких библиотек протоколов реального времени)...
Моё "домашнее КРУ"(ЖОНА) за часейки со светодиодным табло и "на шнурке" может мал прогневаться... За излишний перерасход энергии и ...т.д....
Теперь несколько замечаний по поводу "причесать" исходник... Собственно данный вопрос я скорее как пример в свою https://radiokot.ru/forum/viewtopic.php?f=62&t=156720 перетащу... Поскольку данный вопрос затрагивает и аспекты написания многофайловиков в среде ардуиноIDE. Пока добавлю ранее уже упоминавшееся... В тексте исходника имееются ссылки на "сторонние библиотеки". У Вас оные когда-то скачаны и размещены как минимум в каталоге
Код:
C:\Documents and Settings\User\Мои документы\Arduino\libraries
однако для корректной обработки исходника на другом ПК (у тех, кто пожелает с разборкой заняться) необходимо также наличие данных библиотек той же, что и на Вашем ПК версии. Конечно можно и по ссылке в инете порыться... Но иной раз просто ВЛОМ, а иной раз "не та версия броузера" или "ОС не той системы" у пользователя установлена. Вобщемс... я обычно "нештатные" библиотеки таки отдельной папкой в проект укладываю... А пользователь уже смотрит что использовать - свои установленные, или дополнительные к себе закинуть. Ну и ессно версию установленной IDE также указывать необходимо (а иногда и версию "платформы")...
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Так ведь вопрос - то в ОБСУЖДЕНИИ возможных вариантов, а не в приказно-повелительном "делать только вот так".
Рекомендации без проверки на действующем макете - штука неблагодарная. Посему или у кого уже готовые наработки будут выложены для обмена или "под заказ и быстро". Готовое - вряд-ли подойдет Вам (не те индикаторы, не та элементная база) да и средства разработки могут отличаться. Вопрос о версии ардуино IDE не случайное пожелание - в разных версиях несколько отличаются и компиляторы и варианты версии "платформ" (сделанное под "старшими" версиями не во всех случаях скомпилируется под "младшими"). У меня на разных машинах - и то разные - для ХР SP3(х32) 1.8.9, а для 10ки 1.8.13 (ее на ХР уже не установить). Варианты коррекции схемы... - у каждого свой "набор предпочтений" не всегда совместимый с возможностями задающего вопросы. Касательно "свертки кода" - для того надо полноценно с Си/С++ познакомиться да перейти к самостоятельному изготовлению многофайловых проектов (еще и "особенности" самой IDE учитывать). К сожалению заинтересованных в разборе кода для ардуиноIDE среди матерых КОТОВ не так уж и много - скорее предложат на "чистый Си" или на АРМ перейти.
Метод округления зависит от автора программы - как кому удобно, так и делается. Относительно "округления перед выводом" встроенного в библиотеку драйвера дисплея - смотрим состав/описание функций соответствующей библиотеки. Касательно правил работы с DS18B20... Вначале обрабатывается полный комплект данных (зависит от установленной для датчика разрядности), а затем уже округляем до нужного значения, приводим к надлежащей форме (двоичное -> двоично-десятичное -> позиционный сегментный код) и скармливаем микросхеме драйвера. Первичная обработка ВСЕХ данных (целой и дробной частей) необходима для корректной работы с минусовыми температурами. Там сначала перевод в положительное число, а уж затем обработка значения. Я пользовался только минимальным набором "сторонних" библиотек - Adafruit_NeoPixel и OneWire - остальное дописывал самостоятельно - так что не факт, что мой вариант Вам подойдет. Вот к примеру показометр, одна из функций которого работа с тем же DS18B20:
Посему... возможно у меня в КОТУИНКО будет чего-то подобного еще разбираться (аналогия часов на основе К145ИК1901 с применением RTC и прочих "модификаций" на основе ардуино)... Но там пока ничего особо нового не придумывается...
Скорее там интерес как с битами дробной части обращаться - у них же несколько "непривычный" весовой коэффициент. Да работа с отрицательным значением порой является источником для "тараканов".
В случае с ассемблером обработка (на уровне команд) заметно отличается от того, что в Си делается. Тут еще и особенности функций используемой в проекте библиотеки.
Весовой коэффициент для байта целого числа: 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х" получив в результате положительное число. А уж затем - округлять или отбрасывать дробную часть.
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); // выводим знак Цельсия
а отрицательной температуры у меня дома, к счастью, не бывает. Проект — не метеостанция. название темы — простенькие часики на Ардуино
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения