çağrı buton sistemi yapmaya çalışıyorum.kamu yararına...
  • iyi günler cümleten

    arduinio mega ile yapmak istediğim şu şekilde

    buton1,buton2,buton3,reset1,reset2,reset3 şeklinde 3 butonum var. buton1 e bastığımda p10 panelde "kısım1" yazacak ; reset1 e bastığımda ise bu yazanı söndürecek.sırasıyla buton2 "kısım 2" yazacak reset2 sönürecek aynı şekilde de 3. buton...

    yalnız önemli bir nokta buton1 e basıldı "kısım1" yazdı; sonrasında buton 2 ye basıldığında panelde sırasıyla "kısım1" ve "kısım2" yazacak; diyelim reset 2 ye bastık kısım2 sönecek kısım 1 yanmaya devam edecek ta ki reset1 e basana kadar.

    if else ile programı yazdım, fakat fakat istenmeyen 2 durum oluşuyor. 1.si bu 3 lü durum için 2^3 +1=9 koşul yazmamız gerekiyor. fakat 8 veya daha fazla kısım yaptığımızda kombinasyon çok büyük oluyor. 2.si buzzer bağlayıp delay ile beklettiğimiz ms süre içerisinde -tam beklemeye girdiği süre içinde ise- başka butonu algılamıyor. (yani 1000 ms delay yapıp önce buton1 e sonra buton2 ye bastığımızda 1000 ms aralıkla hem buzzer calışıp hem sıralı KIS-1 ve KIS-2 yanıyor.fakat ilk 1000ms de reset butonunu algılamıyor sonraki 1000ms de algılıyor. ya da tam tersi.) bu durumu araştırmalarıma göre sanırsam kesmelerle çözeceğiz. fakat nasıl bir interrupt yazabiliriz? dış interrupt veya dış interrupt hangisini kullanacağız. bir çözümünüz var mıdır.kodlar aşağıda:
    #include < SPI.h>
    #include < DMD2.h>
    #include < fonts/Droid_Sans_16.h>
    #include < fonts/SystemFont5x7.h>
    SoftDMD dmd(1,1);
    DMD_TextBox box(dmd);
    const int buton1=22;
    const int reset2=25;
    const int buton2=24;
    const int reset1=23;
    const int buton3=26;
    const int reset3=27;
    const int buzzer=28;
    int b1;
    int b2;
    int b3;
    int C = 262;
    int F = 494;

    void setup() {
    Serial.begin (9600);
    dmd.setBrightness (255);
    dmd.begin();
    dmd.selectFont(Droid_Sans_16);
    pinMode (buton1,INPUT);
    pinMode (reset1,INPUT);
    pinMode (buton2,INPUT);
    pinMode (reset2,INPUT);
    pinMode (buton3,INPUT);
    pinMode (reset3,INPUT);
    pinMode (buzzer,OUTPUT);
    }
    void loop() {
    if (digitalRead(buton1)==HIGH)
    {b1=true;}
    else {}
    if (digitalRead(buton2)==HIGH)
    {b2=true;}
    else {}
    if (digitalRead(buton3)==HIGH)
    {b3=true;}
    else {}
    if (digitalRead(reset1)==HIGH)
    {b1=false;}
    else {}
    if (digitalRead(reset2)==HIGH)
    {b2=false;}
    else {}
    if (digitalRead(reset3)==HIGH)
    {b3=false;}
    else {}
    if(b1 && !b2 && !b3)
    {box.println("A-1");
    tone(buzzer,C);
    delay(100);
    noTone(buzzer);
    delay (100);}
    else if(!b1 && b2 && !b3)
    {box.println("A-2");
    tone(buzzer,C);
    delay(100);
    noTone(buzzer);
    delay (100);}
    else if(!b1 && !b2 && b3)
    {box.println("A-3");
    tone(buzzer,C);
    delay(100);
    noTone(buzzer);
    delay (100);}
    else if(!b1 && !b2 && !b3)
    {box.println ("");

    noTone(buzzer);
    delay (100);}
    else if (b1 && b2 && !b3)
    { box.println ("A-1");
    tone(buzzer,F);
    delay(100);
    noTone(buzzer);
    delay (100);
    box.println ("A-2");
    tone(buzzer,F);
    delay(100);
    noTone(buzzer);
    delay (100);}
    else if (!b1 && b2 && b3)
    { box.println ("A-2");
    tone(buzzer,F);
    delay(100);
    noTone(buzzer);
    delay (100);
    box.println ("A-3");
    tone(buzzer,F);
    delay(100);
    noTone(buzzer);
    delay (100);}
    else if (b1 && !b2 && b3)
    { box.println ("A-1");
    tone(buzzer,F);
    delay(100);
    noTone(buzzer);
    delay (100);
    box.println ("A-3");
    tone(buzzer,F);
    delay(100);
    noTone(buzzer);
    delay (100);}
    else if (b1 && b2 && b3)
    {box.println ("A-1");
    tone(buzzer,F);
    delay(100);
    noTone(buzzer);
    delay (100);
    box.println ("A-2");
    tone(buzzer,F);
    delay(100);
    noTone(buzzer);
    delay (100);
    box.println ("A-3");
    tone(buzzer,F);
    delay(100);
    noTone(buzzer);
    delay (100);}
    else {}

    }


    bu problemi çözmek için kesme mi kullanmalıyım?

    eğer ki kullanacaksam belki 16 buton bağlamam gerekirse nasıl bir kesme kullanmalıyım?
    Ya da alternatif bir öneriniz var mı?

    şimdiden yardımlarınız için teşekkürler
  • Okaman sizin fikriniz olabilir diye tahmin ediyorum. Hala bu delay komutunun işlemesi sırasında başka bir komutu çalıştırması problemini çözemedim.
  • delay yerine milis kullanın. zaman olcumu oncesi milis degerını saklayın basit bir if le 100ms den buyukse şunu yap yada çık dersınız ve bu arada yapmak ıstedıgınız mesela tus takımında hangı tusa basıldıgını da test edersınız.
    atach komutu ıle harıcı kesme oluşturabılırsınız bunuda bir ınt pinine tuşları da kapsayacak şekılde kablolama yapmanız lazım bir tuşa basıldıgında kesme oluşur ve hengi tuşa basıldıgını okur ve kaydedersınız. diğer çalışan rutınler ıcınde ıse basılan tuş oldugunda yapılacak işlerı yonetırsınız. kabaca boyle

Howdy, Stranger!

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

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