Таймер/часы на кухню

Тема в разделе "Глядите, что я сделал", создана пользователем IvanUA, 2 сен 2018.

  1. makks

    makks Нуб

    А где прошивки то?
     
    Последнее редактирование: 19 мар 2019
  2. sanik

    sanik Гик

  3. Pop

    Pop Нерд

    Не подумайте что зануда) ,но нашел несколько ошибок в коде (повторяю данное устройство).
    1.В строке 135 код:
    Код (C++):
    void displayTimer(){
      h = (int)timmer / 3600;
      m = (int)timmer / 60 - h * 60;
      s = timmer - m * 60;
      tm1637.point(1);
      if(timmer > 3600) {
     
    думаю нужно ставить
    Код (C++):
    void displayTimer(){
      h = (int)timmer / 3600;
      m = (int)timmer / 60 - h * 60;
      s = timmer - m * 60;
      tm1637.point(1);
      if(timmer >= 3600) {
     
    2.
    Код (C++):
    void displayTime(){
      tm1637.point(flash);
      tm1637.display(0, hour / 10);
      tm1637.display(1, hour % 10);
      tm1637.display(2, minute / 10);
      tm1637.display(3, minute % 10);
    }//-------------------------------------
     
    тут неплохо добавить в конце:
    Код (C++):
    pause = 1;
    иногда после выхода в режим показа времени (например кнопкой "-") данная переменная остается установлена в 0, и когда запускаешь следующий таймер, он сразу стартует.

    Давно хотел сделать на кухню такой таймер, идея годная )

    P.S. Синхронизацию времени все-таки сделал NTP раз в час и при запуске, как-то мне так привычнее.
    P.S.S. Еще добавил публикацию в топик MQTT события "Alarm" , при окончании работы таймера. Кухня у меня в отдельно-стоящем здании, и система (MajorDoMo) уведомит меня об окончании таймера и в доме (мало-ли)
     
    Последнее редактирование: 30 май 2019
    IvanUA нравится это.
  4. Serg78

    Serg78 Нуб

    Сломались часы-таймер в духовке, вот думаю заменить на эти ) Подскажите начинающему, в каком месте скетча лучше включать реле духовки? Выключать думаю в начале п/п Аларм? а релюшку подключить к 00 или А0? Спасибо
    0 = PGM, A0 = аналог... либо кнопки переделать под аналог, тогда 3 дискретных свободны, или подпаяться под Д9 или Д10
     
    Последнее редактирование: 25 июл 2019
  5. IvanUA

    IvanUA Гуру

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

    Serg78 Нуб

    Иван, подскажите пожалуйста начинающему ) не могу понять это условие
    if (millis() % (statusWifi ? 1000 : 500) < (statusWifi ? 500 : 400) ...
    как его расшифровать? что значит знак вопроса и далее 1000 : 500... не нашел в описании программирования Ардуино. Где посмотреть?
    И еще не понял назначение строки
    if (key != 0 && (keySpeed == 0 || (h == 1 && m == 0) || (h == 0 && m == 59) || (m == 9 && s == 00))) tm1637.clearDisplay();
    Поясните, если вспомните )
    Спасибо
     
    Последнее редактирование: 26 июл 2019
  7. KindMan

    KindMan Гик

    Это сокращенная запись условия If...else. т.е. (statusWifi ? 1000 : 500) это тоже самое, что if (statusWifi) {1000} else {500}
     
    IvanUA нравится это.
  8. IvanUA

    IvanUA Гуру

    Если "statusWifi" = истина то значение данного условия будет 1000 если же ложь то 500
    Тут все просто
    key != 0 - если нажата какая либо кнопка
    keySpeed == 0 - это скорость нарастания или убывания счетчика (кажись)
    (h == 1 && m == 0) - это соответственно показания часов и минут...
    tm1637.clearDisplay() - очистка дисплея
     
  9. Serg78

    Serg78 Нуб

    Большое спасибо! вопрос о последней строке - не как ее разложить по операторам - это я понял, а зачем очищать дисплей? ) что это за условие такое на словах, чтобы его чистить?
     
  10. IvanUA

    IvanUA Гуру

    Если к примеру сейчас на дисплее "1234", а вы будете выводить к примеру " 56", то первые два сегмента не сотрутся и получится "1256"
     
    Serg78 нравится это.
  11. Serg78

    Serg78 Нуб

    Спасибо! Вот только не хватает вв/выв... и у меня ситуация, где только 2 отверстия под управление ) насверлить никто не запрещал конечно, но будет не красиво. В общем сначала подумал использовать 2 кнопки от аналогового входа: 1я- "+1", 2я "-1", обе = "пуск/стоп". Но тут сомнения, как это отличить, чтобы было просто в использовании.... Что это? просто нажатие кнопки или это только миг перед нажатием второй кнопки? долгое нажатие - это ускоренный инкремент или лишь ждем нажатие второй, чтобы сделать пуск? Есть ли какие-то алгоритмы такого управления?
    Другой вариант - это использовать енкодер, для инкремента/дикримента и кнопку для пуска, но тут с выводами И/О туго... надо еще оставить под вкл/выкл реле, уж молчу хотел еще и температуру внутри духовки вывести.... ESP32 ставить? )
     
    Последнее редактирование: 13 авг 2019 в 13:53