Помощь

Козюлин
Offline
Зарегистрирован: 13.07.2020

Добрый день! Пожалуйста помогите решить проблему с кодом.

int seconds =0;
int minutes =0;
int timer;
long the_time=millis();
#include<GyverEncoder.h>
#include<TM1637.h>
#define CLK 5
#define DT 6
#define SW 7
Encoder enc (CLK, DT, SW);
TM1637 tm1637 (3, 2);
void setup() 
{
enc.setType(TYPE2);
pinMode(13, OUTPUT);
tm1637.init();
tm1637.setBrightness(4);
}
void loop() 
{
enc.tick();
if(enc.isRight()) seconds++;
if(enc.isLeft()) seconds--;
if(enc.isRightH()) minutes++;
if(enc.isLeftH()) minutes--;
if(seconds<0 || seconds>59)
{
  seconds=0;
}
if(minutes<0)
{
  minutes=0;
}
if(minutes>60)
{
 minutes=60; 
}
timer=(seconds+minutes*100)*1000;
if(enc.isDouble())
{
  digitalWrite(13, 1);
  if(millis()-the_time >= timer)
  {
    digitalWrite(13, 0);
    seconds = 0;
    minutes = 0;
  }
}
tm1637.display(seconds+minutes*100);
tm1637.switchColon();
}

Этот код должен работать так:

при повороте энкодера в право, на дисплее увеличиваются секунды;

при повороте энкодера в лево, на дисплее уменьшаются секунды;

при удержании кнопки и повороте в право увеличиваются минуты;

при удержании кнопки и повороте в лево минуты уменьшаются;

при двойном клике по кнопке энкодера запускается таймер;

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

Но на практике он не отсчитывает указанное время.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Козюлин пишет:

itimer=(seconds+minutes*100)*1000;
tm1637.display(seconds+minutes*100);

А что, в минуте теперь сто секунд? Блин, вот хотел же прочитать все поправки к Конституции, но всё лень ... :-(

Строки №№40-48. А кто будет время начала отсчёта запоминать? Вы когда время засекаете, смотрите на часы в начале или сразу отсчитываете?

Козюлин
Offline
Зарегистрирован: 13.07.2020

На часы смотрю.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

так а в программе не смотрите почему-то.