Не могу вставить вывод часов в меню

dmitrypp
Offline
Зарегистрирован: 29.01.2022

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

 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Это на форум Гайвера, здесь его библиотеки никто исправлять не будет

sadman41
Offline
Зарегистрирован: 19.10.2016

Часы 1307 неправильно подключены или неисправны.

dmitrypp
Offline
Зарегистрирован: 29.01.2022

Проверено работают, комментирую строку 86 и 92, часы работают, меню нет.

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:
Часы 1307 неправильно подключены или неисправны.

или гайверовская либа Олед блочит шину I2C

Fenicksnet
Offline
Зарегистрирован: 25.03.2019

В строчке 31 точно H;i;s а не Н;м;s ?

dmitrypp
Offline
Зарегистрирован: 29.01.2022

Точно

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Чо гадать то? Попробуй другу либу для олед.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну да:

- что делать, если программа не работает?

- Переустанови Windows!

 

Существуют же более или менее стандартные как способы отладки, так и способы облегчить себе эту отладку.

Во-первых, никогда не следует писать так, как написано в строке 31 - передавать одной функции результат работы второй безо всякой проверки.

Во-вторых, в данном конкретном случае следует разделить строку 31 на две - с использованием временной переменной.

Ну и окружить эти две строки диагностической печатью:

- перед строкой 31а,

- между строками 31а и 31б распечатать значение переменной,

- после строки 31б.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

так работать с библиотекой надо правильно!
 

      Serial.println(watch.gettime("d-m-Y, H:i:s, D"));     // Выводим время.

 

dmitrypp
Offline
Зарегистрирован: 29.01.2022

ну чем я вывел не правильно? oled.print(watch.gettime("H:i:s"));

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

dmitrypp пишет:

ну чем я вывел не правильно? oled.print(watch.gettime("H:i:s"));

а сам не видишь в чём разница?

dmitrypp
Offline
Зарегистрирован: 29.01.2022

а если мне нужны только часы, минуты и секунды, а дата не нужна? )

dmitrypp
Offline
Зарегистрирован: 29.01.2022

переделал на кнопки всё отлично работает, но очень нужно на энкодер

http://disk.yandex.ru/i/ijLVGHDl-YAR8w

//#define CLK A1
//#define DT A2
//#define SW A3
#define BTN_PIN5 5
#define BTN_PIN6 6
#include <GyverOLED.h>
#include <Wire.h>
#include <iarduino_RTC.h>
#include <EEPROM.h>
GyverOLED<SSD1306_128x32, OLED_BUFFER> oled(0x3C);
//#include "GyverEncoder.h"
#include "GyverButton.h"
GButton butt5(BTN_PIN5);
GButton butt6(BTN_PIN6);
//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() {
  watch.begin(); 
  oled.init();
  Serial.begin(9600);
  //enc1.setTickMode(AUTO);
  v0 = EEPROM.read(0);
  v1 = EEPROM.read(1);
  v2 = EEPROM.read(2);
  v3 = EEPROM.read(3);
}

void loop() {
  butt5.tick();
  butt6.tick();

  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);
  //oled.update();
  if (butt5.isClick()) {
    arrowPos++;
    if (arrowPos >= 4) arrowPos = 0;
    
  }
  if (butt6.isClick()) {
    arrowPos--;
    if (arrowPos < 0) arrowPos = 3;  

  }
 
  if (butt5.isHold()) {
    switch (arrowPos) {
      case 0: v0++;
        break;
      case 1: v1++;
        break;
      case 2: v2++;
        break;
      case 3: v3++;
        break;
    }
  }
  if (butt6.isHold()) {
    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);
  printGUI();

 if ((butt5.isHold())||(butt6.isHold()))
{
    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();
}

 

b707
Offline
Зарегистрирован: 26.05.2017

ну значит я был не прав в прошлый раз, это не Гайвер-Олед гадит, а гайвер-энкодер...

Не суть важно что, главное - гайвер...

vanila
Offline
Зарегистрирован: 25.08.2015

dmitrypp пишет:

но очень нужно на энкодер

у гайвера есть и на часы библа, вместе то они должны работать)

b707
Offline
Зарегистрирован: 26.05.2017

vanila пишет:

у гайвера есть и на часы библа, вместе то они должны работать)

работать должны... но не работают.

vanila
Offline
Зарегистрирован: 25.08.2015

b707 пишет:

vanila пишет:

у гайвера есть и на часы библа, вместе то они должны работать)

работать должны... но не работают.

так библа на часы не его, у него 

microDS3231

его библа на часы и его же библа на энкодер имеют больше шансов заработать вместе чем две библиотеки от разных разработчиков. 

dmitrypp
Offline
Зарегистрирован: 29.01.2022

vanila пишет:

b707 пишет:

vanila пишет:

у гайвера есть и на часы библа, вместе то они должны работать)

работать должны... но не работают.

так библа на часы не его, у него 

microDS3231

его библа на часы и его же библа на энкодер имеют больше шансов заработать вместе чем две библиотеки от разных разработчиков. 

DS1307

vanila
Offline
Зарегистрирован: 25.08.2015

dmitrypp пишет:

DS1307

емнип там чем то не принципиальным отличается. по крайней мере у меня 3231 с библой для 1307 работало. 

а если таки нет, лишний повод на нормальные часы перейти)

b707
Offline
Зарегистрирован: 26.05.2017

vanila пишет:

так библа на часы не его, у него 

microDS3231

его библа на часы и его же библа на энкодер имеют больше шансов заработать вместе чем две библиотеки от разных разработчиков. 

почему бы вам с этим вопросом не отправится на его форум?

vanila
Offline
Зарегистрирован: 25.08.2015

b707 пишет:

vanila пишет:

так библа на часы не его, у него 

microDS3231

его библа на часы и его же библа на энкодер имеют больше шансов заработать вместе чем две библиотеки от разных разработчиков. 

почему бы вам с этим вопросом не отправится на его форум?

зачем?

b707
Offline
Зарегистрирован: 26.05.2017

А зачем нам копаться в этом?
А вот участники гайверофорума никуда не денутся

vanila
Offline
Зарегистрирован: 25.08.2015

b707 пишет:
А зачем нам копаться в этом? А вот участники гайверофорума никуда не денутся

хз зачем.

я вот уверен не на сотку, конечно, но все же, что обе две его либы вместе заработают и копаться не придется.  

b707
Offline
Зарегистрирован: 26.05.2017

vanila пишет:

b707 пишет:
А зачем нам копаться в этом? А вот участники гайверофорума никуда не денутся

хз зачем.

я вот уверен не на сотку, конечно, но все же, что обе две его либы вместе заработают и копаться не придется.  

ну так делайте, зачем об этом на форум писать?

vanila
Offline
Зарегистрирован: 25.08.2015

b707 пишет:

ну так делайте, зачем об этом на форум писать?

вы меня с тс походу перепутали

a-login
Offline
Зарегистрирован: 01.02.2022

а не нужно писать типа там wath.begin();?

ну и если вдаваться в отладку, то есть ли зависание на вызове функции те заменить 31 строку на watch.gettime("H:i:s"); 

dmitrypp
Offline
Зарегистрирован: 29.01.2022

Да зависает, если в 31 строку ставлю watch.gettime("H:i:s"); 

a-login пишет:

а не нужно писать типа там wath.begin();?

ну и если вдаваться в отладку, то есть ли зависание на вызове функции те заменить 31 строку на watch.gettime("H:i:s"); 

a-login
Offline
Зарегистрирован: 01.02.2022

Следовательно проблемма не в либе гайвера. 

Подключена правильная либа?

#include <iarduino_RTC.h>           
iarduino_RTC watch(RTC_DS3231); 
iarduino_RTC watch(RTC_DS1307);
iarduino_RTC watch(RTC_DS1302, RST, CLK, DAT);

Может быть поможет установка времени в setup: 

watch.settime(0,51,21,27,10,15,2); 

Но так же есть вариант, что функция не "зависает", а исправно выполняет свою работу, то есть постоянно в конекте с модулем. В таком случае предлагаю, установить

watch.period( 1 ); //частота обращения в минутах

 

dmitrypp
Offline
Зарегистрирован: 29.01.2022

Проверял часы работают, комментирую строку 86 и 92, часы работают, меню нет.

a-login пишет:

Следовательно проблемма не в либе гайвера. 

Подключена правильная либа?

#include <iarduino_RTC.h>           
iarduino_RTC watch(RTC_DS3231); 
iarduino_RTC watch(RTC_DS1307);
iarduino_RTC watch(RTC_DS1302, RST, CLK, DAT);

Может быть поможет установка времени в setup: 

watch.settime(0,51,21,27,10,15,2); 

Но так же есть вариант, что функция не "зависает", а исправно выполняет свою работу, то есть постоянно в конекте с модулем. В таком случае предлагаю, установить

watch.period( 1 ); //частота обращения в минутах

 

a-login
Offline
Зарегистрирован: 01.02.2022

На гитхабе нашёл такой вариант

#include "DS1307.h"
DS1307 clock;
...
void loop{
clock.getTime();
oled.print(clock.hour, DEC);
}

 

Fenicksnet
Offline
Зарегистрирован: 25.03.2019

вот так как то вроде работает, часы правда 3231 других нет.

#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);
iarduino_RTC watch(RTC_DS3231);
uint32_t timer;
void setup() {
  oled.init();
  Serial.begin(9600);
  enc1.setTickMode(AUTO);

  v0 = EEPROM.read(0);
  v1 = EEPROM.read(1);
  v2 = EEPROM.read(2);
  v3 = EEPROM.read(3);
}

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;
  }
}


void loop() {
  enc1.tick();



  if (millis() - timer >= 250) {

    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);
    printGUI();
    oled.update();
    timer = millis();
  }


  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())              // сохранять при любом повороте
    {

     EEPROM.put(0, v0);
     EEPROM.put(1, v1);
     EEPROM.put(2, v2);
     EEPROM.put(3, v3);


    }
     // */

  //  /*
  if (enc1.isHolded())             // сохранить при удержании кнопки
  {
    oled.circle(2, 10, 2);
    oled.circle(32, 10, 2);
    oled.circle(2, 20, 2);
    oled.circle(32, 20, 2);
    EEPROM.put(0, v0);
    EEPROM.put(1, v1);
    EEPROM.put(2, v2);
    EEPROM.put(3, v3);
    arrowPos = 0;
    oled.update();
  }
  //  */
}

 

dmitrypp
Offline
Зарегистрирован: 29.01.2022

Спасибо тебе добрый человек, я знал, что здесь есть профи, а не только те, кто ругает чужие библы)

Fenicksnet пишет:

вот так как то вроде работает, часы правда 3231 других нет.

#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);
iarduino_RTC watch(RTC_DS3231);
uint32_t timer;
void setup() {
  oled.init();
  Serial.begin(9600);
  enc1.setTickMode(AUTO);

  v0 = EEPROM.read(0);
  v1 = EEPROM.read(1);
  v2 = EEPROM.read(2);
  v3 = EEPROM.read(3);
}

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;
  }
}


void loop() {
  enc1.tick();



  if (millis() - timer >= 250) {

    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);
    printGUI();
    oled.update();
    timer = millis();
  }


  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())              // сохранять при любом повороте
    {

     EEPROM.put(0, v0);
     EEPROM.put(1, v1);
     EEPROM.put(2, v2);
     EEPROM.put(3, v3);


    }
     // */

  //  /*
  if (enc1.isHolded())             // сохранить при удержании кнопки
  {
    oled.circle(2, 10, 2);
    oled.circle(32, 10, 2);
    oled.circle(2, 20, 2);
    oled.circle(32, 20, 2);
    EEPROM.put(0, v0);
    EEPROM.put(1, v1);
    EEPROM.put(2, v2);
    EEPROM.put(3, v3);
    arrowPos = 0;
    oled.update();
  }
  //  */
}

 

b707
Offline
Зарегистрирован: 26.05.2017

Fenicksnet. так в чем дело оказалось?

Fenicksnet
Offline
Зарегистрирован: 25.03.2019

dmitrypp пишет:

Спасибо тебе добрый человек, я знал, что здесь есть профи, а не только те, кто ругает чужие библы)

Пожалуйста.  Я не профи ( чисто из спортивного интереса в целях самообразования) ,а если я им и стану, то же буду как они (ругать чужие библы и все в этом духе)...

По поводу Гайвера скажу только то , что его библиотеки  более простые, есть внятное/понятное русское описание. Есть косяки по несовместимости даже его библиотек.

b707 пишет:

Fenicksnet. так в чем дело оказалось?

точно не знаю. есть только предположения.

1. по энкодеру, не была  объявлена функция обработки enc1.tick(); // строка. 47

2.  oled.update(); обновление дисплея,  было только при повороте энкодера. если я правильно понял в буфер собиралось, но никуда не выводилось.

да оно и сейчас через пень работает. имхо

 

dmitrypp
Offline
Зарегистрирован: 29.01.2022

строка 20, там объявлена функция обработки энкодера

Fenicksnet пишет:

dmitrypp пишет:

Спасибо тебе добрый человек, я знал, что здесь есть профи, а не только те, кто ругает чужие библы)

Пожалуйста.  Я не профи ( чисто из спортивного интереса в целях самообразования) ,а если я им и стану, то же буду как они (ругать чужие библы и все в этом духе)...

По поводу Гайвера скажу только то , что его библиотеки  более простые, есть внятное/понятное русское описание. Есть косяки по несовместимости даже его библиотек.

b707 пишет:

Fenicksnet. так в чем дело оказалось?

точно не знаю. есть только предположения.

1. по энкодеру, не была  объявлена функция обработки enc1.tick(); // строка. 47

2.  oled.update(); обновление дисплея,  было только при повороте энкодера. если я правильно понял в буфер собиралось, но никуда не выводилось.

да оно и сейчас через пень работает. имхо

 

Fenicksnet
Offline
Зарегистрирован: 25.03.2019

dmitrypp пишет:

строка 20, там объявлена функция обработки энкодера

все, нашел не надо.

Fenicksnet
Offline
Зарегистрирован: 25.03.2019

чет я не понимаю, пытаюсь добавить отключение дисплея , отключается , но почему то при любом Disp_off он отключается через 10 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);

uint8_t v0 = 0;
uint8_t v1 = 0;
uint8_t v2 = 0;
uint8_t v3 = 0;
uint8_t arrowPos = 4;
//iarduino_RTC watch(RTC_DS1307);
iarduino_RTC watch(RTC_DS3231);

uint32_t timer;              // таймер обновления экрана
uint16_t Disp_update = 200;   // обновляем диплей каждые мс

uint32_t timer_off;          // таймер отключения дисплея
uint32_t Disp_off = 0;      // отключение дисплея через сек, 0 не оключаем.

void setup() {
  oled.init();
  Serial.begin(9600);
  enc1.setTickMode(AUTO);
  Disp_off = 10 * 1000;

  v0 = EEPROM.read(0);
  v1 = EEPROM.read(1);
  v2 = EEPROM.read(2);
  v3 = EEPROM.read(3);
}

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;
  }
}

void loop() {
  if (enc1.isTurn())              
  {
    oled.setPower(true);          // включаем дисплей
    timer_off = millis();         // сбрасываем таймер
  }
  /*                             //проверить и сохранять в память при любом повороте
    EEPROM.put(0, v0);
    EEPROM.put(1, v1);
    EEPROM.put(2, v2);
    EEPROM.put(3, v3);
    }
    // */
  //  /*

  if ( Disp_off != 0 && millis() - timer_off >= Disp_off)  {    // таймер отключения дисплея
    oled.setPower(false);                                       // отключаем досплей
    arrowPos = 4;                                               // убираем курсор
  }

  else {
    if (millis() - timer >= Disp_update) {           // обновление дисплея
      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);
      printGUI();
      oled.update();
      timer = millis();
    }
  }

  if  (enc1.isRight())            // если был поворот
  { arrowPos++;
    if (arrowPos > 4) arrowPos = 0;
  }

  if (enc1.isLeft()) {            // если был поворот
    arrowPos--;
    if (arrowPos < 0) arrowPos = 4;
  }

  {
    if (enc1.isRightH()) {         // если было удержание + поворот
      switch (arrowPos) {
        case 0: v0++;
          break;
        case 1: v1++;
          break;
        case 2: v2++;
          break;
        case 3: v3++;
          break;
        case 4: break;
      }
    }
    if (enc1.isLeftH()) {          // если было удержание + поворот
      switch (arrowPos) {
        case 0: v0--;
          break;
        case 1: v1--;
          break;
        case 2: v2--;
          break;
        case 3: v3--;
          break;
        case 4: break;
      }
    }
  }

  v0 = constrain(v0, 0, 23);
  v1 = constrain(v1, 0, 59);
  v2 = constrain(v2, 0, 23);
  v3 = constrain(v3, 0, 59);
  // /*

  if (enc1.isHolded())             // сохранить при удержании кнопки,
  {
    oled.circle(2, 10, 2);
    oled.circle(32, 10, 2);
    oled.circle(2, 20, 2);
    oled.circle(32, 20, 2);
    EEPROM.put(0, v0);
    EEPROM.put(1, v1);
    EEPROM.put(2, v2);
    EEPROM.put(3, v3);
    arrowPos = 4;
    oled.update();
  }
  //  */
}

 

vrd
Offline
Зарегистрирован: 20.01.2022

Закоментить 30-ю строчку.

Fenicksnet
Offline
Зарегистрирован: 25.03.2019

vrd пишет:

Закоментить 30-ю строчку.

вот я ....., точно, только не закоментить, а  вот так наверное записать Disp_off = Disp_off * 1000;

Спасибо.