Управление котельной
- Войдите на сайт для отправки комментариев
Ср, 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 конструкцию? А там уже задать условие Если любой пин активен то будет так иначе вот так