Реле.

Lucky_Wolf
Offline
Зарегистрирован: 12.07.2016

Уважаемые гуру. Помогите с реализацией. В программировании только начинающий. Имеется 3 реле и 4 кнопки.

int Relay1 = 7;
int Relay2 = 6;
int Relay3 = 5;


int stateRelay1 = LOW;
int stateRelay2 = LOW;
int stateRelay3 = LOW;


int pushButton18 = 9;
int pushButton19 = 10;
int pushButton21 = 12;
int pushButton22 = 13;

void setup()  {

pinMode(pushButton18, INPUT);
pinMode(pushButton19, INPUT);
pinMode(pushButton21, INPUT);
pinMode(pushButton22, INPUT);

pinMode(Relay1, OUTPUT);
pinMode(Relay2, OUTPUT);
pinMode(Relay3, OUTPUT);
pinMode(Relay4, OUTPUT);

}

void loop()
{
int buttonState18 = digitalRead(pushButton18); 
int buttonState19 = digitalRead(pushButton19); 
int buttonState21 = digitalRead(pushButton21); 
int buttonState22 = digitalRead(pushButton22);

//лево - реле1
    if(buttonState22 == LOW) {
    digitalWrite(Relay1, HIGH);
    }
  else {
    digitalWrite(Relay1, LOW);
    }
//право - реле2
    if(buttonState19 == LOW) {
    digitalWrite(Relay2, HIGH);
    } 
   else {
    digitalWrite(Relay2, LOW);
    }
//лево, быстро - реле1 и реле3
  if(buttonState21 == LOW) {
    digitalWrite(Relay3, HIGH);
    digitalWrite(Relay1, HIGH);
    }
   else {
    digitalWrite(Relay3, LOW);
    digitalWrite(Relay1, LOW);
    }
//право, быстро - реле2 и реле3
  if(buttonState18 == LOW) {
    digitalWrite(Relay3, HIGH);
    digitalWrite(Relay2, HIGH);
    }
   else {
    digitalWrite(Relay3, LOW);
    digitalWrite(Relay2, LOW);
    }
} 

При нажатии кнопки "лево" реле1 не срабатывает (светодиод индикации еле загорается)

При нажатии кнопки "право" реле2 не срабатывает (светодиод индикации еле загорается)

При нажатии кнопки "лево, быстро" реле1 срабатывает (светодиод светится) реле3 не срабатывает(светодиод индикации еле загорается)

 

При нажатии кнопки "право, быстро" реле2 и реле3 срабатывают (светодиод светится).

 

Понимаю, что условия срабатывания мешают друг другу. Не знаю, как их разделить грамотно.

Так же проблема ещё в том, что при нажатии "лево, быстро" и одновременно нажатие "право, быстро" срабатывают все реле, чего быть не должно. К реле будет подключен трёхфазный двигатель, и при случайном зажатии двух кнопок разного направления случится хорошее кз.

 

 

Lucky_Wolf
Offline
Зарегистрирован: 12.07.2016

Исключить одновременное нажатие, я уже понял как:

if(buttonState22 == LOW && buttonState19 == HIGH && buttonState21 == HIGH && buttonState18 == HIGH) {
if(buttonState19 == LOW && buttonState22 == HIGH && buttonState21 == HIGH && buttonState18 == HIGH) {
if(buttonState21 == LOW && buttonState19 == HIGH && buttonState22 == HIGH && buttonState18 == HIGH) {
if(buttonState18 == LOW && buttonState19 == HIGH && buttonState21 == HIGH && buttonState22 == HIGH) {

 

Lucky_Wolf
Offline
Зарегистрирован: 12.07.2016

Остальное тоже получилось. Топик можно удалить, или оставить для потомков :)
Реализовано.

if(buttonState22 || buttonState19 || buttonState21 || buttonState18 == LOW){
if(buttonState22 == LOW && buttonState19 == HIGH && buttonState21 == HIGH && buttonState18 == HIGH) {
    digitalWrite(Relay1, HIGH);
    }
if(buttonState19 == LOW && buttonState22 == HIGH && buttonState21 == HIGH && buttonState18 == HIGH) {
    digitalWrite(Relay2, HIGH);
    } 
if(buttonState21 == LOW && buttonState19 == HIGH && buttonState22 == HIGH && buttonState18 == HIGH) {
    digitalWrite(Relay3, HIGH);
    digitalWrite(Relay1, HIGH);
    }
if(buttonState18 == LOW && buttonState19 == HIGH && buttonState21 == HIGH && buttonState22 == HIGH) {
    digitalWrite(Relay3, HIGH);
    digitalWrite(Relay2, HIGH);
    }
}
if(buttonState22 && buttonState19 && buttonState21 && buttonState18 == HIGH){

    digitalWrite(Relay1, LOW);
    digitalWrite(Relay2, LOW);
    digitalWrite(Relay3, LOW);
    }

Реализовано, при нажатии кнопки "лево" - срабатывает реле1, при нажатии кнопки "право" - реле2, при нажатии "лево, быстро" - реле1 и реле3, при нажатии "право, быстро" - реле2 и реле3. Нажатие двух кнопок одновременно исключено.

toxikaciya
Offline
Зарегистрирован: 11.04.2016

Вы хотите управлять фазами посредством реле? Или решили на реле собрать инвертор? Спешу огорчить, ваша задумка недолго проработает, вне зависимости от кода, т.к. контактные группы реле на такое не рассчитаны.

Lucky_Wolf
Offline
Зарегистрирован: 12.07.2016

Нет, фазами не буду управлять, эти реле будут управлять Лензой, которая в свою очередь уже будет управлять фазами.

http://www.lenze.su/SMD/

 

На Лелзе входы:

20 + Е1 = лево

20 + Е2 = право

20 + Е1 + Е3 = лево, быстро

20+ Е1 + Е3 = право, быстро

toxikaciya
Offline
Зарегистрирован: 11.04.2016

Все ясно. Тогда Вашего кода вполне достаточно. Просто на просторах интернета уже попадались попытки реализовать инвертор на ардуино, а у Вас три реле, почему и подумал об этом.

Lucky_Wolf
Offline
Зарегистрирован: 12.07.2016

Нет, это слишком безумно, любое залипание эл.-м. реле чревато - кз. Просто помимо ручного управления, надо повесить и автоматику, а это уже будет делать ардуино.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

+Lucky_Wolf Есть еще 1 вариант.

Посмотрите эту тему и конкретно это сообщение.http://arduino.ru/forum/programmirovanie/svetodiod-i-knopka-v-klassakh#comment-205296

Может это вам пригодится.