Вопрос по таймеру

301sem
Offline
Зарегистрирован: 14.01.2021

Всем привет.

Пытаюсь сделать освещение по времени. Нужно чтобы каждый день в 7 утра и в 22 вечера свет включался на 1 минуту. Т.е. в 7:00:00 включился, в 7:01:00 выключился.

Делаю так:

if((time.Hours==7 && time.minutes==0 && time.seconds==0) || (time.Hours==22 && time.minutes==0  && time.seconds==0))
{pinMode(PIN_RELAY_2,HIGH);}

if (millis() - timer >= PERIOD) {
timer = millis();
pinMode(PIN_RELAY_2,LOW);}

Period 60000.

Заранее благодарю. Гневных комментаторов прошу проходить мимо!

 

b707
Offline
Зарегистрирован: 26.05.2017

а где вопрос?

301sem
Offline
Зарегистрирован: 14.01.2021

Вопрос как сделать так, чтобы работало. Потому что этот вариант не работает

b707
Offline
Зарегистрирован: 26.05.2017

301sem пишет:

Вопрос как сделать так, чтобы работало. Потому что этот вариант не работает

еще бы, бред полный.

Для начала выложите код полностью. Этот не то что не работает - а даже не компилируется

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Строку 5 перенесите перед второй строкой.
И вместо pinMode() должно быть divitalWrite()

pinMode(PIN_RELAY_2, OUTPUT) должно быть в сетапе

301sem
Offline
Зарегистрирован: 14.01.2021

Ох ёмоё, думал этого достаточно. Компьютер уже выключил. Завтра скинул полностью. Благодарю, что отозвались!

b707
Offline
Зарегистрирован: 26.05.2017

v258 пишет:
pinMode(PIN_RELAY_2, OUTPUT) должно быть в сетапе

в первую очередь под шляпой должны быть мозги...

b707
Offline
Зарегистрирован: 26.05.2017

301sem пишет:

Ох ёмоё, думал этого достаточно.

Вполне достаточно чтобы сделать вывод о ваших способностях. Но не достаточно. чтобы указать на все ошибки.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

b707 пишет:

в первую очередь под шляпой должны быть мозги...


Про мозги тут пока не ясно, ясно только, что нифига не знает))

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

1. Каждую секунду считывай время. 

2. Переводи его в линейный формат (Часы * 60 + Минуты) 

3. Сравнивай на точное равенство с 7*60 и 22*60

4. Если совпало - включай нагрузку, нет - выключай. Через минуту выключится отоматически

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

В строке 4 Вы используете переменную timer, а где Вы назначаете ей значение?

А вообще - изврат. Почему не сделать как в строке 1?

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Включаем логику. Что вы делаете в момент когда условие подходит ? Включаете реле.

Что нужно сделать дальше ? Выключить через минуту.

Т.е. следующее условие должно быть: если реле включено

Что делаем : то через минуту его выключаем.

В коде этого нет совсем.

Учитесь на словах алгоритм составлять, а потом уже кодом описывать

if(digitalRead(RELE_2)==HIGH){
if(millis()-timer>=60000){digitalRead(RELE_2,LOW);}
}else {timer=millis();}

 

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Совсем мальчонке голову запудрили. Вроде указываете на ошибки и сами не мало делаете. Так не пойдёт. 
Как считывая состояние пина изменить его?))

anatoli_nik
Offline
Зарегистрирован: 17.01.2019

Если мне память не изменяет, есть такая фича у АВР при чтении регистра PINxx настроенного на выход порта, бит регистра PORTxx инвертируется.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

anatoli_nik пишет:

Если мне память не изменяет, есть такая фича у АВР при чтении регистра PINxx настроенного на выход порта, бит регистра PORTxx инвертируется.

И каким местом это прикрутить к вопросу ТС'а ?

301sem
Offline
Зарегистрирован: 14.01.2021

Вот весь код:

#include <Adafruit_BMP280.h>
#include <iarduino_OLED_txt.h>
#include <iarduino_RTC.h>
#define  PIN_RELAY_1  9
#define  PIN_RELAY_2  8
iarduino_RTC time(RTC_DS1302, 4, 5, 6);                      
iarduino_OLED_txt myOLED(0x3C);                              
Adafruit_BMP280 bmp;                                                             
extern uint8_t MediumFontRus[];    
extern uint8_t SmallFontRus[]; 
String str1="";
#define PERIOD 60000
uint32_t timer = 0;                        
                                                             
void setup(){                                              
    myOLED.begin();
    myOLED.setFont(MediumFontRus);                                          
    time.begin();
    bmp.begin();
                                            
                                                       
  bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
                  Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */
                  Adafruit_BMP280::STANDBY_MS_500);
                  }
                                                                               
void loop(){
                                                
myOLED.print(time.gettime("H:i:s"), OLED_C, 1);
str1="";
str1=str1+"Темп:";
str1=str1+ bmp.readTemperature();
myOLED.print(str1, OLED_C, 4);

//Освещение
if((time.Hours==7 && time.minutes==0 && time.seconds==0) || (time.Hours==22 && time.minutes==0  && time.seconds==0))
{pinMode(PIN_RELAY_2,HIGH);}

if (millis() - timer >= PERIOD) {
timer = millis();
pinMode(PIN_RELAY_2,LOW);}

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

301sem пишет:

Вот весь код:

Отлично!!!  Выкини его нахрен. 

301sem
Offline
Зарегистрирован: 14.01.2021
#include <Adafruit_BMP280.h>
02 #include <iarduino_OLED_txt.h>
03 #include <iarduino_RTC.h>
04 #define  PIN_RELAY_1  9
05 #define  PIN_RELAY_2  8
06 iarduino_RTC time(RTC_DS1302, 4, 5, 6);                     
07 iarduino_OLED_txt myOLED(0x3C);                             
08 Adafruit_BMP280 bmp;                                                            
09 extern uint8_t MediumFontRus[];   
10 extern uint8_t SmallFontRus[];
11 String str1="";
12 #define PERIOD 60000
13 uint32_t timer = 0;                       
14                                                              
15 void setup(){                                             
16     myOLED.begin();
17     myOLED.setFont(MediumFontRus);                                         
18     time.begin();
19     bmp.begin();
20                                             
21                                                        
22   bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
23                   Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
24                   Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
25                   Adafruit_BMP280::FILTER_X16,      /* Filtering. */
26                   Adafruit_BMP280::STANDBY_MS_500);
27                   }
28                                                                                
29 void loop(){
30                                                 
31 myOLED.print(time.gettime("H:i:s"), OLED_C, 1);
32 str1="";
33 str1=str1+"Темп:";
34 str1=str1+ bmp.readTemperature();
35 myOLED.print(str1, OLED_C, 4);
36  
37 //Освещение
38 if((time.Hours==7 && time.minutes==0 && time.seconds==0) || (time.Hours==22 && time.minutes==0  && time.seconds==0))
39 {pinMode(PIN_RELAY_2,HIGH);}
40  
41 if (millis() - timer >= PERIOD) {
42 timer = millis();
43 pinMode(PIN_RELAY_2,LOW);}

 

301sem
Offline
Зарегистрирован: 14.01.2021

Странно что это вставилось

b707
Offline
Зарегистрирован: 26.05.2017

301sem пишет:

Вот весь код:

Код бредовый.

Чувствуется. что учебник ты даже не пробовал читать.

Для начала исправь ошибки. о которых тебе сказали в #4

b707
Offline
Зарегистрирован: 26.05.2017

Kakmyc пишет:
anatoli_nik пишет:

Если мне память не изменяет, есть такая фича у АВР при чтении регистра PINxx настроенного на выход порта, бит регистра PORTxx инвертируется.

И каким местом это прикрутить к вопросу ТС'а ?

это просто Толя похвастал своими знаниями :) Сейчас опять начнет верещать, что его "правильные ответы зажимают тролли"

Upper
Offline
Зарегистрирован: 23.06.2020

Ответ конечно не правильный. Но прикручен он по месту, ответом к #12 

301sem
Offline
Зарегистрирован: 14.01.2021

Весь код бред? По примерам в интернете делал с токовых сайтов

b707
Offline
Зарегистрирован: 26.05.2017

301sem пишет:

Весь код бред? По примерам в интернете делал с токовых сайтов

тебе что-то непонятно в #4? - а если понятно. почему не исправляешь?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

301sem пишет:

Весь код бред? По примерам в интернете делал с токовых сайтов

А почему тогда вопросы здесь задаёте, а не токовых сайтах? (что это за сайты такие, кстати?)

301sem
Offline
Зарегистрирован: 14.01.2021

Всех благодарю за отзывчивость! Особенно товарища v258

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Суть ошибок-то хоть понятна?

301sem
Offline
Зарегистрирован: 14.01.2021

Да, ошибку понял. Все работает как надо. Ещё раз спасибо!

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

301sem пишет:

Да, ошибку понял. Все работает как надо. Ещё раз спасибо!

Тут отлаживаешь программу, отлаживаешь, а людей ТАКОЕ как надо работает! Вселенская несправедливость или магия?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ЕвгенийП пишет:

301sem пишет:

Весь код бред? По примерам в интернете делал с токовых сайтов

А почему тогда вопросы здесь задаёте, а не токовых сайтах? (что это за сайты такие, кстати?)

вроде зрелый мужчина, а сайтов где ..."стучит горячим током переполненный сосуд" не знаете )))

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

mykaida пишет:

Тут отлаживаешь программу, отлаживаешь, а людей ТАКОЕ как надо работает! 

Может не "работает как надо", а "надо, как работает"? Это две больших принципиальных разницы.

Вообще, конечно, меня поражает и восхищает целеустремленность людей, которые тратят недели на тестирование говнопримеров с разных говносайтов и наслаждаются потоками фекалий в свой адрес на профильных (и не очень) форумах. Естественно у них не хватает времени осилить брошюрку по С++ для чайников в 200 страниц. Просто поразительная самоотверженность. А может мазохизм?