Selamlar. Aynı anda 2 adet butona basarak bir ledi yakmak istiyorum. Aynı anda 2 adet butona basılı iken 12 nolu pine bağlı sensörden tetikleme gelirse ilk başta yanan ledin sönüp diğer ledin yanması gerekiyor. Karşılaştığım sorun butonlara aynı anda bastığımda istediğim gibi birinci led yanıyor, Ancak aynı anda butonlara basılıyken sensör tetiklenirse tüm ledler yanıyor. Benim istediğim ise ilk başta yanan ledin sönüp diğerinin yanması. Bu hatayı nasıl düzeltebilirim? byte YukariLed = 8; byte AsagiLed = 7; byte BaslaButon1 = 4; byte BaslaButon2 = 5; byte sensor = 12; void setup() { pinMode(YukariLed, OUTPUT); pinMode(AsagiLed, OUTPUT); pinMode(BaslaButon1, INPUT_PULLUP); pinMode(BaslaButon2, INPUT_PULLUP); pinMode(sensor, INPUT_PULLUP);//limit sensor } void loop(){ if (digitalRead(BaslaButon1) == LOW && digitalRead(BaslaButon2) == LOW) //Burada hata yok { digitalWrite(AsagiLed, HIGH); digitalWrite(YukariLed, LOW); } if (digitalRead(BaslaButon1) == LOW && digitalRead(BaslaButon2) == LOW && digitalRead(sensor) == LOW) // Bu satırdatüm ledler yanıyor {digitalWrite(AsagiLed, LOW); digitalWrite(YukariLed, HIGH); } else if (digitalRead(BaslaButon1) == HIGH || digitalRead(BaslaButon2) == HIGH) //Burada hata yok { digitalWrite(YukariLed, LOW); digitalWrite(AsagiLed, LOW); } }
void loop() { if (digitalRead(BaslaButon1) == LOW && digitalRead(BaslaButon2) == LOW) //Burada hata yok { digitalWrite(AsagiLed, HIGH); digitalWrite(YukariLed, LOW); if(digitalRead(sensor) == LOW)) { digitalWrite(AsagiLed, LOW); digitalWrite(YukariLed, HIGH); } } else if (digitalRead(BaslaButon1) == HIGH || digitalRead(BaslaButon2) == HIGH) //Burada hata yok { digitalWrite(YukariLed, LOW); digitalWrite(AsagiLed, LOW); } } bu şekilde dene bakalım
Bunu denemiştim. Aynı hata devam ediyor.
Buradaki yaptığınız hata şu, örneğin; 2 tane if komutu var birtanesi if(x>10){} diğer if ise if(x>20){} şimdi size soruyorum eğer x=100 ise hangi if e girer ? tabikide ikisinede girer. sizin hatanız o birinci ifte 2 butonada basılırsa gir diyorsunuz 1ci led yanıyor 2 ci led sönüyor ikinci ifte 2 butonada basılırsa ve sensör gelirse gir diyorsunuz 1ci led sonüyor 2 ci led yanıyor. Siz butonların ikisinide basınca ve sensorden de bilgi gelince hem 1 ci ife giriyor, hemde 2 ci ife giriyor. yani işlem şu oluyor 1.led yan, 2.ed sön, 1.led sön, 2.led yan, bir işlem süresi uS(mikro saniye) mertebesinde olduğu için siz bunu bütün ledler yanıyormuş gibi görüyorsunuz, çözüm ise şöyle ; birinci if in içerisine sensöre bağımlı biir komut koymalısın. Bunu deneyebilirsin; byte YukariLed = 8; byte AsagiLed = 7; byte BaslaButon1 = 4; byte BaslaButon2 = 5; byte sensor = 12; void setup() { pinMode(YukariLed, OUTPUT); pinMode(AsagiLed, OUTPUT); pinMode(BaslaButon1, INPUT_PULLUP); pinMode(BaslaButon2, INPUT_PULLUP); pinMode(sensor, INPUT_PULLUP);//limit sensor } void loop() { if (digitalRead(BaslaButon1) == LOW && digitalRead(BaslaButon2) == LOW && digitalRead(sensor) == HIGH) { digitalWrite(AsagiLed, HIGH); digitalWrite(YukariLed, LOW); } if (digitalRead(BaslaButon1) == LOW && digitalRead(BaslaButon2) == LOW && digitalRead(sensor) == LOW) { digitalWrite(AsagiLed, LOW); digitalWrite(YukariLed, HIGH); } else if (digitalRead(BaslaButon1) == HIGH || digitalRead(BaslaButon2) == HIGH) { digitalWrite(YukariLed, LOW); digitalWrite(AsagiLed, LOW); } } Böylece sensör 1 iken, 1ci led yanıp 2ci led sönecek sensör 0 iken , 2ci led yanıp 1ci led sönecek İyi çalışmalar
hocam butona basınca yanan ledi .yapıyoruz tamam anladıkda aynı butona bir daha basınca söneni delirtti
bi el atsan su işe
Tam olarak ne istiyorsun ![]()
bir adet buton var elimizde ve bu butona basınca ledi yanık kalacak birdaha aynı butona basınca sönecek ![]()
basınca yanan basınca sönen bi uygulama yane
int kontrol1,kontrol2,state; define led 8 void(setup) { Serial.begin(9600); pinMode(led,OUTPUT); digitalWrite(led,LOW); } void loop() { state=digitalRead(button); if(button) { if(kontrol1) { kontrol1=0; if(kontrol2 %2 ==0) { digitalWrite(led,HIGH); } else if(kontrol2 %2 ==1) { digitalWrite(led,LOW); } kontrol2++; } } else kontrol1=1; } bak bakalım olucak mı
int kontrol1,kontrol2,state; define led 8 void seup () { Serial.begin(9600); pinMode(led,OUTPUT); digitalWrite(led,LOW); } void loop() { state=digitalRead(button); if(button) { if(kontrol1) { kontrol1=0; if(kontrol2 %2 ==0) { digitalWrite(led,HIGH); } else if(kontrol2 %2 ==1) { digitalWrite(led,LOW); } kontrol2++; } } else kontrol1=1; } state=digitalRead(button); 2 yerde kod yazım hatası aldım düzeltim ama simdi burda takıldı hata veriyor
void setup() { pinMode( 13, OUTPUT); pinMode( 2, INPUT); } int a = 0; void loop() { int buton = digitalRead(2); if( buton == HIGH) { if(a == 0) { digitalWrite( 13, HIGH); while( buton != LOW ) buton = digitalRead(2); a = 1; } else { a = 0; digitalWrite( 13, LOW); while( buton != LOW ) buton = digitalRead(2); } } } ÜSTÜNDE BİRAZ CALISTIM BU SEKİL OLDU
BUNU simdi 2 inci bir buton ekledigimde 2 inci butona bastıgımda 1 inci butondaki ledin sönmesini ve 2 inci butondaki ledin yanık kalmasını istiyorum. nasıl yapabilrim bi fikir verirmisiniz
fikir olarak tarif ettiğin şeyi kod olarak yazman en fazla 15 dk surerdi be hocam. tam anlattığın gibi yapılıyor zaten
oda iyi ![]()
tamam şimdi o fikri koda dökmem lazım bi destek ![]()
butonlardaki while döngüleri ile yaptığında butona basılana kadar oradan kurtulmaz rutin bekler diğer butonu test edemezsin daha basit düşün. eğer buton1 se şunu yap eğer buton2 ise şunu yap şeklinde bir rutin yaz. seninki şöyle olmuş buton 1 bekle butona basılırsa bişe yap çık buton 2 bekle butona basılırsa guzel bişe yap buton1 e basılmadan buton2 yi test edemezsin bu durumda.
void setup() { pinMode( 2, INPUT); pinMode( 3, INPUT); pinMode( 4, INPUT); pinMode( 5, INPUT); pinMode( 13, OUTPUT); pinMode( 12, OUTPUT); pinMode( 11, OUTPUT); pinMode( 10, OUTPUT); } void loop() { int buton = digitalRead(2); int buton2 = digitalRead(3); int buton3 = digitalRead(4); int buton4 = digitalRead(5); if( buton == HIGH) { digitalWrite( 10, HIGH); digitalWrite( 11, LOW); digitalWrite( 12, LOW); digitalWrite( 13, LOW); } if( buton2 == HIGH) { digitalWrite( 10, LOW); digitalWrite( 11, HIGH); digitalWrite( 12, LOW); digitalWrite( 13, LOW); } if( buton3 == HIGH) { digitalWrite( 10, LOW); digitalWrite( 11, LOW); digitalWrite( 12, HIGH); digitalWrite( 13, LOW); } if( buton4 == HIGH) { digitalWrite( 10, LOW); digitalWrite( 11, LOW); digitalWrite( 12, LOW); digitalWrite( 13, HIGH); } } basit böle oluyor gibi