Aynı anda 2 adet butona basma ve sensör kullanımı
  • 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 :D 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
  • tamam şimdi o fikri koda dökmem lazım bi destek :D
  • 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

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook

Tagged

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.