Arduino push buton röle kontrolü

Sağolun herzaman yapmıyor 2 ayda bir falan yapıyor dairelerden birinde kısa,devvre veya voltaj dalgalanması olabilir diye düşündüm trşp süresi dedğiniz sıfır yönünde bastırıp tık sesi gelinceye kadarmı ? Kolay gelsin
 
Hocam ilk enerjiyi verdiğimde rölelerin tümü çekip bırakıyor ardından 2sn sonra hepsi çekiyor butona bastığımda hepsi siniyor 5sn sonra sadece 4 nolu role tekrar çekiyor diğerleri hiç cekmiyor butona bastıkça 4 nolu röle bırakıp 5sn sonra tekrar çekiyor...
 
Kod:
short butonpin = 3, role1 = 5, role2 =6, role3 = 7, role4 = 8, rolemode = 0;

void setup ()

{

Serial.begin(9600);

pinMode (butonpin , INPUT_PULLUP);

pinMode (role1 , OUTPUT);

pinMode (role2 , OUTPUT);

pinMode (role3 , OUTPUT);

pinMode (role4 , OUTPUT);

}

void loop()

{

if (!digitalRead(butonpin))

{delay(250);

if (rolemode<5)

{

rolemode++;

Serial.println(rolemode);

} else {

rolemode=0;

}

}

switch (rolemode) {

case 0:

digitalWrite(role1,0);

digitalWrite(role2,0);

digitalWrite(role3,0);

digitalWrite(role4,0);

Serial.println("case 0");

break;

case 1:

digitalWrite(role1,1);

digitalWrite(role2,0);

digitalWrite(role3,0);

digitalWrite(role4,0);

Serial.println("case 1");

break;

case 2:

digitalWrite(role1,1);

digitalWrite(role2,1);

digitalWrite(role3,0);

digitalWrite(role4,0);

Serial.println("case 2");

break;

case 3:

digitalWrite(role1,1);

digitalWrite(role2,1);

digitalWrite(role3,1);

digitalWrite(role4,0);

Serial.println("case 3");

break;

case 4:

digitalWrite(role1,1);

digitalWrite(role2,1);

digitalWrite(role3,1);

digitalWrite(role4,1);

delay(5000);

rolemode++;

Serial.println("case 4");

break;

case 5:

digitalWrite(role1,1);

digitalWrite(role2,1);

digitalWrite(role3,1);

digitalWrite(role4,0);

Serial.println("case 5");

break;

}

}
butona yeterince kısa süre basamadığımız için öyle oluyormuş. butona çeyrek saniyeden kısa süre basmalısınız ona göre ufak bir ayar daha verdim. şu haliyle baş tarafı yapıyor son adımda ne yapması gerektiğine tam karar veremedim. bir bakın olmazsa bir daha düzeltiriz...


Devreyi şu şekilde kurdum ben.
Butonun bir bacağı gnd üzerinde diğeri d3
Elimde boşta röle olmadığı için LED ile denedim. Ledlerin katotları direnç üzerinden gnd ye gidiyor.
Anotları da ilgili pine bağlı.

Kod:
short butonpin = 3, role1 = 5, role2 =6, role3 = 7, role4 = 8, rolemode = 0;

void setup ()

{

Serial.begin(9600);

pinMode (butonpin , INPUT_PULLUP);

pinMode (role1 , OUTPUT);

pinMode (role2 , OUTPUT);

pinMode (role3 , OUTPUT);

pinMode (role4 , OUTPUT);

}

void loop()

{

if (!digitalRead(butonpin))

{delay(250);

if (rolemode<5)

{

rolemode++;

Serial.println(rolemode);

} else {

rolemode=0;

}

}

switch (rolemode) {

case 0:

digitalWrite(role1,1);

digitalWrite(role2,1);

digitalWrite(role3,1);

digitalWrite(role4,1);

Serial.println("case 0");

break;

case 1:

digitalWrite(role1,0);

digitalWrite(role2,1);

digitalWrite(role3,1);

digitalWrite(role4,1);

Serial.println("case 1");

break;

case 2:

digitalWrite(role1,0);

digitalWrite(role2,0);

digitalWrite(role3,1);

digitalWrite(role4,1);

Serial.println("case 2");

break;

case 3:

digitalWrite(role1,0);

digitalWrite(role2,0);

digitalWrite(role3,0);

digitalWrite(role4,2);

Serial.println("case 3");

break;

case 4:

digitalWrite(role1,0);

digitalWrite(role2,0);

digitalWrite(role3,0);

digitalWrite(role4,0);

delay(5000);

rolemode++;

Serial.println("case 4");

break;

case 5:

digitalWrite(role1,0);

digitalWrite(role2,0);

digitalWrite(role3,0);

digitalWrite(role4,1);

Serial.println("case 5");

break;

}

}
Röleler active low olduğu için burdan devam edelim.
 
Moderatör tarafında düzenlendi:
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…