Вопрос по таймеру
- Войдите на сайт для отправки комментариев
Чт, 14/01/2021 - 01:22
Всем привет.
Пытаюсь сделать освещение по времени. Нужно чтобы каждый день в 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.
Заранее благодарю. Гневных комментаторов прошу проходить мимо!
а где вопрос?
Вопрос как сделать так, чтобы работало. Потому что этот вариант не работает
Вопрос как сделать так, чтобы работало. Потому что этот вариант не работает
еще бы, бред полный.
Для начала выложите код полностью. Этот не то что не работает - а даже не компилируется
Строку 5 перенесите перед второй строкой.
И вместо pinMode() должно быть divitalWrite()
pinMode(PIN_RELAY_2, OUTPUT) должно быть в сетапе
Ох ёмоё, думал этого достаточно. Компьютер уже выключил. Завтра скинул полностью. Благодарю, что отозвались!
в первую очередь под шляпой должны быть мозги...
Ох ёмоё, думал этого достаточно.
Вполне достаточно чтобы сделать вывод о ваших способностях. Но не достаточно. чтобы указать на все ошибки.
в первую очередь под шляпой должны быть мозги...
Про мозги тут пока не ясно, ясно только, что нифига не знает))
1. Каждую секунду считывай время.
2. Переводи его в линейный формат (Часы * 60 + Минуты)
3. Сравнивай на точное равенство с 7*60 и 22*60
4. Если совпало - включай нагрузку, нет - выключай. Через минуту выключится отоматически
В строке 4 Вы используете переменную timer, а где Вы назначаете ей значение?
А вообще - изврат. Почему не сделать как в строке 1?
Включаем логику. Что вы делаете в момент когда условие подходит ? Включаете реле.
Что нужно сделать дальше ? Выключить через минуту.
Т.е. следующее условие должно быть: если реле включено
Что делаем : то через минуту его выключаем.
В коде этого нет совсем.
Учитесь на словах алгоритм составлять, а потом уже кодом описывать
Совсем мальчонке голову запудрили. Вроде указываете на ошибки и сами не мало делаете. Так не пойдёт.
Как считывая состояние пина изменить его?))
Если мне память не изменяет, есть такая фича у АВР при чтении регистра PINxx настроенного на выход порта, бит регистра PORTxx инвертируется.
Если мне память не изменяет, есть такая фича у АВР при чтении регистра PINxx настроенного на выход порта, бит регистра PORTxx инвертируется.
И каким местом это прикрутить к вопросу ТС'а ?
Вот весь код:
Вот весь код:
Отлично!!! Выкини его нахрен.
#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);}
Странно что это вставилось
Вот весь код:
Код бредовый.
Чувствуется. что учебник ты даже не пробовал читать.
Для начала исправь ошибки. о которых тебе сказали в #4
Если мне память не изменяет, есть такая фича у АВР при чтении регистра PINxx настроенного на выход порта, бит регистра PORTxx инвертируется.
это просто Толя похвастал своими знаниями :) Сейчас опять начнет верещать, что его "правильные ответы зажимают тролли"
Ответ конечно не правильный. Но прикручен он по месту, ответом к #12
Весь код бред? По примерам в интернете делал с токовых сайтов
Весь код бред? По примерам в интернете делал с токовых сайтов
тебе что-то непонятно в #4? - а если понятно. почему не исправляешь?
Весь код бред? По примерам в интернете делал с токовых сайтов
А почему тогда вопросы здесь задаёте, а не токовых сайтах? (что это за сайты такие, кстати?)
Всех благодарю за отзывчивость! Особенно товарища v258
Суть ошибок-то хоть понятна?
Да, ошибку понял. Все работает как надо. Ещё раз спасибо!
Да, ошибку понял. Все работает как надо. Ещё раз спасибо!
Тут отлаживаешь программу, отлаживаешь, а людей ТАКОЕ как надо работает! Вселенская несправедливость или магия?
Весь код бред? По примерам в интернете делал с токовых сайтов
А почему тогда вопросы здесь задаёте, а не токовых сайтах? (что это за сайты такие, кстати?)
вроде зрелый мужчина, а сайтов где ..."стучит горячим током переполненный сосуд" не знаете )))
Тут отлаживаешь программу, отлаживаешь, а людей ТАКОЕ как надо работает!
Может не "работает как надо", а "надо, как работает"? Это две больших принципиальных разницы.
Вообще, конечно, меня поражает и восхищает целеустремленность людей, которые тратят недели на тестирование говнопримеров с разных говносайтов и наслаждаются потоками фекалий в свой адрес на профильных (и не очень) форумах. Естественно у них не хватает времени осилить брошюрку по С++ для чайников в 200 страниц. Просто поразительная самоотверженность. А может мазохизм?