Установка времни на ТРОЙКА модуль RTC с помощью кнопок

Тема в разделе "Arduino & Shields", создана пользователем Толик Иванов, 30 ноя 2015.

  1. Толик Иванов

    Толик Иванов Administrator Администратор

    подключил часы к ардуино и с помощью этого скетча загрузил время.
    все показывает и работает замечательно
    Код (C++):
    // библиотека для работы I²C
    #include <Wire.h>
    // библиотека для работы с часами реального времени
    #include "TroykaRTC.h"
    // EEPROM — энергонезависимая память
    // библиотека для записи и считывания информации с EEPROM
    #include <EEPROM.h>
    // размер массива для времени с учётом завершающего нуля
    #define LEN_TIME 12
    // размер массива для даты с учётом завершающего нуля
    #define LEN_DATE 12
    // размер массива для дня недели с учётом завершающего нуля
    #define LEN_DOW 12
    // создаём объект для работы с часами реального времени
    RTC clock;
    void setup()
    {
      // открываем последовательный порт
      Serial.begin(9600);
      // инициализация часов
      clock.begin();
      // метод установки времени и даты в модуль вручную
      // clock.set(10,25,45,27,07,2005,THURSDAY);
      // метод установки времени и даты автоматически при компиляции
      clock.set(__TIMESTAMP__);
    }
    void loop()
    {
      // массив для хранения текущего времени
      char time[LEN_TIME]={0};
      // массив для хранения текущей даты
      char date[LEN_DATE]={0};
      // массив для хранения текущего дня недели
      char dow[LEN_DOW]={0};
      // запрашиваем данные с часов
      clock.read();
      // сохраняем текущее время в массив time
      clock.getTimeStr(time, LEN_TIME);
      // сохраняем текущую дату в массив date
      clock.getDateStr(date, LEN_DATE);
      // сохраняем текущий день недели в массив dow
      clock.getDOWStr(dow, LEN_DOW);
      // выводим в serial порт текущее время, дату и день недели
      Serial.print(time);
      Serial.print("--");
      Serial.print(date);
      Serial.print("--");
      Serial.println(dow);
      // ждём одну секунду
      delay(1000);
    }
    но есть необходимость выставить время не с помощью ARDUINO IDE, а с помощью кнопок на самом устройстве.
    Вопрос: как реализовать подобную установку?
     
  2. Толик Иванов

    Толик Иванов Administrator Администратор

    есть мысль использовать
    Код (C++):
    // метод установки времени и даты в модуль вручную
      // clock.set(10,25,45,27,07,2005,THURSDAY);
    где вместо значений указать переменные чтото типа такого
    Код (C++):
    // метод установки времени и даты в модуль вручную
      // clock.set(h,m,00,d,months,y,w);
    и передавать в эти переменные значения к примеру потенциометром на аналоговом входе.
    пока чтото такое. но для этого нужно 6 потенциометров я так понимаю. а это уже не оч рентабельно. может есть еще какие-то идеи?
     
  3. берем две кнопки, первая часы, вторая минуты..
    в цикле условие, если надавили на первую кнопку, смотрим текущее время, прибавляем к часам единицу и устанавливаем в модуль.. с минутами также
     
  4. Толик Иванов

    Толик Иванов Administrator Администратор

    а как вообще идея с записью в переменные. Я много тем посмотрел но там столько кода , что черт ногу сломит. Если моя идея сработает то помоему будет гораздо проще реализовать
     
  5. Толик Иванов

    Толик Иванов Administrator Администратор

    я правильно понял должно получиться чтото вроде этого
    Код (C++):
    if (analogRead>50&&analogRead<100) {
    h=h++;

    clock.set(h, , , , , , )

    }
    при условии что на аналоговый вход при нажатии конкретной кнопки подается значение от 50 до 100
     
  6. AlexVS

    AlexVS Гик

    Не понятно, зачем analogRead, когда есть digitalRead. Кнопкой подтягиваешь пин к земле и получаешь LOW, кнопку отпустил - через подтягивающий резистор получаешь на пине HIGH.
    Только не забудь про дребезг.
     
  7. Толик Иванов

    Толик Иванов Administrator Администратор

    дело в том что я хочу на один пин подсоединить сразу несколько кнопок чекрез последовательно соединенные резисторы, мол замыкание определенной кнопки будет соответственно давать разные значения, а контроллер исходя из этих значений будет понимсать какая кнопка нажата. но пока это теория, ща учу про прерывания, чтоб понимать как остановить вывод значений с часов и потом загрузить установку новых значений.
     
  8. AlexVS

    AlexVS Гик

  9. Толик Иванов

    Толик Иванов Administrator Администратор

    в RTC тройка модуле есть возможность установить время вручную, на вики есть код с описанием и вот что там написано
    Код (C++):
    // метод установки времени и даты в модуль вручную
      // clock.set(10,25,45,27,07,2005,THURSDAY);
      // метод установки времени и даты автоматически при компиляции
      //clock.set(__TIMESTAMP__);
    так вот если использовать clock.set(__TIMESTAMP__), то время устанавливается и все норм, но если использовать установку времени вручную то компилятор ругается на последний параметр THURSDAY, и конечно же время не устанавливается. как быть? как вручную в таком случае установить время на тройка модуле RTC?
     
  10. наверное за место THURSDAY можно подставить цифру дня недели.
     
  11. Толик Иванов

    Толик Иванов Administrator Администратор

    с цыфрой прокатывает, скетч компилируется, но еще не проверял что выдаст в сериал, нет ардуины под рукой
     
  12. Толик Иванов

    Толик Иванов Administrator Администратор

    с цифрой работает, показывает вместо числа- день недели