Диммер
- Войдите на сайт для отправки комментариев
Пт, 23/04/2021 - 22:57
Добрый вечер. Нужна помощь в написании кода. Программированием на плюсах занимался лет 8 назад.
Может кто поможет начать программу. У меня ардуино уно, к ней подключен AC Dimmer на порты: zeroPin-2 dinPin-3, также к нему подлючено релереального времени DS3231 (оно уже запраграммировано на реальное время, библиотека <DS3231.h>).
Смысл программы: в определенное время (например с 1:00 до 2:00) диммер должен регулировать мощность от 10 до 20 процентов поднимая один процент каждые 6 минут.
Я думал писать через swith и case, но немного не знаю как присвоить переменной время с реле реального времени, чтобы потом это описать через if в case.
За ранее спасибо!!!
"За ранее" спасибо!!!
Модуль реле ds3231, разве он называется не так?
За ранее спасибо!!!
А за "позднее" что будет?
Ничего)))) просто описался, пробел поставил)))
Модуль реле ds3231, разве он называется не так?
Да как хош, так и называй! Как гриццо: "Для Вас - везде!" ;))
Модуль реле ds3231, разве он называется не так?
Так я у Вас спросил, чё за зверь такой. Хоть бы ссылку дали, что ли.
...Я думал писать через swith и case, но немного не знаю как присвоить переменной время с реле реального времени, чтобы потом это описать через if в case.
Ищи преобразование unix time. Оно спасёт.
Модуль реле ds3231, разве он называется не так?
Так я у Вас спросил, чё за зверь такой. Хоть бы ссылку дали, что ли.
166,40 руб. -3% | Модуль памяти DS3231 AT24C32 IIC Precision RTC в режиме реального времени для Arduino, 1 шт., новый оригинальный
Так там же нет никакого реле? Это просто часы с дополнительной памятью. Реле-то здесь каким боком?
Так там же нет никакого реле? Это просто часы с дополнительной памятью. Реле-то здесь каким боком?
оно так называется)))
Denisblr,
Все, что нужно для приручения DS3231:
https://github.com/adafruit/RTClib
Смотри класс RTC_DS3231
оно так называется)))
Так там же нет никакого реле? Это просто часы с дополнительной памятью. Реле-то здесь каким боком?
оно так называется)))
кем? не дошло, что над этим и глумимся?
Denisblr,
Все, что нужно для приручения DS3231:
https://github.com/adafruit/RTClib
Смотри класс RTC_DS3231
не порть пятницу!!!
не порть пятницу!!!
Сорян за ранее)))
оно уже запраграммировано на реальное время, библиотека <DS3231.h>).
Откуда оно взяло реальное время? Ардуино само в интернет не умеет, GPS не озвучен.. Руками вбиваете?
Можно и не руками, варианты есть и без GPS.
Добрый вечер. Нужна помощь в написании кода. Программированием на плюсах занимался лет 8 назад.
Может кто поможет начать программу. У меня ардуино уно, к ней подключен AC Dimmer на порты: zeroPin-2 dinPin-3, также к нему подлючено релереального времени DS3231 (оно уже запраграммировано на реальное время, библиотека <DS3231.h>).
Смысл программы: в определенное время (например с 1:00 до 2:00) диммер должен регулировать мощность от 10 до 20 процентов поднимая один процент каждые 6 минут.
Я думал писать через swith и case, но немного не знаю как присвоить переменной время с реле реального времени, чтобы потом это описать через if в case.
За ранее спасибо!!!
Так а какие проблемы?
Начните с регулировки яркости ламы или с включения нагрузки в определенное время, потом объедините обе части.
Так там же нет никакого реле? Это просто часы с дополнительной памятью. Реле-то здесь каким боком?
оно так называется)))
Добрый вечер. Нужна помощь в написании кода. Программированием на плюсах занимался лет 8 назад.
Может кто поможет начать программу. У меня ардуино уно, к ней подключен AC Dimmer на порты: zeroPin-2 dinPin-3, также к нему подлючено релереального времени DS3231 (оно уже запраграммировано на реальное время, библиотека <DS3231.h>).
Смысл программы: в определенное время (например с 1:00 до 2:00) диммер должен регулировать мощность от 10 до 20 процентов поднимая один процент каждые 6 минут.
Я думал писать через swith и case, но немного не знаю как присвоить переменной время с реле реального времени, чтобы потом это описать через if в case.
За ранее спасибо!!!
Так а какие проблемы?
Начните с регулировки яркости ламы или с включения нагрузки в определенное время, потом объедините обе части.
приведите пожалуйста пример кода включения в определённое время
1. Переводите часы, минуты, секунды необходимого времени срабатывания в секунды.
2. Раз в секунду считываете из часов реального времени текущее время.
3. Переводите текущее время в секунды.
4. Сравниваете текущее время в секундах и с временем уставки в секундах. Если больше или равно то выполняем что хотели.
Помним о количестве секунд в сутках и правильно выбираем размер переменных, что бы не было переполнения.
Можно и не руками, варианты есть и без GPS.
Как без интернета, GPS и не руками?
_
приведите пожалуйста пример кода включения в определённое время
???
Дата и время компиляции:
Ну и нужно проверку сделать, что именно это время уже загрузили в RTC, чтобы при каждом старте не устанавливалось.
В часах установлена батарейка, время каждый раз я неустанавливаю. Примером скетча с библиотеки DS3231 я установил время и оно не обнуляется при отключении питания.
В часах установлена батарейка, время каждый раз я неустанавливаю. Примером скетча с библиотеки DS3231 я установил время и оно не обнуляется при отключении питания.
Ну хотя-бы обрывок программы, а лучше всю. С указанием проблемы. Иначе мы так и будем над Вами глумится.
Я почти все сделал. Программа будет чуть позже, когда я ее полностью допилю до идеала
оно так называется)))
Нет, оно так не называется.
когда я ее полностью допилю до идеала
Наши советы Вам будут не нужны. Зачем сюда вылезли? Засветиться?
Оценил -> Денис.
#include <CyberLib.h> // шустрая библиотека для таймера #include <DS3231.h> #include <TimeLib.h> #include <Wire.h> #include "RTClib.h" #include <RBDdimmer.h> #define outputPin 3 #define zerocross 2 RTC_DS3231 rtc; // Инициализация DS3231 uint32_t RTime0, RTime1; char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; dimmerLamp dimmer(outputPin); void setup() { Serial.begin(9600); rtc.begin(); // Инициализировать rtc dimmer.begin(NORMAL_MODE, ON); //dimmer initialisation: name.begin(MODE, STATE) Serial.println("Dimmer Program is starting..."); Serial.println("Set value"); Serial.print("Temperature: "); Serial.print(rtc.getTemperature()); Serial.println(" C"); } void loop() { /* Serial.print(rtc.getDOWStr()); // Отправляем день-неделя Serial.print(" "); Serial.print(rtc.getDateStr()); // Отправляем дату Serial.print(" -- "); Serial.println(rtc.getTimeStr()); // Отправляем время Serial.println(rtc.getTimeStr("d-m-Y, H:i:s, D")); // выводим время*/ DateTime now = rtc.now(); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println(); Serial.print(now.day(), DEC); Serial.print('.'); Serial.print(now.month(), DEC); Serial.print('.'); Serial.print(now.year(), DEC); Serial.print(" ("); Serial.print(daysOfTheWeek[now.dayOfTheWeek()]); Serial.print(") "); /*DateTime noch (now - TimeSpan(0, 11, 30, 5)); DateTime future (now + TimeSpan(0, 12, 30, 6)); // calculate a date which is 7 days, 12 hours, 30 minutes, 6 seconds into the future*/ /*Serial.print(" now + 0d + 12h + 30m + 6s: "); Serial.print(future.year(), DEC); Serial.print('/'); Serial.print(future.month(), DEC); Serial.print('/'); Serial.print(future.day(), DEC); Serial.print(' '); Serial.print(future.hour(), DEC); Serial.print(':'); Serial.print(future.minute(), DEC); Serial.print(':'); Serial.print(future.second(), DEC); Serial.println();*/ Serial.println(); delay(3000); int a = now.hour(); int b = now.minute(); int c = now.second(); Serial.println(); Serial.print(a); Serial.print(":"); Serial.print(b); Serial.print(":"); Serial.print(c); Serial.println(); int Rtime = a; Serial.println("Присвоено значение:"); Serial.print(Rtime); switch (Rtime) { case 0: Serial.println("Время 0 часов"); break; case 1: Serial.println("Время 1 час"); break; case 2: Serial.println("Время 2 часа"); case 3: Serial.println("Время 3 часа"); break; case 4: Serial.println("Время 4 часа"); break; case 5: Serial.println("Время 5 часов"); break; case 6: Serial.println("Время 6 часов"); break; case 7: Serial.println("Время 7 часов"); break; case 8: Serial.println("Время 8 часов"); break; case 9: Serial.println("Время 9 часов"); break; case 10: Serial.println("Время 10 часов"); break; case 11: Serial.println("Время 11 часов"); break; case 12: Serial.println("Время 12 часов"); break; case 13: Serial.println("Время 13 часов"); break; case 14: Serial.println("Время 14 часов"); break; case 15: Serial.println("Время 15 часов"); break; case 16: Serial.println("Время 16 часов"); break; case 17: break; Serial.println("Время 17 часов"); case 18: Serial.println("Время 18 часов"); delay(10000); break; case 19: Serial.println("Время 19 часов"); plus(); break; case 20: Serial.println("Время 20 часов"); break; case 21: Serial.println("Время 21 час"); break; case 22: Serial.println("Время 22 час"); break; case 23: Serial.println("Время 23 час"); break; } } void plus() { int power; for (power=1;power <=100;++power); { dimmer.setPower(power); Serial.println(""); Serial.print(dimmer.getPower()); delay(10000); return 0; } }У меня не получается сделать так, чтобы в 19:00 он включил 1% и в течении часа постепенно поднимал его до 100. Он постоянно выходит из case и начинает выполнять все заново, а цикл FOR не проходит.
Serial.print очень много, для того чтобы я через мониторинг порта мог отслеживать какие он значения выдаёт.
только что попробывал выкинуть в отдельную функцию, но все равно одно и тоже
P.S. этот код собран из нескольких, когда он будет доделан, половина будет убрана
Не надо case. Всё делается через флаги. Сначала проверяется время и если пора поднимать - выставляется флаг пора поднимать. По этому флагу время больше не проверяем, а в лупе поднимаем потихоньку мощность на процент в 6 минут по аналогии с блиньк без делея (есть тема). Как подняли до 20% флаг снимаем. Если потом надо что то делать - выставляем следующий флаг. И так далее.
Вы что издеваетесь? Вставьте код нормально, почему у Вас символы заменены?
Сорри, исправил
А это чего за херня? Типа это работает????
case 0: Serial.println("Время 0 часов"); break; case 1: Serial.println("Время 1 час"); break; case 2: Serial.println("Время 2 часа"); case 3: Serial.println("Время 3 часа"); break; case 4: Serial.println("Время 4 часа"); break; case 5: Serial.println("Время 5 часов"); break; case 6: Serial.println("Время 6 часов"); break; case 7: Serial.println("Время 7 часов"); break; case 8: Serial.println("Время 8 часов"); break; case 9: Serial.println("Время 9 часов"); break; case 10: Serial.println("Время 10 часов"); break; case 11: Serial.println("Время 11 часов"); break; case 12: Serial.println("Время 12 часов"); break; case 13: Serial.println("Время 13 часов"); break;Не надо case. Всё делается через флаги. Сначала проверяется время и если пора поднимать - выставляется флаг пора поднимать. По этому флагу время больше не проверяем, а в лупе поднимаем потихоньку мощность на процент в 6 минут по аналогии с блиньк без делея (есть тема). Как подняли до 20% флаг снимаем. Если потом надо что то делать - выставляем следующий флаг. И так далее.
а не подскажите как это реализовать?
А это чего за херня? Типа это работает????
case 0: Serial.println("Время 0 часов"); break; case 1: Serial.println("Время 1 час"); break; case 2: Serial.println("Время 2 часа"); case 3: Serial.println("Время 3 часа"); break; case 4: Serial.println("Время 4 часа"); break; case 5: Serial.println("Время 5 часов"); break; case 6: Serial.println("Время 6 часов"); break; case 7: Serial.println("Время 7 часов"); break; case 8: Serial.println("Время 8 часов"); break; case 9: Serial.println("Время 9 часов"); break; case 10: Serial.println("Время 10 часов"); break; case 11: Serial.println("Время 11 часов"); break; case 12: Serial.println("Время 12 часов"); break; case 13: Serial.println("Время 13 часов"); break;Представьте, да.
Представьте, да.
Денис, а Вы пизди-те. Именно это работать не может. Скорее всего Вы пи... и в остальном. Дениска - давай не прыскай!
А что я непонятного написал? Флаг - просто булева переменная - поднят true, опущен - false.
http://arduino.ru/Reference/BooleanVariables
Наверху над темой есть строчка поиска. Наберите там слово флаг и посмотрите как народ их использует. Вот примеры оттуда прямо только что вытащенные
http://arduino.ru/forum/proekty/arduino-knopka-s-samovozratom-rele
А здесь добрый человек показывает как правильно в лупе события вызывать через интервалы времени, которые можно через if с поднятым флагом использовать для поднятия мощности.
http://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/zamenit-delay-...
я не п...., я написал что именно у меня не работает. может и for неправильно написан. у меня не работает цикл, но в case он заходит.
Ну так попробуйте после строки с for точку с запятой убрать.
Ну так попробуйте после строки с for точку с запятой убрать.
Спасибо, пошёл выполняться цикл
Чтобы такого не случалось, лучше писать в стиле Кернигена и Ритчи:
if ( true ) { ...... }if ( true ) { ...... }Напомнило последнюю фразу из анекдота:
- Лазарь Абрамович, Вы как предпочитаете рыбу фиш кушать: из вилки, или из ложки?
- Да мне всё равно, Хана Иосифовна, мне лишь бы "да".
)))) Ну а как бы вы абстрактный код представили? Я вот так решил, суть как скобки расположить.
Кому интересно, как пока что получилось, и тем кто не верил в работоспособность https://photos.app.goo.gl/bvJXrQq7Qt1x1f956
#include <CyberLib.h> // шустрая библиотека для таймера #include <DS3231.h> #include <TimeLib.h> #include <Wire.h> #include "RTClib.h" #include <RBDdimmer.h> #define outputPin 3 #define zerocross 2 RTC_DS3231 rtc; // Инициализация DS3231 uint32_t RTime0, RTime1; char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; dimmerLamp dimmer(outputPin); Вот что в итоге получилось. Осталось только немного допилить, чтобы проверка времени была каждую минуту и программа если зашла в Case, там же и проверяла время. void setup() { Serial.begin(9600); rtc.begin(); // Инициализировать rtc dimmer.begin(NORMAL_MODE, OFF); //dimmer initialisation: name.begin(MODE, STATE) Serial.println("Dimmer Program is starting..."); Serial.println("Set value"); Serial.print("Temperature: "); Serial.print(rtc.getTemperature()); Serial.println(" C"); } void loop() { /* Serial.print(rtc.getDOWStr()); // Отправляем день-неделя Serial.print(" "); Serial.print(rtc.getDateStr()); // Отправляем дату Serial.print(" -- "); Serial.println(rtc.getTimeStr()); // Отправляем время Serial.println(rtc.getTimeStr("d-m-Y, H:i:s, D")); // выводим время*/ DateTime now = rtc.now(); /*Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println(); Serial.print(now.day(), DEC); Serial.print('.'); Serial.print(now.month(), DEC); Serial.print('.'); Serial.print(now.year(), DEC); Serial.print(" ("); Serial.print(daysOfTheWeek[now.dayOfTheWeek()]); Serial.print(") ");*/ Serial.println(); int a = now.hour(); int b = now.minute(); int c = now.second(); Serial.println(); Serial.print(a); Serial.print(":"); Serial.print(b); Serial.print(":"); Serial.print(c); Serial.println(); int Rtime = a; /*Serial.println("Присвоено значение:"); Serial.println(Rtime);*/ int power; switch (Rtime) { case 0: dimmer.begin(NORMAL_MODE, OFF); Serial.println("Время 0 часов"); dimmer.setPower(0); break; case 1: dimmer.begin(NORMAL_MODE, OFF); Serial.println("Время 1 час"); dimmer.setPower(0); break; case 2: dimmer.begin(NORMAL_MODE, OFF); Serial.println("Время 2 часа"); dimmer.setPower(0); case 3: dimmer.begin(NORMAL_MODE, OFF); Serial.println("Время 3 часа"); dimmer.setPower(0); break; case 4: dimmer.begin(NORMAL_MODE, OFF); Serial.println("Время 4 часа"); dimmer.setPower(0); break; case 5: dimmer.begin(NORMAL_MODE, OFF); Serial.println("Время 5 часов"); dimmer.setPower(0); break; case 6: dimmer.begin(NORMAL_MODE, OFF); Serial.println("Время 6 часов"); dimmer.setPower(0); break; case 7: dimmer.begin(NORMAL_MODE, OFF); Serial.println("Время 7 часов"); dimmer.setPower(0); break; case 8: dimmer.begin(NORMAL_MODE, OFF); Serial.println("Время 8 часов"); dimmer.setPower(0); break; case 9: dimmer.begin(NORMAL_MODE, OFF); Serial.println("Время 9 часов"); dimmer.setPower(0); break; case 10: dimmer.begin(NORMAL_MODE, OFF); Serial.println("Время 10 часов"); dimmer.setPower(0); break; case 11: dimmer.begin(NORMAL_MODE, OFF); Serial.println("Время 11 часов"); dimmer.setPower(0); break; case 12: dimmer.begin(NORMAL_MODE, OFF); Serial.println("Время 12 часов"); dimmer.setPower(0); break; case 13: dimmer.begin(NORMAL_MODE, OFF); Serial.println("Время 13 часов"); dimmer.setPower(0); break; case 14: Serial.println("Время 14 часов"); dimmer.begin(NORMAL_MODE, ON); if (b <= 10) power = 0; if (b <= 20) power = 17; if (b <= 30) power = 34; if (b <= 40) power = 51; if (b <= 50) power = 68; if (b <= 59) power = 84; for (power; power <= 100; power+1,6) { Serial.println(""); dimmer.setPower(power); Serial.print(dimmer.getPower()); delay(60000); } return 0; break; case 15: dimmer.begin(NORMAL_MODE, ON); Serial.println("Время 15 часов"); dimmer.setPower(100); break; case 16: dimmer.begin(NORMAL_MODE, ON); Serial.println("Время 16 часов"); dimmer.setPower(100); break; case 17: dimmer.begin(NORMAL_MODE, ON); Serial.println("Время 17 часов"); dimmer.setPower(100); break; case 18: dimmer.begin(NORMAL_MODE, ON); Serial.println("Время 18 часов"); dimmer.setPower(100); break; case 19: dimmer.begin(NORMAL_MODE, ON); dimmer.setPower(100); Serial.println("Время 19 часов"); break; case 20: dimmer.begin(NORMAL_MODE, ON); Serial.println("Время 20 часов"); dimmer.setPower(100); break; case 21: Serial.println("Время 21 час"); dimmer.begin(NORMAL_MODE, ON); if (b <= 10) power = 100; if (b <= 20 && b >= 11) power = 84; if (b <= 30 && b >= 21) power = 67; if (b <= 40 && b >= 31) power = 50; if (b <= 50 && b >= 41) power = 33; if (b <= 59 && b >= 51) power = 16; for (power; power <= 100; power-1,6) { Serial.println(""); dimmer.setPower(power); Serial.print(dimmer.getPower()); delay(60000); if (power == 0) { break; } } return 0; break; case 22: dimmer.begin(NORMAL_MODE, OFF); Serial.println("Время 22 час"); dimmer.setPower(0); while (a == 23 && b==00) { break; } delay(10000); break; case 23: dimmer.begin(NORMAL_MODE, OFF); dimmer.setPower(0); Serial.println("Время 23 час"); break; } }Осталось только немного допилить, чтобы программа когда зашла в Case, там же и осталась, и там же проверяла время каждую минуту, а не с начала начинала.
Не судите строго, первый опыт с Ардуино.
Осталось только немного допилить, чтобы программа когда зашла в Case, там же и осталась, и там же проверяла время каждую минуту, а не с начала начинала.
Успехов!