Buton ile Led Kontrolü Yardım

micbeatz

Üye
Katılım
5 May 2020
Mesajlar
12
Puanları
1
Yaş
28
Merhabalar arkadaşlar.Ben ikinci butona bir kez bastığımda, birinci butona ne kadar basılmışsa o kadar kez yanan led yapmak istiyorum.Bunun programını nasıl yazabilirim açıkcası çözemedim.Yardımcı olursanız şimdiden teşekkürler
 
Merhabalar arkadaşlar.Ben ikinci butona bir kez bastığımda, birinci butona ne kadar basılmışsa o kadar kez yanan led yapmak istiyorum.Bunun programını nasıl yazabilirim açıkcası çözemedim.Yardımcı olursanız şimdiden teşekkürler
const int buton_1 = 2;
const int buton_2 = 3; /*Buton 1 tıklama sayacı için, buton 2 ledi çalıştırmak için*/
const int led = 4;
int sayac = 0; /* butona basılma sayısını tutacak değişken */
int butonDurumu_1 = 0;
int butonDurumu_2 = 0; /*Buton durumları atamak için gerekli değişkenler*/

void setup() {
pinMode(buton_1, INPUT);
pinMode(buton_2, INPUT);
pinMode(led, OUTPUT);

}

void loop() {
butonDurumu_1 = digitalRead(buton_1);
butonDurumu_2 = digitalRead(buton_2); /*Gelen verileri değişkenlere aktaralım*/
if (butonDurumu_1 == HIGH) { /*Eğer sayaç butonuna baasılırsa aşağıdaki kod dizisini uygular*/
delay(10); /* dalgalanmalar için biraz bekleyelim */
sayac ++; /* sayaç = sayaç + 1 yani sayaç değeri bir arttırıldı */
while(butonDurumu_1 == HIGH){ /* Butona basili olduğu surece bekle */
butonDurumu_1 = digitalRead(buton_1); /* Butonun durumunu kontrol et */
}
delay(10); /* dalgalanmalar için biraz bekleyelim */
}
if (butonDurumu_2 == HIGH) { /*Led butonuna basılırsa aşağıdaki kod dizisini uygular*/
for(int x=0; x<sayac; x++){ /*X değişkeni oluşturup for döngüsü ile sayaçtan gelen tıklama sayısı kadar kod dizisini döndüren koşullu değişken */
digitalWrite(led,HIGH);
delay(300);
digitalWrite(led,LOW);
delay(300); /*Ledi yakıp söndüren kod dizisi*/
}
}

}
Kodu kendim yazdım fakat bazı yerlerini https://gelecegiyazanlar.turkcell.com.tr/konu/arduino/egitim/arduino-201/tiklama-sayaci sayesinde yazdım.
Eğer istersen Seri haberleşme üzerinden tıklama sayısını gösterebilirsin. Tek yapman gereken if komutu içerisinde yer alan sayac++; komutundan sonra
Serial.print("Butona ");
Serial.print(sayac);
Serial.println(". defa basildi.");
yazmalısın. Sıfırlamak için arduinodaki tekrar başlama butonuna bas. Umarım yardımcı olabilmişimdir.
 
Debonce durumu bu şekilde olmaz.
Butona basıldıktan sonra, bekleme
zamanı içinde bırakılmış olabilir veya
tam temas olmamış olabilir. Bekleme
zamanından sonra tekrar kontrol etmek
gerekir.

Kod:
if(buton == 1)
{
    delay(10);//butona basıldıktan sonra bekliyoruz,
    if(buton == 1)// buton bekleme zamanından sonra hala basılı mı?
    {
        //işlemler...
    }
}
 
Debonce durumu bu şekilde olmaz.
Butona basıldıktan sonra, bekleme
zamanı içinde bırakılmış olabilir veya
tam temas olmamış olabilir. Bekleme
zamanından sonra tekrar kontrol etmek
gerekir.

Kod:
if(buton == 1)
{
    delay(10);//butona basıldıktan sonra bekliyoruz,
    if(buton == 1)// buton bekleme zamanından sonra hala basılı mı?
    {
        //işlemler...
    }
}
bu konularda yeniyim daha bir bilgim yok fakat denediğimde herhangi bir sıkıntı ile karşılaşmadım.
 
herkese yardımları için teşekkürler

const int buton_1 = 2;
const int buton_2 = 3; /*Buton 1 tıklama sayacı için, buton 2 ledi çalıştırmak için*/
const int led = 4;
int sayac = 0; /* butona basılma sayısını tutacak değişken */
int butonDurumu_1 = 0;
int butonDurumu_2 = 0; /*Buton durumları atamak için gerekli değişkenler*/

void setup() {
pinMode(buton_1, INPUT);
pinMode(buton_2, INPUT);
pinMode(led, OUTPUT);

}

void loop() {
butonDurumu_1 = digitalRead(buton_1);
butonDurumu_2 = digitalRead(buton_2); /*Gelen verileri değişkenlere aktaralım*/
if (butonDurumu_1 == HIGH) { /*Eğer sayaç butonuna baasılırsa aşağıdaki kod dizisini uygular*/
delay(10); /* dalgalanmalar için biraz bekleyelim */
sayac ++; /* sayaç = sayaç + 1 yani sayaç değeri bir arttırıldı */
while(butonDurumu_1 == HIGH){ /* Butona basili olduğu surece bekle */
butonDurumu_1 = digitalRead(buton_1); /* Butonun durumunu kontrol et */
}
delay(10); /* dalgalanmalar için biraz bekleyelim */
}
if (butonDurumu_2 == HIGH) { /*Led butonuna basılırsa aşağıdaki kod dizisini uygular*/
for(int x=0; x<sayac; x++){ /*X değişkeni oluşturup for döngüsü ile sayaçtan gelen tıklama sayısı kadar kod dizisini döndüren koşullu değişken */
digitalWrite(led,HIGH);
delay(300);
digitalWrite(led,LOW);
delay(300); /*Ledi yakıp söndüren kod dizisi*/
}
}

}
Kodu kendim yazdım fakat bazı yerlerini https://gelecegiyazanlar.turkcell.com.tr/konu/arduino/egitim/arduino-201/tiklama-sayaci sayesinde yazdım.
Eğer istersen Seri haberleşme üzerinden tıklama sayısını gösterebilirsin. Tek yapman gereken if komutu içerisinde yer alan sayac++; komutundan sonra
Serial.print("Butona ");
Serial.print(sayac);
Serial.println(". defa basildi.");
yazmalısın. Sıfırlamak için arduinodaki tekrar başlama butonuna bas. Umarım yardımcı olabilmişimdir.
Burda bir sonraki bastığım buton sayısını da ekliyor yani ben ilk butona 5 kez basıp 2. ye bir kez bastığımda 5 kez led yanıp sönüyor.Buraya kadar problem yok.Fakat tekrar birinci butona 2 kez basıp, ikinci butona bastığımızda sayacı sıfırlamadığımız için 7 kez ledi yakıp söndürüyor.Yani şunu dememiz lazım x<sayac şartını sağladığında sayacı sıfırla.Bunu nasıl yapabilriz?
 
herkese yardımları için teşekkürler


Burda bir sonraki bastığım buton sayısını da ekliyor yani ben ilk butona 5 kez basıp 2. ye bir kez bastığımda 5 kez led yanıp sönüyor.Buraya kadar problem yok.Fakat tekrar birinci butona 2 kez basıp, ikinci butona bastığımızda sayacı sıfırlamadığımız için 7 kez ledi yakıp söndürüyor.Yani şunu dememiz lazım xQUOTE]

For döngüsü parantezi kapandıktan sonra sayac=0; yazarak düzeltebilirsin
 

Forum istatistikleri

Konular
128,289
Mesajlar
916,458
Kullanıcılar
450,118
Son üye
TheTwize

Yeni konular

Geri
Üst