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

Тема в разделе "Arduino & Shields", создана пользователем incvisitor, 11 дек 2018.

  1. incvisitor

    incvisitor Нерд

    Код (C++):
    #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:;
               // на неизвестную команду - ничего не делаем
        };
      }
    }
     
  2. incvisitor

    incvisitor Нерд

    Мне нжно что бы на дисплей выводилось текущее время(часы и минуты). С этой задачей я справился.Дальше мне нужно кнопками увеличивать/уменьшать часы и аналогично с минутами так,что бы оно выводилось ,а не терялось при обновлении.
     

    Вложения:

    • 1.png
      1.png
      Размер файла:
      131,6 КБ
      Просмотров:
      243
  3. Un_ka

    Un_ka Гуру

    У Алекса Гайвера вроде не плохой код есть.
     
  4. Nikita228

    Nikita228 Гик

    возможно ошибка даже не в коде
    проверьте правильное подключение и питание на объектах
     
  5. Asper Daffy

    Asper Daffy Иксперд

    Можно ссылку? Хоть посмотрю. А то до сих пор я у него ни одного не кривого кода не видел :(
     
    parovoZZ нравится это.
  6. fogary

    fogary Гик

    Вызов метода "RTC.setTime();" забыли. "RTC.hour" и т. д. - всего лишь переменные (поля) класса.
     
  7. b707

    b707 Гуру

    +1
    (причина редактирования - невнимательно прочитал :)