Arduino+DS1302+OLED I2C 128x64
- Войдите на сайт для отправки комментариев
Вс, 13/03/2016 - 20:41
Доброго времени суток.
В наличии Arduino Nano, DS1302 и OLED I2C 128x64.
Собрал, всё работает, но есть проблемы с выводом минут и секунд. Когда значение меньше 10, т.е. одна цифра, перед ней отсутствует "0". В связи с этим "часики" смотрятся негармонично.
Гугл читал, ничего не нашёл. Прошу совета, по правке программного кода.
Скрины и код прилагаю.
#include <OLED_I2C.h> OLED myOLED(SDA, SCL, 8); #include <DS1302.h> DS1302 rtc(5, 6, 7); // Инициализация библиотеки с указанием пинов 5-rst, 6-dat, 7-clk. extern uint8_t TinyFont[]; extern uint8_t SmallFont[]; extern uint8_t BigNumbers[]; extern uint8_t MediumNumbers[]; extern uint8_t MegaNumbers[]; Time t; // Инициализация структуры void setup() { myOLED.begin(); rtc.halt(false); // Установка режимов rtc.writeProtect(false); // работы часов // Следующих три строки нужно закомментировать после // установки времени и загрузить скетч в плату повторно rtc.setDOW(MONDAY); // Установка дня недели rtc.setTime(12, 59, 58); // Установка времени 12:59:58 rtc.setDate(12, 03, 2016); // Установка даты 12 марта 2016 } void loop() { t = rtc.getTime(); // Получение времени и его запись в структуру t myOLED.setFont(BigNumbers); // Установка набора символов myOLED.clrScr(); // Очистка экрана myOLED.printNumI(int(t.hour), 7, 0); // Вывод часов myOLED.print("-", 35, 0); myOLED.printNumI(int(t.min), 49, 0); // Вывод минут myOLED.print("-", 78, 0); myOLED.printNumI(int(t.sec), 92, 0); // Вывод секунд myOLED.setFont(SmallFont); // Установка набора символов myOLED.print(rtc.getDOWStr(), CENTER, 25); // Вывод дня недели myOLED.setFont(MediumNumbers); myOLED.print(rtc.getDateStr(), CENTER, 33); // Вывод даты myOLED.setFont(TinyFont); // Установка набора символов myOLED.print("Mini Text", CENTER, 52); myOLED.update(); // Вывод вместимого буфера на дисплей delay (930); // Задержка 930 мс }
Ну наверное проще всего что-то вроде этого:
Можно посмотреть в сторону substring("0"+t.min)...
Ну а правильное решение - почитать документацию к OLED_I2C, функция printNumI параметр filler
крик отчаяния: блиииииин! ну когда уже моя УНО приедет чтобы тоже мог что нить выводить.... :((((
У меня написано так:
Повторяю БОЛЬШИМ ПЛАКАТОМ:
Ну а правильное решение - почитать документацию к OLED_I2C, функция printNumI параметр filler.
RTFM!
Противная проблемка. Коректное решение действительно форматированый вывод. Но можно проще. Прибавляете к секундам 100, и выводите на позицию в строку, где должен быть "-", после вывода - заменяете эту лишнюю "1" на "-". Такой вот легкий хак))). Минуты также.
Противная проблемка. Коректное решение действительно форматированый вывод. Но можно проще. Прибавляете к секундам 100, и выводите на позицию в строку, где должен быть "-", после вывода - заменяете эту лишнюю "1" на "-". Такой вот легкий хак))). Минуты также.
В данном случае никакой проблемы нет - всё уже написано в библиотеке. Просто нужно понять, что программирование это постоянная учеба и чтение доков.
А Вы сами в эти библиотеки заглядывали?! Или свято верите что их надо учить как святое письмо? Конкретно в этот выпердок кривомозгого дигинерата OLED_I2C? Качество библиотек ардуиновских удручающее. Ладно, заглянем на эту функцию, хотя мне до сих пор эта либка памятна своим незабвенным uint8_t scrbuf[1024]; для процессора с 2КБ памяти, также впечетлен передачей всего scrbuf для перересовки одного пикселя. И это по I2C!!!
Помоему достаточно.
А в принципе, что касается библиотек gcc, Вы правы, их надо знать. А вот на то что не входит в состав gcc, нужно смотреть очень аккуратно, на сторонние либы к устройствам вообще расчитывать не стоит, из нескольких десятков попавших мнетолько одну вспомню с уважением, на гироскоп 6050. Остальное дерьмо. А голова - не мусорный бак, чтоб в неё такое класть.
А Вы сами в эти библиотеки заглядывали?! Или свято верите что их надо учить как святое письмо?
Ваш подход прекрасен! Отвечая на Ваш вопрос: Я свято верю что перед заданием вопроса надо попытаться самому на него ответить. И прежде всего, хотя бы, почитать доки на используемые функции. Что и пытался донести до ТС.
(Остальное потер, потому как не место тут препираться об уровне библов вообщем и этой конкретной. Да и согласен я с Вами :) )
myxaz попробуйте так
myxaz попробуйте так
Не выходит.
Выдаёт следующее - invalid conversion from 'const char*' to 'char' [-fpermissive]
"if then " - зароботало, большое спасибо!