Таймер на ds1307

Тема в разделе "Arduino & Shields", создана пользователем blackflash2009, 26 ноя 2020.

  1. blackflash2009

    blackflash2009 Нерд

    Нужен таймер для включения лам выращивать рассаду. Стоять должны часы реального времени и фоторезистор приоритет включения должен стоять по фоторезистору не магу дописать часть программы отвечающая за за таймер. Перед циклом мне нужно считать данные с часов реального времени пересчитать это значение в секунды и сравнить в else if чтобы оно укладывалось в нужный промежуток. может кто подсказать как это сделать ?
    Код (C++):
    //Скетч для управления реле с помощью ардуино
    //Используем реле SONGLE SRD-05VDC
    //Реле ОТКРЫВАЕТСЯ при подаче низкого уровня сигнала (LOW) на управляющий пин.
    // Реле ЗАКРЫВАЕТСЯ при подаче высокого уровня сигнала (HIGH) на управляющий пин.
    //PIN_RELAY содержит номер пина, к которому подключено реле

    #include <iarduino_RTC.h> // побключаем универсальную библиотеку часов реального времени
    iarduino_RTC time(RTC_DS1307); // выбераем часы реального времени для DS1307-(RTC_DS1307) для DS1302-(RTC_DS1302,10,13,12) для DS3231-(RTC_DS3231)

    int PIN_RELAY = 13; //переменная с номером пина реле
    int ldr = 0; //и фоторезистора


     
    void setup()
    {
    // блок установки часов ( удаляется после первой прошивки )
        delay(300);
        Serial.begin(9600);
        time.begin();
        time.settime(0,51,21,27,10,15,2);  // 0  сек, 51 мин, 21 час, 27, октября, 2015 года, вторник


    pinMode(PIN_RELAY, OUTPUT); // Объявляем пин реле как выход


    }

    void loop()
    {

    if (analogRead(ldr) < 800); //если показатель освещенности меньше 800
    else if ((8*60+20)*60> текущие время  < (21*60+20)*60+10) digitalWrite(PIN_RELAY, LOW);// выполняем условие между 8:20:00 и 21:20:10


    else digitalWrite(PIN_RELAY, LOW); //иначе выключаем

    delay(1000);


    }
     
  2. parovoZZ

    parovoZZ Гуру

    Я ничего не понял. Ни запятых, ни точек.
    А если нужен таймер, то у алёши их в ассортименте на любой кошелёк.
    upload_2020-11-26_16-40-35.png
     
  3. blackflash2009

    blackflash2009 Нерд

    Вот так работать будет ?
    Код (C++):
    //Скетч для управления реле с помощью ардуино
    //Используем реле SONGLE SRD-05VDC
    //Реле ОТКРЫВАЕТСЯ при подаче низкого уровня сигнала (LOW) на управляющий пин.
    // Реле ЗАКРЫВАЕТСЯ при подаче высокого уровня сигнала (HIGH) на управляющий пин.
    //PIN_RELAY содержит номер пина, к которому подключено реле

    #include <iarduino_RTC.h> // побключаем универсальную библиотеку часов реального времени
    iarduino_RTC watch(RTC_DS1307); // выбераем часы реального времени для DS1307-(RTC_DS1307) для DS1302-(RTC_DS1302,10,13,12) для DS3231-(RTC_DS3231)

    int PIN_RELAY = 13; //переменная с номером пина реле
    int ldr = 0; //и фоторезистора

    uint8_t D, M, Y, h, m, s, W; // Объявляем переменные для получения даты и времени: D-день, M-месяц, Y-год, h-часы, m-минуты, s-секунды, W-день недели.
     
    void setup()
    {
    // блок установки часов ( удаляется после первой прошивки )

    Serial.begin(9600);                                   // Инициируем передачу данных в монитор последовательного порта
        watch.begin();                                        // Инициируем RTC модуль
        watch.settime(0,51,21,27,10,15,2);                    // Устанавливаем время: 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник
    // удоляем блок установки часов прошиваем еще раз

    pinMode(PIN_RELAY, OUTPUT); // Объявляем пин реле как выход
    watch.begin(); //инициалезация часов

    }

    void loop()
    {
      h = watch.Hours;                                  // Получаем текущие часы        0-23.
      m = watch.minutes;                                // Получаем текущие минуты      0-59.
      s = watch.seconds;                                // Получаем текущие секунды     0-59.

    if (analogRead(ldr) < 800); //если показатель освещенности меньше 800
    else if ((8*60+20)*60>(h*60+m)*60+s  < (21*60+20)*60+10) digitalWrite(PIN_RELAY, HIGH);// выполняем условие между 8:20:00 и 21:20:10


    else digitalWrite(PIN_RELAY, LOW); //иначе выключаем

    delay(1000);


    }
     
  4. fps

    fps Нерд

    Что этим подразумевалось?

    Тут каша какая-то - длинная строка бессмысленных букв и цифр.
    Вас уже просили - отформатируйте код, напишите внятные комментарии.
     
  5. blackflash2009

    blackflash2009 Нерд

    Все просто устанавливаешь время прошиваешь его в модуль часов. Удаляешь установку времени прошиваешь основной код
    Что вам не нравится вычисляешь сколько секунд в заданном времени затем вычисляешь текущие и сравниваешь совпадает включаешь реле не совпадает реле не включаешь Что вам не нравится?
     
  6. Рокки1945

    Рокки1945 Гуру

    разбирал такие таймеры - тихий ужас - питание через гасящий конденсатор - сборка - жесть
     
  7. fogary

    fogary Гик

    Можно использовать функцию библиотеки: gettimeUnix().