Arduino Ders 12: Buton İle Led Kontrolü

Arduino Uygulaması

Buton ile LED Aç/Kapat

Butona her basıldığında LED’in durumunu değiştiren Arduino uygulaması yapacağız.

Arduino buton ile LED aç kapat uygulaması

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.

LED 7 numaralı pine, buton ise 8 numaralı pine bağlanır. Referans devrede buton bağlantısına göre INPUT veya INPUT_PULLUP yöntemi tercih edilebilir.

Arduino buton ile LED devre şeması

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.

Yorum Gönder

Daha yeni Daha eski