Оптимизация кода часов реального времени

gmford

✩✩✩✩✩✩✩
29 Май 2019
1
0
Доброго времени суток, меня зовут Михаил, сначала пытался найти рабочий код для ЧРВ (часов реального времени), но так как ничего не нашел написал первый код на ардуино. Простейшие часы на модулях 1302 и 1602 с функцией подстройки.
Пока только показывает текущее время, и есть возможность настройки.

Алгоритм работы : получаю текущее время с 1302 и вывожу на 1602
Интерфейс и настройка : arduino uno v3 + 1302 + 1602
Подскажите как циклы реализовать в один, например переменная yea() уходит в функцию sel(var,var), а потом по значению подбирает обработчик.
А то я не больше школьной программы по бэйсику помню.

C++:
//Часы на arduino uno ЧРВ 1302 и дисплее 1602
#include <iarduino_RTC.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <GyverButton.h>
iarduino_RTC time(RTC_DS1302, 10, 12, 11); //RST, CLC, DAT контакты 1302
LiquidCrystal_I2C lcd(0x27, 16, 2); // Устанавливаем дисплей
unsigned long last_time;
int regim = 1;
int flag = 0;
int hou1 = 0;
int min1 = 0;
int sec1 = 0;
int day1 = 0;
int mon1 = 0;
int yea1 = 0;
GButton butt1(A0, HIGH_PULL, NORM_OPEN);
GButton butt2(A1, HIGH_PULL, NORM_OPEN);
GButton butt3(A2, HIGH_PULL, NORM_OPEN);
void setup() {
  pinMode(13, OUTPUT);// Включаем питание для ЧРВ
  digitalWrite(13, 1);
  delay(300);//
  Serial.begin(9600);
  time.begin();
  hou1 = (time.Hours);
  min1 = (time.minutes);
  sec1 = (time.seconds);
  day1 = (time.day);
  mon1 = (time.month);
  yea1 = (time.year);
  lcd.init();
  lcd.backlight();// Включаем подсветку дисплея
  butt1.setTickMode(AUTO);
  butt2.setTickMode(AUTO);
  butt3.setTickMode(AUTO);
}
void loop()
{
  //Serial.println(regim);
  if (butt1.isHolded() == 1 && flag == 0) //Если кнопка нажата меняем режим
  {
    regim++;
    flag = 1;
    if (regim > 7)
    {
      regim = 1;
    }
  }
  if (butt1.isRelease() && flag == 1)
  {
    flag = 0;
  }
  switch (regim) {
    case 1: //Стандартная работа часов с миганием :
      time.blinktime(0);
      if (regim == 1 && millis() - last_time > 500)
      {
        lcd.setCursor(3, 0);// Первая строка дата
        lcd.print(time.gettime("d.m.Y"));
        lcd.setCursor(4, 1);// Вторая строка время
        lcd.print(time.gettime("H i s"));
      }
      if (regim == 1 && millis() - last_time > 1000)
      {
        lcd.setCursor(4, 1);// Вторая строка время
        lcd.print(time.gettime("H:i:s"));
        last_time = millis();
      }
      break;
    case 2: //Настройка часа
      time.blinktime(3, 2);
      if (butt2.isClick() && regim == 2)
      {
        hou1++;
        if (hou1 == 23)
        {
          hou1 = 0;
        } time.settime(-1, -1, hou1);
        Serial.println(hou1);
      }
      if (butt3.isClick() && regim == 2)
      {
        hou1--;
        if (hou1 == 0)
        {
          hou1 = 23;
        }
        time.settime(-1, -1, hou1);
      }
      lcd.setCursor(4, 1);// Вторая строка время
      lcd.print(time.gettime("H i s"));
      break;
    case 3://Настройка минут
      time.blinktime(2, 2);
      if (butt2.isClick() && regim == 3)
      {
        min1++;
        if (min1 == 60)
        {
          min1 = 0;
        }
        time.settime(-1, min1);
        Serial.println(min1);
      }
      if (butt3.isClick() && regim == 3)
      {
        min1--;
        if (min1 == 0)
        {
          min1 = 59;
        }
        time.settime(-1, min1);
      }
      lcd.setCursor(4, 1);// Вторая строка время
      lcd.print(time.gettime("H:i:s"));
      break;
    case 4://Настройка секунд только сброс на ноль
      lcd.setCursor(4, 1);// Вторая строка время
      lcd.print(time.gettime("H:i:s"));
      time.blinktime(1, 2);
      if (butt2.isClick() && regim == 4)
      {
        sec1 = 0;
      }
      time.settime(sec1);
      if (butt3.isClick() && regim == 4)
      {
        sec1 = 0;
        time.settime(sec1);
      }
      lcd.setCursor(4, 1);// Вторая строка время
      lcd.print(time.gettime("H:i:s"));
      break;
    case 5://Настройка дня
      lcd.setCursor(4, 1);// Вторая строка время
      lcd.print(time.gettime("H:i:s"));
      time.blinktime(4, 2);
      Serial.println(day1);
      if (butt2.isClick() && regim == 5)
      {
        day1++;
        if (day1 == 32)
        {
          day1 = 1;
        }
        time.settime(-1, -1, -1, day1);
      }
      if (butt3.isClick() && regim == 5)

      {
        day1--;
        if (day1 == 0)
        {
          day1 = 31;
        }
        time.settime(-1, -1, -1, day1);
      }
      lcd.setCursor(3, 0);// Первая строка дата
      lcd.print(time.gettime("d.m.Y"));
      break;
    case 6://Настройка месяца
      time.blinktime(5, 2);
      Serial.println(mon1);
      if (butt2.isClick() && regim == 6)
      {
        mon1++;
        if (mon1 == 13)
        {
          mon1 = 1;
        }
        time.settime(-1, -1, -1, -1, mon1);
      }
      if (butt3.isClick() && regim == 6)

      {
        mon1--;
        if (mon1 == 0)
        {
          mon1 = 12;
        }
        time.settime(-1, -1, -1, -1, mon1);
      }
      lcd.setCursor(3, 0);// Первая строка дата
      lcd.print(time.gettime("d.m.Y"));
      break;
    case 7://Настройка года
      time.blinktime(6, 2);
      Serial.println(yea1);
      if (butt2.isClick() && regim == 7)
      {
        yea1++;
        if (yea1 == 100)
        {
          yea1 = 0;
        }
        time.settime(-1, -1, -1, -1, -1, yea1);
      }
      if (butt3.isClick() && regim == 7)

      {
        yea1--;
        if (yea1 == -1)
        {
          yea1 = 99;
        }
        time.settime(-1, -1, -1, -1, -1, yea1);
      }
      lcd.setCursor(3, 0);// Первая строка дата
      lcd.print(time.gettime("d.m.Y"));
      break;
      break;
  }
}
 
Последнее редактирование: