Управление котельной

alexnet135
Offline
Зарегистрирован: 08.02.2016



Помогите со скетчем пож. набросал алгоритм управления клапанов с защитой от дребезга вот что вышло:

// подключаем библиотеку
 #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е все работает отлично. У мена ардуино мега.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Строки 59-70 как-то противоречат строкам 89-100. Вас это не смущает?

alexnet135
Offline
Зарегистрирован: 08.02.2016

Без этого все реле активны и не управляются. Это включаются подтягивающие резисторы.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

О, господи, Вы их таким образом к питанию привязываете? ну, ладно, Господь с ним. Проще было сразу в строках 59-70 вместо INPUT написать INPUT_PULLUP. Тогда строки  89-100 были бы не нужны.

А по сути. Вы уверены, что дважды читать состояние кнопки правильно? Я не знаю как работает Ваш bouncer, потому спрашиваю.

Вы ведь читаете все кнопки в строка 102-171, а поотом читаете их ещё раз в строках 176 - 180. Но во второй раз Вы перед чтением уже не делаете update(). Это правильно?

 

alexnet135
Offline
Зарегистрирован: 08.02.2016

Эти пины должны включаться если хоть один из пинов стал активен. Другого ничего не придумал поскольку не силен в програмировании.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы мой вопрос про 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() на btn1bouncer2.read() на btn2bouncer3.read() на btn3,  и так далее. Всё по идее должно нормально заработать.

 

alexnet135
Offline
Зарегистрирован: 08.02.2016

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

alexnet135
Offline
Зарегистрирован: 08.02.2016

и тд. ошибка при проверке

alexnet135
Offline
Зарегистрирован: 08.02.2016

Это он на 177 и 180 строку ругается

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

alexnet135 пишет:
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

ну, читайте чего пишет-то! Я Вам как сказал написать? 

bool ...

а Вы зачем-то написали 

dbool ...

исправьте и будьте внимательнее.

alexnet135
Offline
Зарегистрирован: 08.02.2016

Извеняюсь у себя ошибку при исправлении нашол сей час на ардуинке проверю

alexnet135
Offline
Зарегистрирован: 08.02.2016

нет  пины кроме Led 12 и 13 светятся при замыкании соотв вывода. по задумке они должны включаться если с 1 по 11 любой Led станет активным

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

По тому коду, что я вижу, с 1 по 11 должны загораться по одному прри нажатии соответвующей кнопки. А 12 и 13 должны загораться оба вместе, если хоть одна из кнопок 1-11 нажата.

Надеюсь, оно так и работает?

Если надо что-то другое, то надо и писать по-другому.

alexnet135
Offline
Зарегистрирован: 08.02.2016

По коду должно в протеусе (виртуал) работает а на яву нет 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Значит смотрите, что и как подключили

Romanoff
Offline
Зарегистрирован: 29.09.2015

А почему бы не применить if конструкцию? А там уже задать условие Если любой пин активен то будет так иначе вот так