15.12.2017, 02:03 | #821 |
Junior Member
Регистрация: 15.12.2017
Сообщений: 2
Вес репутации: 0 |
Здравствуйте! Есть желание сделать двухканальную гирлянду на ардуино на основе двух диммеров. Схему спаял, код залил, все работает. Но можно ли заставить ардуино выдавать на 4 пин цифровой сигнал для управления вторым диммером с несколько отличным наполнением скетча. Или брать вторую Нано и заливать в нее свой скетч и привязывать свой диммер?
int AC_LOAD = 3; int dimming = 128; // Dimming level (0-128) 0 = ON, 128 = OFF void setup() { pinMode(AC_LOAD, OUTPUT);// Set AC Load pin as output attachInterrupt(0, zero_crosss_int, RISING); // Choose the zero cross interrupt # from the table above } // the interrupt function must take no parameters and return nothing void zero_crosss_int() // function to be fired at the zero crossing to dim the light { // Firing angle calculation : 1 full 50Hz wave =1/50=20ms // Every zerocrossing thus: (50Hz)-> 10ms (1/2 Cycle) For 60Hz => 8.33ms // 10ms=10000us // (10000us - 10us) / 128 = 75 (Approx) For 60Hz =>65 int dimtime = (75*dimming); // For 60Hz =>65 delayMicroseconds(dimtime); // Off cycle digitalWrite(AC_LOAD, HIGH); // triac firing delayMicroseconds(10); // triac On propogation delay (for 60Hz use 8.33) digitalWrite(AC_LOAD, LOW); // triac Off } void loop() { for (int i=30; i <= 100; i++){ dimming=i; delay(3); } for (int i=5; i <= 100; i++){ dimming=i; delay(10); } for (int i=30; i <= 100; i++){ dimming=i; delay(3); } for (int i=5; i <= 100; i++){ dimming=i; delay(10); } for (int i=100; i >= 10; i--){ dimming=i; delay(20); } for (int i=20; i <= 100; i++){ dimming=i; delay(30); } for (int i=5; i <= 100; i++){ dimming=i; delay(10);} for (int i=2; i <= 100; i++){ dimming=i; delay(1);} for (int i=2; i <= 100; i++){ dimming=i; delay(2);} for (int i=5; i <= 100; i++){ dimming=i; delay(3);} for (int i=15; i <= 100; i++){ dimming=i; delay(4);} for (int i=25; i <= 100; i++){ dimming=i; delay(5);} for (int i=45; i <= 100; i++){ dimming=i; delay(15);} } |
15.12.2017, 13:44 | #822 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
В шапке пример для работы с 3-мя диммерами
|
23.12.2017, 01:20 | #823 |
Junior Member
Регистрация: 15.12.2017
Сообщений: 2
Вес репутации: 0 |
|
06.02.2018, 01:27 | #824 |
Junior Member
Регистрация: 06.02.2018
Сообщений: 2
Вес репутации: 0 |
Admin, использую ваш код со своим провереным Serial управлением из 5 ANSI символов, первые два - номер канала, 3тий - H или L для прямого выключения, 4и5 - значение яркости.Перевод в цифровые занчения делаю так:
if (Serial.available() > 0) { //если есть доступные данные // считываем байт ///----------функція з димера 16канал/////// //Serial.flush(); er=Serial.read(); er1=Serial.read(); val = Serial.read(); // on/off var port1 = Serial.read(); // read the port port2 = Serial.read(); int p11=(int)er-48; int p22=(int)er1-48; pp=p11*10+p22; chan_num_66=pp; //номер каналу int p1=(int)port1-48; int p2=(int)port2-48; p=p1*10+p2; dim_com =p; // значение яркости chan_num=pp; // номер канала UART_Init(19200); //инициализация порта - отключил, использую Serial.begin/ Если постоянно Arduino шлет в терминал данные, то в ответ я тоже могу посылать. Если остановить передачу из Arduino, то и из терминала данные не доходят вообще либо не то что отправлено. |
06.02.2018, 06:47 | #825 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Сейчас у меня нет диммера, что бы проверить.
Но могу предложить попробовать все таки использовать код из шапки и отправлять 5 байт массивом. Дело в том что прерывания для обработки диммера срабатывают примерно 150 раз в секунду, а Serial.begin очень нагроможденная функция, к тому же скорость передачи у Вас заниженная, и не успевает отработать. Можно так же попробовать при работе serial запретить прерывания. Хотя возможно проблема в другом, как я писал Выше нужно пробовать |
07.02.2018, 03:54 | #826 |
Junior Member
Регистрация: 06.02.2018
Сообщений: 2
Вес репутации: 0 |
Вопрос таки не к коду диммера, как выяснилось.
|
07.03.2018, 10:39 | #827 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Регулировки диммера осуществряется энкодером https://duino.ru/product_info.php/in...ti-dimmer.html
Нажатием на энкодер можно вкл и выкл диммер, при этом диммер сохраняет уровень яркости и состояние выключателя. Если обесточить, то диммер прочитает последние состояние которое было до выключения Код не проверялся на реальном устройстве, так что прошу отписаться после проверки PHP код:
|
10.03.2018, 18:32 | #828 |
Junior Member
Регистрация: 10.03.2018
Сообщений: 1
Вес репутации: 0 |
Доброго времени суток. А возможно ли как то изменить код программы из шапки так, чтобы через один симистор диммировать верхнюю и нижнюю полу волны синусоиды по отдельности? И что для этого требуется изменить в коде программы? Допустим, прописываем в программе такую команду, после которой симистор начинает пропускать только верхнюю полу волну.
|
11.03.2018, 23:35 | #829 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
А какой в этом смысл? Кому это будет нужно?
|
16.03.2018, 07:53 | #830 |
Junior Member
Регистрация: 16.03.2018
Сообщений: 8
Вес репутации: 0 |
|
Здесь присутствуют: 77 (пользователей: 0 , гостей: 77) | |
|
|