Не могу вставить вывод часов в меню
- Войдите на сайт для отправки комментариев
Сб, 29/01/2022 - 23:14
Привет, помогите разобраться, при попытке вывода часов на олед дисплей в меню всё зависает, комментирую строку 31 всё работает. Спасибо.
#define CLK A1 #define DT A2 #define SW A3 #include <GyverOLED.h> #include <Wire.h> #include <iarduino_RTC.h> #include <EEPROM.h> GyverOLED<SSD1306_128x32, OLED_BUFFER> oled(0x3C); #include "GyverEncoder.h" Encoder enc1(CLK, DT, SW, TYPE2); int v0 = 0; int v1 = 0; int v2 = 0; int v3 = 0; int8_t arrowPos = 0; iarduino_RTC watch(RTC_DS1307); void setup() { oled.init(); Serial.begin(9600); enc1.setTickMode(AUTO); } void loop() { v0 = EEPROM.read(0); v1 = EEPROM.read(1); v2 = EEPROM.read(2); v3 = EEPROM.read(3); oled.clear(); oled.setCursor (0, 0); //oled.print(watch.gettime("H:i:s")); oled.setCursor (10, 1); oled.print(v0); oled.setCursor (25, 1); oled.print(":"); oled.setCursor (40, 1); oled.print(v1); oled.setCursor (10, 2); oled.print(v2); oled.setCursor (25, 2); oled.print(":"); oled.setCursor (40, 2); oled.print(v3); if (enc1.isRight()) { arrowPos++; if (arrowPos >= 4) arrowPos = 0; } if (enc1.isLeft()) { arrowPos--; if (arrowPos < 0) arrowPos = 3; } if (enc1.isRightH()) { switch (arrowPos) { case 0: v0++; break; case 1: v1++; break; case 2: v2++; break; case 3: v3++; break; } } if (enc1.isLeftH()) { switch (arrowPos) { case 0: v0--; break; case 1: v1--; break; case 2: v2--; break; case 3: v3--; break; } } v0 = constrain(v0, 0, 23); v1 = constrain(v1, 0, 59); v2 = constrain(v2, 0, 23); v3 = constrain(v3, 0, 59); if (enc1.isTurn()) { printGUI(); EEPROM.put(0, v0); EEPROM.put(1, v1); EEPROM.put(2, v2); EEPROM.put(3, v3); } } void printGUI() { switch (arrowPos) { case 0: oled.circle(2, 10, 2); break; case 1: oled.circle(32, 10, 2); break; case 2: oled.circle(2, 20, 2); break; case 3: oled.circle(32, 20, 2); break; } oled.update(); }
Это на форум Гайвера, здесь его библиотеки никто исправлять не будет
Часы 1307 неправильно подключены или неисправны.
Проверено работают, комментирую строку 86 и 92, часы работают, меню нет.
или гайверовская либа Олед блочит шину I2C
В строчке 31 точно H;i;s а не Н;м;s ?
Точно
Чо гадать то? Попробуй другу либу для олед.
Ну да:
- что делать, если программа не работает?
- Переустанови Windows!
Существуют же более или менее стандартные как способы отладки, так и способы облегчить себе эту отладку.
Во-первых, никогда не следует писать так, как написано в строке 31 - передавать одной функции результат работы второй безо всякой проверки.
Во-вторых, в данном конкретном случае следует разделить строку 31 на две - с использованием временной переменной.
Ну и окружить эти две строки диагностической печатью:
- перед строкой 31а,
- между строками 31а и 31б распечатать значение переменной,
- после строки 31б.
так работать с библиотекой надо правильно!
ну чем я вывел не правильно? oled.print(watch.gettime("H:i:s"));
ну чем я вывел не правильно? oled.print(watch.gettime("H:i:s"));
а сам не видишь в чём разница?
а если мне нужны только часы, минуты и секунды, а дата не нужна? )
переделал на кнопки всё отлично работает, но очень нужно на энкодер
http://disk.yandex.ru/i/ijLVGHDl-YAR8w
ну значит я был не прав в прошлый раз, это не Гайвер-Олед гадит, а гайвер-энкодер...
Не суть важно что, главное - гайвер...
но очень нужно на энкодер
у гайвера есть и на часы библа, вместе то они должны работать)
у гайвера есть и на часы библа, вместе то они должны работать)
работать должны... но не работают.
у гайвера есть и на часы библа, вместе то они должны работать)
работать должны... но не работают.
так библа на часы не его, у него
microDS3231
его библа на часы и его же библа на энкодер имеют больше шансов заработать вместе чем две библиотеки от разных разработчиков.
у гайвера есть и на часы библа, вместе то они должны работать)
работать должны... но не работают.
так библа на часы не его, у него
microDS3231
его библа на часы и его же библа на энкодер имеют больше шансов заработать вместе чем две библиотеки от разных разработчиков.
DS1307
емнип там чем то не принципиальным отличается. по крайней мере у меня 3231 с библой для 1307 работало.
а если таки нет, лишний повод на нормальные часы перейти)
так библа на часы не его, у него
microDS3231
его библа на часы и его же библа на энкодер имеют больше шансов заработать вместе чем две библиотеки от разных разработчиков.
почему бы вам с этим вопросом не отправится на его форум?
так библа на часы не его, у него
microDS3231
его библа на часы и его же библа на энкодер имеют больше шансов заработать вместе чем две библиотеки от разных разработчиков.
почему бы вам с этим вопросом не отправится на его форум?
зачем?
А зачем нам копаться в этом?
А вот участники гайверофорума никуда не денутся
хз зачем.
я вот уверен не на сотку, конечно, но все же, что обе две его либы вместе заработают и копаться не придется.
хз зачем.
я вот уверен не на сотку, конечно, но все же, что обе две его либы вместе заработают и копаться не придется.
ну так делайте, зачем об этом на форум писать?
ну так делайте, зачем об этом на форум писать?
вы меня с тс походу перепутали
а не нужно писать типа там wath.begin();?
ну и если вдаваться в отладку, то есть ли зависание на вызове функции те заменить 31 строку на watch.gettime("H:i:s");
Да зависает, если в 31 строку ставлю watch.gettime("H:i:s");
а не нужно писать типа там wath.begin();?
ну и если вдаваться в отладку, то есть ли зависание на вызове функции те заменить 31 строку на watch.gettime("H:i:s");
Следовательно проблемма не в либе гайвера.
Подключена правильная либа?
Может быть поможет установка времени в setup:
Но так же есть вариант, что функция не "зависает", а исправно выполняет свою работу, то есть постоянно в конекте с модулем. В таком случае предлагаю, установить
Проверял часы работают, комментирую строку 86 и 92, часы работают, меню нет.
Следовательно проблемма не в либе гайвера.
Подключена правильная либа?
Может быть поможет установка времени в setup:
Но так же есть вариант, что функция не "зависает", а исправно выполняет свою работу, то есть постоянно в конекте с модулем. В таком случае предлагаю, установить
На гитхабе нашёл такой вариант
вот так как то вроде работает, часы правда 3231 других нет.
Спасибо тебе добрый человек, я знал, что здесь есть профи, а не только те, кто ругает чужие библы)
вот так как то вроде работает, часы правда 3231 других нет.
Fenicksnet. так в чем дело оказалось?
Спасибо тебе добрый человек, я знал, что здесь есть профи, а не только те, кто ругает чужие библы)
Пожалуйста. Я не профи ( чисто из спортивного интереса в целях самообразования) ,а если я им и стану, то же буду как они (ругать чужие библы и все в этом духе)...
По поводу Гайвера скажу только то , что его библиотеки более простые, есть внятное/понятное русское описание. Есть косяки по несовместимости даже его библиотек.
Fenicksnet. так в чем дело оказалось?
точно не знаю. есть только предположения.
1. по энкодеру, не была объявлена функция обработки enc1.tick(); // строка. 47
2. oled.update(); обновление дисплея, было только при повороте энкодера. если я правильно понял в буфер собиралось, но никуда не выводилось.
да оно и сейчас через пень работает. имхо
строка 20, там объявлена функция обработки энкодера
Спасибо тебе добрый человек, я знал, что здесь есть профи, а не только те, кто ругает чужие библы)
Пожалуйста. Я не профи ( чисто из спортивного интереса в целях самообразования) ,а если я им и стану, то же буду как они (ругать чужие библы и все в этом духе)...
По поводу Гайвера скажу только то , что его библиотеки более простые, есть внятное/понятное русское описание. Есть косяки по несовместимости даже его библиотек.
Fenicksnet. так в чем дело оказалось?
точно не знаю. есть только предположения.
1. по энкодеру, не была объявлена функция обработки enc1.tick(); // строка. 47
2. oled.update(); обновление дисплея, было только при повороте энкодера. если я правильно понял в буфер собиралось, но никуда не выводилось.
да оно и сейчас через пень работает. имхо
строка 20, там объявлена функция обработки энкодера
все, нашел не надо.
чет я не понимаю, пытаюсь добавить отключение дисплея , отключается , но почему то при любом Disp_off он отключается через 10 cекунд.
Закоментить 30-ю строчку.
Закоментить 30-ю строчку.
вот я ....., точно, только не закоментить, а вот так наверное записать
Disp_off =
Disp_off
* 1000;Спасибо.