Официальный сайт компании Arduino по адресу arduino.cc
Управление котельной
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Ср, 10/02/2016 - 16:14
Помогите со скетчем пож. набросал алгоритм управления клапанов с защитой от дребезга вот что вышло: // подключаем библиотеку #include <Bounce.h> #define BUTTON1 2 #define BUTTON2 3 #define BUTTON3 4 #define BUTTON4 5 #define BUTTON5 6 #define BUTTON6 7 #define BUTTON7 8 #define BUTTON8 9 #define BUTTON9 10 #define BUTTON10 11 #define BUTTON11 12 #define BUTTON12 13 #define LED1 22 #define LED2 49 #define LED3 47 #define LED4 45 #define LED5 43 #define LED6 26 #define LED7 41 #define LED8 28 #define LED9 32 #define LED10 30 #define LED11 39 #define LED12 37 #define LED13 35 // создаем объект для чтения кнопки без дребезга Bounce bouncer1 = Bounce( BUTTON1,5000 ); // создаем объект для чтения кнопки без дребезга Bounce bouncer2 = Bounce( BUTTON2,5000 ); // создаем объект для чтения кнопки без дребезга Bounce bouncer3 = Bounce( BUTTON3,5000 ); // создаем объект для чтения кнопки без дребезга Bounce bouncer4 = Bounce( BUTTON4,5000 ); // создаем объект для чтения кнопки без дребезга Bounce bouncer5 = Bounce( BUTTON5,5000 ); // создаем объект для чтения кнопки без дребезга Bounce bouncer6 = Bounce( BUTTON6,5000 ); // создаем объект для чтения кнопки без дребезга Bounce bouncer7 = Bounce( BUTTON7,5000 ); // создаем объект для чтения кнопки без дребезга Bounce bouncer8 = Bounce( BUTTON8,5000 ); // создаем объект для чтения кнопки без дребезга Bounce bouncer9 = Bounce( BUTTON9,5000 ); // создаем объект для чтения кнопки без дребезга Bounce bouncer10 = Bounce( BUTTON10,5000 ); // создаем объект для чтения кнопки без дребезга Bounce bouncer11 = Bounce( BUTTON11,5000 ); // создаем объект для чтения кнопки без дребезга Bounce bouncer12 = Bounce( BUTTON12,5000 ); void setup() { pinMode(BUTTON1,INPUT); pinMode(BUTTON2,INPUT); pinMode(BUTTON3,INPUT); pinMode(BUTTON4,INPUT); pinMode(BUTTON5,INPUT); pinMode(BUTTON6,INPUT); pinMode(BUTTON7,INPUT); pinMode(BUTTON8,INPUT); pinMode(BUTTON9,INPUT); pinMode(BUTTON10,INPUT); pinMode(BUTTON11,INPUT); pinMode(BUTTON12,INPUT); pinMode(LED1,OUTPUT); pinMode(LED2,OUTPUT); pinMode(LED3,OUTPUT); pinMode(LED4,OUTPUT); pinMode(LED5,OUTPUT); pinMode(LED6,OUTPUT); pinMode(LED7,OUTPUT); pinMode(LED8,OUTPUT); pinMode(LED9,OUTPUT); pinMode(LED10,OUTPUT); pinMode(LED11,OUTPUT); pinMode(LED12,OUTPUT); pinMode(LED13,OUTPUT); } void loop() { digitalWrite(BUTTON1,HIGH); digitalWrite(BUTTON2,HIGH); digitalWrite(BUTTON3,HIGH); digitalWrite(BUTTON4,HIGH); digitalWrite(BUTTON5,HIGH); digitalWrite(BUTTON6,HIGH); digitalWrite(BUTTON7,HIGH); digitalWrite(BUTTON8,HIGH); digitalWrite(BUTTON9,HIGH); digitalWrite(BUTTON10,HIGH); digitalWrite(BUTTON11,HIGH); digitalWrite(BUTTON12,HIGH); // обновляем состояние кнопки коридор bouncer1.update ( ); // пишем на ножку светодиода состояние кнопки коридор digitalWrite(LED1, bouncer1.read()); // обновляем состояние кнопки парилка bouncer2.update ( ); // пишем на ножку светодиода состояние кнопки парилка digitalWrite(LED2, bouncer2.read()); // обновляем состояние кнопки зал bouncer3.update ( ); // пишем на ножку светодиода состояние кнопки зал digitalWrite(LED3, bouncer3.read()); // обновляем состояние кнопки дет спальн bouncer4.update ( ); // пишем на ножку светодиода состояние кнопки дет спальн digitalWrite(LED4, bouncer4.read()); // обновляем состояние кнопки спална т пола bouncer5.update ( ); // пишем на ножку светодиода состояние кнопки спална т пола digitalWrite(LED5, bouncer5.read()); // обновляем состояние кнопки спалная т помещ bouncer6.update ( ); // пишем на ножку светодиода состояние кнопки спална т помещ digitalWrite(LED6, bouncer6.read()); // обновляем состояние кнопки кухня пол bouncer7.update ( ); // пишем на ножку светодиода состояние кнопки кухня пол digitalWrite(LED7, bouncer7.read()); // обновляем состояние кнопки кухня помещ bouncer8.update ( ); // пишем на ножку светодиода состояние кнопки кухня помещ digitalWrite(LED8, bouncer8.read()); // обновляем состояние кнопки ванная пол bouncer9.update ( ); // пишем на ножку светодиода состояние кнопки ванная помещ digitalWrite(LED9, bouncer9.read()); // обновляем состояние кнопки ванная помещ bouncer10.update ( ); // пишем на ножку светодиода состояние кнопки ванная помещ digitalWrite(LED10, bouncer10.read()); // обновляем состояние кнопки bouncer11.update ( ); // пишем на ножку светодиода состояние кнопки digitalWrite(LED11, bouncer11.read()); // включаем насос digitalWrite(LED12, bouncer1.read() or bouncer2.read() or bouncer3.read() or bouncer4.read() or bouncer5.read() or bouncer6.read() or bouncer7.read() or bouncer8.read() or bouncer9.read() or bouncer10.read() or bouncer11.read() ); // включаем котёл digitalWrite(LED13, bouncer1.read() or bouncer2.read() or bouncer3.read() or bouncer4.read() or bouncer5.read() or bouncer6.read() or bouncer7.read() or bouncer8.read() or bouncer9.read() or bouncer10.read() or bouncer11.read() ); }
Все кнопки отрабатывают хорошо кроме LED 12 и LED13 не хотят работать хотя на ISIS в Proteusе все работает отлично. У мена ардуино мега.
Строки 59-70 как-то противоречат строкам 89-100. Вас это не смущает?
Без этого все реле активны и не управляются. Это включаются подтягивающие резисторы.
О, господи, Вы их таким образом к питанию привязываете? ну, ладно, Господь с ним. Проще было сразу в строках 59-70 вместо INPUT написать INPUT_PULLUP. Тогда строки 89-100 были бы не нужны.
А по сути. Вы уверены, что дважды читать состояние кнопки правильно? Я не знаю как работает Ваш bouncer, потому спрашиваю.
Вы ведь читаете все кнопки в строка 102-171, а поотом читаете их ещё раз в строках 176 - 180. Но во второй раз Вы перед чтением уже не делаете update(). Это правильно?
Эти пины должны включаться если хоть один из пинов стал активен. Другого ничего не придумал поскольку не силен в програмировании.
Вы мой вопрос про update() поняли? Я просто не знаю как там всё работает, но подозрительно, что в одном месте Вы вызываете update(), а в другом нет. Да и дважды читать кнопку - некрасиво.
Давайте ка знаете как сделаем?
Вместо строки 106
digitalWrite(LED1, bouncer1.read());
напишите
bool btn1 = bouncer1.read();
digitalWrite(LED1, btn1);
вместо строки 113
digitalWrite(LED2, bouncer2.read());
напишите
bool btn2 = bouncer2.read();
digitalWrite(LED2, btn2);
и точно также со всеми строками 120, 126, 132, 138, 144, 150, 156, 164 и 171
а в строках 177 и 180 замение bouncer1.read() на btn1, bouncer2.read() на btn2, bouncer3.read() на btn3, и так далее. Всё по идее должно нормально заработать.
rabochi_na_neskolko_knopok_555.ino: In function 'void loop()':
rabochi_na_neskolko_knopok_555:177: error: 'dbool' was not declared in this scope
rabochi_na_neskolko_knopok_555:177: error: expected ';' before 'btn11'
rabochi_na_neskolko_knopok_555:178: error: 'btn11' was not declared in this scope
и тд. ошибка при проверке
Это он на 177 и 180 строку ругается
ну, читайте чего пишет-то! Я Вам как сказал написать?
bool ...
а Вы зачем-то написали
dbool ...
исправьте и будьте внимательнее.
Извеняюсь у себя ошибку при исправлении нашол сей час на ардуинке проверю
нет пины кроме Led 12 и 13 светятся при замыкании соотв вывода. по задумке они должны включаться если с 1 по 11 любой Led станет активным
По тому коду, что я вижу, с 1 по 11 должны загораться по одному прри нажатии соответвующей кнопки. А 12 и 13 должны загораться оба вместе, если хоть одна из кнопок 1-11 нажата.
Надеюсь, оно так и работает?
Если надо что-то другое, то надо и писать по-другому.
По коду должно в протеусе (виртуал) работает а на яву нет
Значит смотрите, что и как подключили
А почему бы не применить if конструкцию? А там уже задать условие Если любой пин активен то будет так иначе вот так