Как кнопками регулировать время выведенное на дисплей?

incvizitor
incvizitor аватар
Offline
Зарегистрирован: 02.11.2018
#include <DS1307new.h>
#include <Wire.h>
 
// Подключаем стандартную библиотеку LiquidCrystal
#include <LiquidCrystal.h>
// Инициализируем объект-экран, передаём использованные
// для подключения контакты на Arduino в порядке:
              // RS, E, DB4, DB5, DB6, DB7
LiquidCrystal lcd(4, 5, 10, 11, 12, 13);
int hourplus = 7;
int hourminus = 6;
 
 
void setup()
{
  Serial.begin(9600);
  if(RTC.isPresent()){ // обнаружен ли модуль?
    Serial.println("RTC Ready"); // все хорошо
  } else {
    Serial.println("Error!!!! RTC Module not found"); // сообщаем о проблеме
    while(1); // и останавливаем скетч
  }
 
  lcd.begin(16, 2); // запускаем библиотеку экрана
 
 
}
void loop()
{
RTC.getTime();// получить время от модуля
  printTimeToSerial(); // выводим полученное время в лог
  printTimeToLCD();; // выводи время на экран
  doSerialCommands(); // слушаем и выполняем команды из Serial
  if(digitalRead(hourplus )==HIGH )
  {
    RTC.hour = RTC.hour+1;
    printTimeToSerial();
    if(RTC.hour >23)RTC.hour =23;
  }
 
    if(digitalRead(hourminus)==HIGH )
  {
    RTC.hour = RTC.hour-1;
    printTimeToSerial();
    if(RTC.hour <0)RTC.hour =0;
  }
}
 
// Выводит текущие время в Serial
void printTimeToSerial(){
  byte static prevSecond=0; // тут будем хранить, сколько секунд было при прошлом отчете
 
  if(RTC.second!=prevSecond){ // что-то делаем только если секунды поменялись
    Serial.print(RTC.hour); // часы
 
    Serial.print(":"); // разделитель
    Serial.print(RTC.minute);
 
    Serial.print(":");
    Serial.println(RTC.second);
   
    prevSecond=RTC.second; // запомнили когда мы "отчитались"
  }
}
// Выводит текущие время на LCD
void printTimeToLCD(){
    byte static prevSecond=0; // тут будем хранить, сколько секунд было при выводе
   
    if(RTC.second!=prevSecond){ // что-то делаем только если секунды поменялись
       lcd.setCursor(5,0); // устанавливаем позицию курсора
      
      if(RTC.hour<10)lcd.print(" ");
      lcd.print(RTC.hour); // часы
   
      lcd.print( (RTC.second % 2)?" ":":"); // разделитель моргает
     
      if(RTC.minute<10)lcd.print(0); // лидирующий ноль, если нужен
      lcd.print(RTC.minute);
   
    prevSecond=RTC.second; // запомнили когда мы "отчитались"
  }
}
// устанавливает часы модуля на какое-то заранее определенное время
void setSomeTime(){
  RTC.stopClock();// останавливаем часы
  RTC.fillByHMS(19,15,0); // "подкручиваем стрелки на 19:15:00
  RTC.setTime();// отправляем "подкрученное время" самому модулю
  RTC.startClock(); // и опять запускаем часы
}
// слушает из Serial команды и выполняет их. Каждая команда - один символ.
// доступны команды:
//  s - установить время указанное в функции setSomeTime()
void doSerialCommands(){
  if(Serial.available()){ // что-нибудь пришло?
    char ch=Serial.read(); // читаем что пришло
   
    switch(ch){
      case 's': // команда установки времени
           setSomeTime(); // устанавливаем
           break;
          
       // тут, в будущем, мы можем добавлять дополнительные команды
      default:;
           // на неизвестную команду - ничего не делаем
    };
  }
}
incvizitor
incvizitor аватар
Offline
Зарегистрирован: 02.11.2018
Мне нужно что бы на дисплей выводилось текущее время(часы и минуты). С этой задачей я справился.Дальше мне нужно кнопками увеличивать/уменьшать часы и аналогично с минутами так,что бы оно выводилось ,а не терялось при обновлении.
Вот правильная схема
 
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

incvizitor пишет:

Дальше мне нужно кнопками увеличивать/уменьшать часы и аналогично с минутами так,что бы оно выводилось ,а не терялось при обновлении.
 
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ты где этот скетч взял?