kesme kullanarak led kontrol
  • öncelikle herkeze mrb .bende arduino ve ' C ' ile yeni tanışmış biriyim .sormak istediğim aşağıdaki vermiş olduğum kodda ' deneme1 ' kesintisi aktif olunca çıkışlar HIGH olur .' deneme2 ' kesintisi aktif olduğunda çıkışlar LOW olur .buraya kadar sorunum yok .fakat ' deneme1 ' kesintisinde şöyle bi değişiklik yapmak istediğimde ;

    digitalRead(state = HIGH);
    delay(1000);
    digitalRead(state = LOW);



    yani 1 saniye HIGH olup sonrasında LOW a cekmek istiyorum .programı bu şekilde derlediğimde hata vermiyor ama arduino bu şekilde hiç çalışmıyor .cıkışı HIGH olmuyor .bu konuyla ilgili yaptıgım yanlış ile ilgili bilgilendirirseniz cok sevinirim .şimdiden teşekkür ederim .iyi forumlar






    int buton1 = 2;
    int buton2 = 3;
    int led1 = 13;
    int led2 = 8;
    volatile int state;
    void setup()
    {
    pinMode(led1, OUTPUT);
    pinMode(led2, OUTPUT);
    pinMode(buton1, INPUT);
    pinMode(buton2, INPUT);
    attachInterrupt(digitalPinToInterrupt(buton1), deneme1, RISING);
    attachInterrupt(digitalPinToInterrupt(buton2), deneme2, RISING);
    }

    void loop()
    {
    digitalWrite(led1, state);
    digitalWrite(led2, state);
    }

    void deneme1()
    {
    digitalRead(state = HIGH);
    }

    void deneme2()
    {
    digitalRead(state = LOW);
    }
  • Merhaba öncelikle yazdığın koddan hiç birşey anlamadım :)

    Özet olarak ne yapmak istediğini yazarmısın ?

    Ledi 1 saniye yakıp 1 saniye söndürmek mi istiyorsun
  • :) (: örnek olarak vermiş olduğum kodda buton1 HIGH olursa led1 ve led2 çıkışları sürekli HIGH olmakta .butondan elimi ceksem bile cıkışlar HIGH olarak kalmakta .bu HIGH olan çıkışlar buton2 ye basıldıgında LOW a düşmekte .buton2 de deneme2 kesmesiyle bu işlemi gercekleştirmekte .buraya kadar herşey yolunda .benim ise istediğim ;

    buton1 yani HIGH oldugunda beli bi süre çıkışlar HIGH olsun sonra LOW a düşsün ve öyle kalsın .taki bir diğer buton1 komutuna basıncaya kadar .bu yapmak istediğim değişikliği ;

    void deneme1()
    digitalRead(state = HIGH);
    delay(1000);
    digitalRead(state = LOW);

    kodlarıyla yapmak istediğimde arduinom hiç cıkış vermiyor .bunun yöntemini merak etmekteyim .umarım şimdi anlatabilmişimdir :)
  • yani benim kontrolüm gerekmeksizin ayarlanılan süre sonunda LOW a düşmesini istiyorum ve öyle LOW pozisyonunda kalmalı
  • İşlemcilerde timer interrupt denilen bir interrupt mevcut. Bunu bir araştır.
    Senin dediğin işlem bir timer kurularak çok basite indirgenebilir.
    Örneğin yapı olarak bahstmek gerekirse.

    Buton 1 e bastığında bir timerı saydırmaya başlarsın ve timeri kontrol edersin istediğin sayıya ulaştığında ledleri söndürürsün.
  • cok teşekkür ederim konuyla ilgili araştırma yapıcam .
  • Olceyy selam

    Sorunu cozdunmu bilmiyorum ama if ile olayini cozebilirsin hatta kesme kullanmana gerek dahi yok.
    Deneme1 fonksiyonuna ledleri high ayarla ve delay ile kaç sn bekletecegini yaz ve altina low belirle sonra loop icine if (buton1 == HIGH) deneme1 () dersin boylelikle butona basip cektiginde if komutu çalışır led yanar isredigin sure bekler led soner yani senin deneme1 fonks. Çalışır onun icinde yaptigin ayarlar sirasi ile gelir ozet olarak boyle takilirsan yaz bu arada butonlari pulldown yapmayo unutma 10k drenc ile
  • Bir yazılımda delay kullanmak kadar tehlikeli birşey yok. :)
    delay programı tamamen kullanışsız yapar
    her bir gecikme için timerlardan yardım alınır.
  • Merhaba ekmekci

    tabiki timer kullanmak iyi fakat yukarıda basit bir led yakma ve sondurme olayını buton ile yapılmak isteniyor basit bir program için basit bir yazılım kullanılması daha doğru olur bence mantık oturdukça ilerlemeliler. :)

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.