Привет, помогите разобраться, при попытке вывода часов на олед дисплей в меню всё зависает, комментирую строку 31 всё работает. Спасибо.
C++:
#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();
}