Basılı buton ile tek komut gönderme yardım lütfen. .
  • Arkadaşlar Meraba, ben ardunio ile şöyle bir devre yapmak istiyorum.
    2 ad butonum olcak
    Bunlar için iki girişim olcak
    Aynı şekilde iki tane de çıkışım olcak her buton Bi çıkışı kontrol edecek
    Şimdi benim girişte kullandığım butonlar normal evlerde kullandığımız anahtar tipindeki butonlae yanı butonu bastığımda açık kalıyor taa bir sonraki basıma kadar kapanmıyor. İki butonumda böyle.
    Benim istediğim sey buton tarafından girişe lojik bir geldiği zaman o girişin kontrol edeceği çıkış belli bir süre aktf olcak o süre bitince giriş 1 olsa bile çıkışı söndürecek. Bu iki anahtar içinde geçerli olcak. Bi dahaki tetiklemeyi de anahtar kapandı bilgisi aldıktan sonra çıkış aktifleştirilecek.
  • http://www.forum.arduinoturkiye.com/index.php?p=/discussion/8632/serial-porttan-tuşa-basili-kaldigi-suerece-tek-komut-goenderme#Item_5

    2 gün önce button sürekli basılı olunca sadece 1 defa okusun olayı sorulmuştu.
    (Bunu kimse yapamıyor yardımmm lütfen) diye de bir başlık uygun olmuş mu sizce
  • O yazıyı inceledim ancak benim dediğim fonksiyon tam olarak o değil bir sonraki tetiklemeyi nasıl okuyacağını çözemiyorum ben
  • Ben şimdi Bi buton kullanıcam bu butona bir kere bastığımda tek komut okuyacak led yanıcak ve belli bir süre sonra buton basılıysa bile o led sönecek. Taki buton kapatılıp tekrar basılana kadar. .
  • Konu başlığını lütfen değiştirin böyle bir konu başlığı mı olur yahu , cevabı yazacaktım yazasım kaçtı.
  • değiştirdim @embededsyatem
  • Madem konu başlığı düzeldi ozaman tek button örneği vereyim 2 button için düzenlersin artık

    boolean ilkbutton = false; // baslangicta tanimla
    int ilk_led_sure = 0; //ledi yakma suresi icin degisken
    unsigned long oncekiZaman = 0; //onceki zamani tuttugumuz degisken


    setup içinde pinMode(3, OUTPUT) yap
    lop içinde

    //1. button için
    if (digitalRead(2) == HIGH && !ilkbutton) { // tusa basildiysa ve ilkbutton tanimi true degilse
    ilk_led_sure = 10; // ledi 10 saniye yak
    ilkbutton = true; // basildimi true olsun ki buraya bir daha bakmasin
    } else if (digitalRead(2) == LOW) {
    ilkbutton = false;
    }
    //1. button için son




    if (millis() - oncekiZaman > 1000) { // su anki zamandan onceki zamani cikardigimizda kalan fark 1000ms ise

    //1. led için
    if (ilk_led_sure > 0) { //ledi yakma suresi 0 dan buyukse bunu buton basildiginda aliyor
    digitalWrite(3, HIGH); //ledi yak
    ilk_led_sure--;// her seferinde ledi yakma suresini 1 eksik yapiyoruz
    } else {
    digitalWrite(3, LOW); //ledi sondur
    }
    //1. led için son

    oncekiZaman = millis();
    }

  • Çok teşekkür ederim çok sağolun. . Programı denicemm. .
  • Efendim programı denedim şimdi iki buton içinde uyarladım. Ancak iki problem var 1. buton ilk açıldıktan sonra led yanıyor buton açık kaldığı sürece led belirtilen süre içinde kapanıyor ancak buton ilk açıldıktan sonra led sönmeden kapanırsa led sönmüyor ?? İkinci problemse biz burda süreyi milisaniye olarak ayarlama şansımız var mı ?

  • boolean ilkbuton=false;
    boolean ikincibuton=false;
    int ikinci_led_sure=0;
    int ilk_led_sure=0;
    unsigned long oncekiZaman=0;


    void setup() {

    pinMode(3,OUTPUT);
    pinMode(2,INPUT);
    pinMode(5,OUTPUT);
    pinMode(4,INPUT);

    }

    void loop() {

    int tetik_1=digitalRead(2);
    int tetik_2=digitalRead(4);

    if
    (tetik_1==HIGH || tetik_2==HIGH)
    {
    if
    (tetik_1==HIGH && tetik_2==LOW)
    {
    if(digitalRead(2)==HIGH && !ilkbuton)
    {
    ilk_led_sure=1;
    ilkbuton=true;

    }
    else if(digitalRead(2)==LOW)
    {
    ilkbuton=false;
    }


    if(millis()-oncekiZaman>1000)
    {
    if(ilk_led_sure>0)
    {
    digitalWrite(3,HIGH);
    ilk_led_sure--;
    }
    else
    {
    digitalWrite(3,LOW);
    }
    oncekiZaman=millis();
    }


    }



    else
    {
    if
    (tetik_1==LOW && tetik_2==HIGH)
    {

    if(digitalRead(4)==HIGH && !ikincibuton)
    {
    ikinci_led_sure=1;
    ikincibuton=true;

    }
    else if(digitalRead(4)==LOW)
    {
    ikincibuton=false;
    }


    if(millis()-oncekiZaman>1000)
    {
    if(ikinci_led_sure>0)
    {
    digitalWrite(5,HIGH);
    ikinci_led_sure--;
    }
    else
    {
    digitalWrite(5,LOW);
    }
    oncekiZaman=millis();
    }



    }
    }
    }

    else

    {
    digitalWrite(3,LOW);
    digitalWrite(5,LOW);

    }


    }

  • yazdığım program bu;
    şimdi kullandığım iki butondan aynı anda lojik 1 gelirse iki ledin de yanmaması için bir if koşulu ekledim onun dışında ledlerin yapma ve belli bir süre sonunda sonmesi sizin önerdiğiniz komutlarla ve iki led için yazıldı. şimdi biz burda aç kapa anahtar yerine iki butonumuzun da bağlı olduğu bir swich kullanıcaz. ancak swichte aynı anda lojik bir geldiği için ikiside çalısmayacak (if koşulunu sağlamadığı için). biz bu prgram üzerinde şöyle bir durum oluşturabilir miyiz ?

    biz iki butondan birinden ilk once lojik 1 daha sonra aynı butondan lojik 0 yolladığımız andan itibaren ledin yanıp belirtilen süre sonunda sonme durumunu oluşturabilir miyiz

    aynı durum iki anahtar içinde geçerli olcak tabii.
  • millis() kontrolünü if koşulların içinden sil dışında en altta ekle if koşulunu sağlamadığı için led yanmaz

    if (millis() - oncekiZaman > 1000)
    {
    if (ikinci_led_sure > 0)
    {
    digitalWrite(5, HIGH);
    ikinci_led_sure--;
    }
    else
    {
    digitalWrite(5, LOW);
    }

    if (ilk_led_sure > 0)
    {
    digitalWrite(3, HIGH);
    ilk_led_sure--;
    }
    else
    {
    digitalWrite(3, LOW);
    }
    oncekiZaman = millis();
    }


    süreyi milisaniye olarak ayarlama için (millis() - oncekiZaman > 300) yaparsan ikinci_led_sure ve ilk_led_sure değişkenlerinde olan değerin birini 300ms de tamalar

    veya (millis() - oncekiZaman > 1) //1ms de bir çalışsın sen ikinci_led_sure=300; olarak yaz yine 300ms yanar
  • Ben ilk olayı anlayamadım. İf döngüsündeki millis fonksiyonunu çıkartayım derken hangi if koşulundan çıkartmam gerekiyor. Ve hangi döngüden sonra yazmam gerekiyor bunu yapınca lojik 1 ve ardından sıfır geldiğinde led yanmaya başlayacak değil mi ?
  • Siz buttolar için şartlari istediğiniz gibi oluşturun ledi tetiklemek istediginiz yerde
    ilk_led_sure=1; veya ikinci_led_sure baska bir yerde mantiğa gore yapın
    tüm bu şartların dışında üstteki kodu kullanırsanız
    ilk_led_sure 0 dan büyük olduğu anda koşulu doğru sayıp verilen degerden geriye sayarak 0 olana kadar ledi yakar 2 led ayni anda yanmaması için şartları ona göre uygulayın yani ilk_led ve ikinci ledi biri 0 dan buyukse tetikleme gibi şartlar kullanın
    Siz verdiğim millis örneğini de şartlar içinde kullanmışsıniz
  • Efendim denedim ancak koşulları yazarken sıkıntı çıkıyor. if(tetik1==low &&tetik2== high) koşulu bir kere sağlandıktan sonra if koşulundan çıkmak için tetik1 ve tetik2 den birinin değişmesi gerekiyor biz bunu yapamıyoruz projede. Şimdi if koşulunu bu şekilde sağladıktan koşuldan çıkmamızı sağlayacak bir komut var mı ? (Tetik1 ve tetik2 aynı değerlileri korurken). Veya bu koşulu if dışında kullanacağımız bir komut varmı ?

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.