Bu cumartesi son gün hocamSon teslim ne zaman?
const int buton_1 = 2;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
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.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... } }
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?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.
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]
hocam öyle yaptığımda ne kadar basarsam basıyım 1. butona 2. butona bastığımda bir kez yakıp söndürüyorFor döngüsü parantezi kapandıktan sonra sayac=0; yazarak düzeltebilirsin
Kodunu bir kopyalayıp atar mısın? For döngüsünün içine yazdığından olabilirhocam öyle yaptığımda ne kadar basarsam basıyım 1. butona 2. butona bastığımda bir kez yakıp söndürüyor