Soru & Cevap

Arduino Kara Şimşek Düğme ile yön değiştirme sorunu

27.10.2017 - 08:43

Böyle bir kod yazdığım halde çalışmıyor işte kodlar:

const int Dugme = 6; /* düğmenin bağlı olduğu pin */
const int LEDdizisi[] = {8,9,10};

int dugmeDurumu = 0; /* düğmenin durumu */ 
int LEDDurumu = 0; /* birinci yöntem için LED durumu */

void setup () {     
 
  for(int i=0; i<3 ;i++)    
  { /* For dongusuyle LEDdizisi elemanlarina ulasiyoruz */
    pinMode(LEDdizisi[i], OUTPUT); /* LED pinleri cikis olarak ayarlandi */
    pinMode(Dugme, INPUT); /* düğme pini giriş olarak ayarlandı */    
  }

}
void loop() { 
  dugmeDurumu = digitalRead(Dugme); /* düğmenin durumu okundu ve değişkene aktarıldı */
  if(dugmeDurumu == HIGH){
    delay(10);
    if(LEDDurumu == 0){                                                 
      for(int i=0; i==2; i++){ /* Tum LEDleri sirayla 50 milisaniye yakip sonduruyoruz */
        digitalWrite(LEDdizisi[i],HIGH);      
        delay(200);                           
        digitalWrite(LEDdizisi[i],LOW);
        delay(200); 
      }  
      LEDDurumu = 1;      
      } 
    else{
      for(int i=2;i==0; i--){  
      digitalWrite(LEDdizisi[i],HIGH);     
      delay(200);
      digitalWrite(LEDdizisi[i], LOW);
      delay(200);       
        }
        LEDDurumu = 0;
      }
        while(dugmeDurumu == HIGH){ /* düğmeye basili olduğu surece bekle */
        dugmeDurumu = digitalRead(Dugme); /* düğmenin durumunu kontrol et */
    }
        delay(10); /* dalgalanmalar için biraz bekleyelim */          
      }       
  }

 

29 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user f.erenyucal
f.erenyucal
18.02.2023 - 06:27

Selam Hakan, kodlarınızı tamamıyla inceledim. Bu kodda yön değiştirme sorunu şu satırlardan kaynaklanıyor

 

for(int i=0; i==2; i++){
  digitalWrite(LEDdizisi[i],HIGH);      
  delay(200);                           
  digitalWrite(LEDdizisi[i],LOW);
  delay(200); 
} 
for(int i=2;i==0; i--){
  digitalWrite(LEDdizisi[i],HIGH);     
  delay(200);
  digitalWrite(LEDdizisi[i], LOW);
  delay(200);       
}

 

Bu for döngüleri doğru çalışmayacak çünkü karşılaştırma ifadeleri yanlış. İlk for döngüsü, i == 2 yanlış olduğu için hiçbir zaman çalışmayacak ve ikinci for döngüsü, i == 0 yanlış olduğu için yalnızca bir kez çalışacak ve ardından sona erecektir

Döngüleri düzeltmek için, karşılaştırma ifadelerini i < 3 ve i >= 0 olarak değiştirebilirsiniz. Ayrıca, pinMode(Dugme, INPUT); komutunun setup() fonksiyonunda for döngüsünün dışına taşınması gerekiyor. Aşağıda düzeltilmiş kodu görebilirsin

 

const int Dugme = 6;
const int LEDdizisi[] = {8, 9, 10};

int dugmeDurumu = 0;
int LEDDurumu = 0;

void setup() {
  pinMode(Dugme, INPUT);
  for (int i = 0; i < 3; i++) {
    pinMode(LEDdizisi[i], OUTPUT);
  }
}

void loop() {
  dugmeDurumu = digitalRead(Dugme);
  if (dugmeDurumu == HIGH) {
    delay(10);
    if (LEDDurumu == 0) {
      for (int i = 0; i < 3; i++) {
        digitalWrite(LEDdizisi[i], HIGH);
        delay(200);
        digitalWrite(LEDdizisi[i], LOW);
        delay(200);
      }
      LEDDurumu = 1;
    } else {
      for (int i = 2; i >= 0; i--) {
        digitalWrite(LEDdizisi[i], HIGH);
        delay(200);
        digitalWrite(LEDdizisi[i], LOW);
        delay(200);
      }
      LEDDurumu = 0;
    }
    while (dugmeDurumu == HIGH) {
      dugmeDurumu = digitalRead(Dugme);
    }
    delay(10);
  }
}