Arduino 4 Buton, 4 Röle

Sn. kaptan_ emeğiniz için ekstra teşekkür ederim.
Kodu şimdi yükledim. Yalnız daha önceden arduino üzerine giriş çıkışları ve girişlerin gnd irtibatlı dirençlerini lehimlemiştim. Lehimleme şeklime göre 2,3,4,5 giriş --- 7,8,9,10 çıkış.. Yarın sizin yazdığınız koda göre düzenleyip deneyebilirim.
Mevcut lehimleme şekliyle kodu yüklediğimde resimdeki gibi oluyor ve girişlere + vererek deniyorum hiç tepki vermiyor.
İf komutunda falan deneyerek birşeyler yapmaya çalışıyordum. Ama sanırım sizinki ileri seviye o yüzden anlamadığım için deneme yapamadım :oops:.
 

Ekli dosyalar

  • xxx.jpg
    xxx.jpg
    100.2 KB · Görüntüleme: 9
İlk 2 satırdaki parantez icindeki değerleri kendi bağlantınıza göre düzeltirseniz olur.

Koddan okuyabildigim kadarıyla, sanki aynı anda iki çıkış verecekmiş gibi.
Deneme nasıl sonuç verecek merakla bekliyorum.?!...

Olmadığı takdirde bir fikir...

Girişler bir byte veya neeble olarak okunup 4 durum için çıkışlara yine bir byte çıkışı verilebilir. Tanımlı olmayan girişlerde son çıkış kalır.

Mesela
4 buton için binary olarak basamak değeri şeklinde1 2 4 ve 8 giriş değeri tanımlanır.
İki butona basınca, 1 ve 3 misal 5 bilgisi verir binaryde.
Bu değerlerden farklı bir değer olan 5 için tanımlama yapılmadığından son çıkış aktif kalacak denirse olur.
 
Son düzenleme:
O şekilde yaptığım.
2 numaralı girişe + verdiğimde; önce Röel-7 çekip bırakıyor. Bir kaç tekrar değdiğimde Röle 8 ve 10 çekip öyle kalıyor.
3-4-5 numaralı girişlere; ilk + verdiğim girişe karşılık gelen çıkış çekili kalıyor. Daha büyük (sıra olarak) olan girişler etkisiz kalırken, küçüğe doğru + verdiğim çıkış veriyor ve öyle kalıyor.
 
Bir de böyle dene;
Kod:
const int buton[] = {2,3,4, 5};
const int role[] = {7,8,9,10};

void setup(){
   for(int i =0; i< 5; i++){
       pinMode(buton[i], INPUT);
   }
   for(int i =0; i< 5; i++){
       pinMode(role[i], OUTPUT);
   }
}

void loop(){
   for(int i =0; i<5; i++){
       while(digitalRead(buton[i])){
           digitalWrite(role[i], HIGH);
       }
       if(role[i] == true){
         digitalWrite(role[i], LOW);
       }
   }
}

Kod:
while(digitalRead(buton[i])){
          digitalWrite(role[i], HIGH);
      }

Yukarıdaki kodda bir butona bastığınızda o butonunun karşılığındaki röle çekiyor ve döngüye giriyor. butondan elinizi çekmedikçe başka buton işlev görmez.
 
Moderatör tarafında düzenlendi:
Arkadaşlar aşağıdaki gibi bir kod yazdım. Ama birşeyler ters... :oops:
Lütfen değerlendirebilirmisiniz.
NOT: Burada butonları çıkışlara bağladım (cikis_1 .....) . Yani çıkış aktifse buton çalışsın gibi..
Ama sanırım çıkışlar (-) polaritede oluyor. Onları (+) yapamazmıyım.
Kod:
int role_1 = 10;
int role_2 = 9;
int role_3 = 8;
int role_4 = 7;
int buton_1 = A1;
int buton_2 = A2;
int buton_3 = A3;
int buton_4 = A4;
int cikis_1 = 2;
int cikis_2 = 3;
int cikis_3 = 4;
int cikis_4 = 5;

int b1d;
int b2d;
int b3d;
int b4d;

void setup()
{
  pinMode(role_1, OUTPUT);
  pinMode(role_2, OUTPUT);
  pinMode(role_3, OUTPUT);
  pinMode(role_4, OUTPUT);
  pinMode(buton_1, INPUT);
  pinMode(buton_2, INPUT);
  pinMode(buton_3, INPUT);
  pinMode(buton_4, INPUT);
  pinMode(cikis_1, OUTPUT);
  pinMode(cikis_2, OUTPUT);
  pinMode(cikis_3, OUTPUT);
  pinMode(cikis_4, OUTPUT);
}

void loop()
{
  {
b1d = digitalRead(buton_1);
b2d = digitalRead(buton_2);
b3d = digitalRead(buton_3);
b4d = digitalRead(buton_4);

  if (b1d == HIGH)
   {
    digitalWrite(role_1, HIGH);
    digitalWrite(role_2, LOW);
    digitalWrite(role_3, LOW);
    digitalWrite(role_4, LOW);
digitalWrite(cikis_2, LOW);
digitalWrite(cikis_3, LOW);
digitalWrite(cikis_4, LOW);
   }
 
  else if (b2d == HIGH)
  {
    digitalWrite(role_2, HIGH);
    digitalWrite(role_1, LOW);
    digitalWrite(role_3, LOW);
    digitalWrite(role_4, LOW);
digitalWrite(cikis_1, LOW);
digitalWrite(cikis_3, LOW);
digitalWrite(cikis_4, LOW);
  }

 else if (b3d == HIGH)
  {
    digitalWrite(role_3, HIGH);
    digitalWrite(role_1, LOW);
    digitalWrite(role_2, LOW);
    digitalWrite(role_4, LOW);
digitalWrite(cikis_1, LOW);
digitalWrite(cikis_2, LOW);
digitalWrite(cikis_4, LOW);
  }

 else if (b4d == HIGH)
  {
    digitalWrite(role_4, HIGH);
    digitalWrite(role_1, LOW);
    digitalWrite(role_2, LOW);
    digitalWrite(role_3, LOW);
digitalWrite(cikis_1, LOW);
digitalWrite(cikis_2, LOW);
digitalWrite(cikis_3, LOW);
  }
 
else
{
    digitalWrite(role_1, LOW);
    digitalWrite(role_2, LOW);
    digitalWrite(role_3, LOW);
    digitalWrite(role_4, LOW);
digitalWrite(cikis_1, HIGH);
digitalWrite(cikis_2, HIGH);
digitalWrite(cikis_3, HIGH);
digitalWrite(cikis_4, HIGH);
}

  }
  }
 
Son düzenleme:

Forum istatistikleri

Konular
127,959
Mesajlar
913,912
Kullanıcılar
449,606
Son üye
rasit.

Yeni konular

Geri
Üst