Buton ile LED Aç/Kapat
Butona her basıldığında LED’in durumunu değiştiren Arduino uygulaması yapacağız.
Arduino kartında buton kullanarak led yakıp söndürme devresini hazırladık. Butona her basıldığında led kapalı ise ledi yakıyor. Led açık ise ledi söndürüyor.
- Arduino Uno
- LED
- Direnç
- Buton
LED bağlantısında seri direnç kullanılmalıdır. Buton girişinin boşa düşmemesi için harici pull-down/pull-up direnç veya Arduino’nun dahili INPUT_PULLUP özelliği kullanılabilir.
Butona basıldığında LED’in mevcut durumu kontrol edilir. LED kapalıysa yakılır, açıksa söndürülür. Bu mantık için bir durum değişkeni kullanılır.
Butonlar mekanik elemanlar olduğu için basıldığında kısa süreli titreşim/sıçrama oluşabilir. Basit uygulamalarda kısa bir delay() ile bu etki azaltılabilir.
Aşağıdaki kod, verdiğin orijinal uygulama yapısını korur.
int led1=7;
int buton=8;
int durum=0;
int butondeger=0;
void setup() {
pinMode(led1,OUTPUT);
pinMode(buton,INPUT);
}
void loop() {
butondeger=digitalRead(buton);
if(butondeger==HIGH && durum==0){
ledyak();
durum=1;
delay(200);
}else if(butondeger==HIGH && durum==1){
ledsondur();
durum=0;
delay(200);
}
}
void ledyak(){
digitalWrite(led1,HIGH);
//video da 4 led ile çalışmıştım.
}
void ledsondur(){
digitalWrite(led1,LOW);
}
Bu sürümde INPUT_PULLUP kullanıldı. Böylece harici pull-down dirence gerek kalmadan buton daha kararlı okunabilir. Butona basıldığı an yakalanarak LED durumu değiştirilir.
int led1 = 7;
int buton = 8;
bool ledDurum = false;
bool oncekiButonDurum = HIGH;
void setup() {
pinMode(led1, OUTPUT);
// INPUT_PULLUP kullanıldığında butonun bir ucu pine,
// diğer ucu GND'ye bağlanır.
pinMode(buton, INPUT_PULLUP);
digitalWrite(led1, LOW);
}
void loop() {
bool butonDurum = digitalRead(buton);
// Butona yeni basıldığı anı yakalar.
// INPUT_PULLUP kullanımında basılınca LOW okunur.
if (oncekiButonDurum == HIGH && butonDurum == LOW) {
ledDurum = !ledDurum;
digitalWrite(led1, ledDurum ? HIGH : LOW);
delay(200); // basma sıçramasını azaltmak için basit debounce
}
oncekiButonDurum = butonDurum;
}
Bu kodda butonun bir ucu 8 numaralı pine, diğer ucu GND’ye bağlanmalıdır. INPUT_PULLUP kullanıldığı için butona basılınca değer LOW okunur.