Tek Butonla LED i Hem Yakma Hem Söndürme
  • Merhabalar,

    Push-pull diyebileceğimiz genel ismiyle çıt-çıt butonlarla kurduğum devrede istediğim şey şu; butona basınca LED yansın, butona bir daha basınca LED sönsün. Aynen otobüs şoförlerinin tek butonla kapıyı hem açıp hem de kapatabilmesi gibi. Yazdığım kod aşağıdaki gibi ama sistem bazen düzgün çalışıyor bazen düzgün çalışmıyor. Problem nerede acaba? Tşk..

    int led = 3;
    int buton = 2;
    int leddurum=0;

    void setup() {
    pinMode(led, OUTPUT);
    pinMode(buton, INPUT);

    }

    void loop() {

    if ((digitalRead(buton)==HIGH) && (leddurum==0))
    {
    digitalWrite(led, HIGH);
    leddurum = 1;
    }
    else if ((digitalRead(buton)==HIGH) && (leddurum==1))
    {
    digitalWrite(led, LOW);
    leddurum = 0;
    }

    }
  • biraz zaman tanı sısteme gecıkme olsun durum değişir değişmez diğer durumu kontrol etme aşağıdaki gibi delay olursa nasıl oldu bır deneyın

    {
    digitalWrite(led, HIGH);
    leddurum = 1;
    delay(100);
    }
  • delay komutu ekle azda olsa beklet komutları. birde kurduğun devreye bakmak lazım pull up veya pull down yaptın mı ?
    butonun düzğün çalışıyor mu...
  • Selamlar

    delay ile denedim, yine sağlıklı çalışmıyor. Bu arada butonum düzgün, pull down mevcut.Sayaç kodu ekledim yine beceremedim :) Hayır çok basit bişey gibi düşünmüştüm ne uğraştırdı böyle anlamadım..İnternette bazı kodlar buldum bunla igili, bir dünya değişken atamışlar onlar da sağlıklı çalışmıyor.
  • Tekrar merhabalar,

    Sorun çözüldü..Evet, mesele delay ve butonun breadboard üzerindeki pinlere tam temas etmemesi. Daha doğrusu basma esnasında içerde temassızlıklar oluyormuş. Çalışan kodu aşağıda yayınlıyorum;

    int led=3;
    int buton=2;
    boolean leddurum=0;

    void setup()
    {
    pinMode(led, OUTPUT);
    pinMode(buton, INPUT);
    }

    void loop() {

    if
    ((digitalRead(buton)==HIGH) && (leddurum==0))
    {
    digitalWrite(led, HIGH);
    leddurum=1;
    delay (100);
    }

    if ((digitalRead(buton)==HIGH) && (leddurum==1))
    {
    digitalWrite(led, LOW);
    leddurum=0;
    delay (100);
    }


    }
  • Böyle durumlarda sürekli kararsızlıklar yaşarsınız. Butonların sıçraması muhtemeldir, ben bu tarz uygulamalarda buton basıldığı andan itibaren bırakılana kadar bir döngüye sokuyorum ta ki buton ne zaman bırakılır, cihaz bir sonraki işlevini ozaman yerine getirir. Sizin programda butona 100 ms ' den fazla basma durumunda cihaz yeniden kararsız çalışacaktır.

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.