Arduino ile Buton Kontrolü – 12. Ders

Günlük hayatımızda bir çok yerde birden çok buton kullanılmaktadır. Lambayı açarken, bilgisayarı açarken, bazı arabları çalıştırırken vb. butonlar kullanılabilmektedir.

Buton arasında az bir boşluk olan bir tel gibi düşünülebilir. Butona bastığınızda bu boşluk kapanır ve buton elektriği iletir hale gelir.

Arduino daki dijigotal pinler (bazen analog da kullanılabilir) bir butona bağlanabilir. Butona bağladığımız pin i giriş pini olarak ayarlarız (INPUT)

4 Bacaklı Push Buton
push button
ON OFF Mini Anahtar Buton
on off buton

Buton devresi örneği
Breadboard üzerinden devre örneği

Benzer bir örnek daha

Arduino ya bir buton bağladığımız zaman arduino ya HIGH(5V) veya LOW(0V) değeri gelmelidir.

Herhangi bir kararsızlık durumu olmaması gerekmektedir.

Normalde butona bastığımızda arduino ya 5V elektrik gider. Peki butona basmadığımızda ne olur? İşte bu durumda kararsızlık olmaktadır. Bu kararsızlığı önlemek için butonun arduino ya bağlı olan ayağına 10KOhm direnç bağlanmaktadır.

Bu direnç bağlantısına pull-up veya pull-down direnç bağlantısı denmektedir.

pull down direnç
pull up direnç

pull-up direnç bağlantısında butona basıldığında arduino nun giriş pini toprağa(GND) ulaşmakta, basılmadığında 5V düzeyinde olmaktadır.

pull-down direnç bağlantısında tam tersi bir durum vardır. Butona basıldığında arduinonun giriş pini 5V’ a, butona basılmadığında toprağa(GND) ye ulaşmaktadır.

ÖRNEK BAĞLANTILAR

Pull Down Direnç Bağlantısı

Malzemeler:

  • 1 Adet Arduino UNO
  • 1 Adet 4 bacaklı push buton
  • 1 adet 10kOhm direnç
  • 1 adet breadboard
  • Yeterli sayıda kablo
pull down direnç bağlantısı
void setup()
{
  pinMode(7, INPUT); //7 numaralı pin giriş olarak ayarlandı
  Serial.begin(9600); //Seri port 9600 hızında başlatıldı
}

void loop()
{
  if(digitalRead(7)==1){ //eğer 7 numaralı pine elektrik gelmişse
  Serial.println("butona basıldı"); //seri porta butona basıldı yaz
  }
}

Serial.begin() seri portu başlatmak için gerekli olan komuttur.

digitalRead(7) dijital pinlerden okuma yapmak için kullanılır. Buradaki kodumuzu 7 numaralı dijital pin den okuma yapmaktadır.

Serial.println(“butona basıldı”); // Seri port ekranına yazı yazmak için kullanılır. Her yazılanı yeni satıra ekler.

Serial.print(“butona basıldı”); olarak yazsaydık yazılanları yan yana yazardı.

Arduino’ da seri port ekranını açmak için

Seri portu açmadan önce arduino yu bilgisayara bağlamayı unutmayalım!

if-else ile Karar Yapısı

if Türkçede eğer anlamına gelmektedir. if ile herhangi bir koşulun sağlanıp sağlanmadığını kontrol ederiz.

else ise if ile belirttiğimiz koşul sağlanmaz ise çalışmasını istediğimiz kodların olduğu bölümdür.

İfadeAnlamı
x==yEğer x ve y birbirine eşitse (matematiksel olarak) doğrudur, değilse yanlıştır.
x<yEğer x, y’den küçükse doğrudur; değilse yanlıştır.
x<=yEğer x, y’den küçük ya da eşitse doğrudur; değilse yanlıştır.
x>yEğer x, y’den büyükse doğrudur; değilse yanlıştır.
x>=yEğer x, y’den büyük ya da eşitse doğrudur; değilse yanlıştır.
x!=yEğer x, y’den farklı ise (büyük ya da küçük) doğrudur; değilse yanlıştır.
Mantıksal İfadelerAçıklama
&&Mantıksal VE anlamına gelir(AND)
||Mantıksal VEYA anlamına gelir (OR)
!mANTIKSAL DEĞİL anlamına gelir (NOT)

BUTON KULLANARAK LED YAKMA UYGULAMASI

Malzemeler

Yukarıdaki malzemelere ilaveten

  • 1 adet led
  • 1 adet 330Ohm direnç

void setup()
{
  pinMode(7, INPUT); //7 numaralı pin giriş olarak ayarlandı
  pinMode(3,OUTPUT);
  Serial.begin(9600); //Seri port 9600 hızında başlatıldı
}

void loop()
{
  if(digitalRead(7)==1){ //eğer 7 numaralı pine elektrik gelmişse
      digitalWrite(3,HIGH);
  }else{
      digitalWrite(3,LOW);
  }
}

Pull Up Direnç Bağlantısı

Devremizi aşağıdaki şekilde değiştiriyoruz.

pull-up direnç

Bu durumda butona basıldığında arduino’ ya 0V, ancak butona basılmadığında 5V gitmektedir. Yani butona basılmadığı zaman LED yanmaktadır. Bu durumu düzeltmek için

void setup()
{
  pinMode(7, INPUT); //7 numaralı pin giriş olarak ayarlandı
  pinMode(3,OUTPUT);
  Serial.begin(9600); //Seri port 9600 hızında başlatıldı
}

void loop()
{
  if(digitalRead(7)==0){ //eğer 7 numaralı pine elektrik gelmemişse. Yani lojik 0
  	digitalWrite(3,HIGH);
  }else{
  	digitalWrite(3,LOW);
  }
}

Burada kodumuzu if(digitalRead(7)==0) olarak değiştirdik.

Dahili Pull-Up Direnci

Birçok arduino modelinde dahili pull-up direnci vardır. Dahili pull-up dirençleri sayesinde buton kullanırken ekstra direnç kullanmamıza gerek kalmaz.

Bunun için aşağıdaki kod yazılır.

pinMode(7,INPUT_PULLUP); 

Arduino’ da sadece pull-up direnci vardır pull-down direnci yoktur.

Bunun için devre ve kodlarımızı şu şekilde değiştirmemiz gerekmektedir.

Görüldüğü gibi buton için herhangi bir direnç kullanmadık.

void setup()
{
  pinMode(7, INPUT_PULLUP); //7 numaralı pin PULLUP olarak ayarlandı
  pinMode(3,OUTPUT);
  Serial.begin(9600); //Seri port 9600 hızında başlatıldı
}

void loop()
{
  if(digitalRead(7)==0){ //eğer 7 numaralı pine elektrik gelmemişse. Yani lojik 0
  	digitalWrite(3,HIGH);
  }else{
  	digitalWrite(3,LOW);
  }
}

Kodlarımızda pinMode(7, INPUT_PULLUP); kısmına dikkat edelim.

Son olarak daha önceki konularda öğrendiğimiz gibi kodlarımızın daha düzenli ve kontrol edilebilir olması için gerekli alanları değişkenlere aktaralım.

byte buton1=7;
byte led1=3;
void setup()
{
  pinMode(buton1, INPUT_PULLUP); //7 numaralı pin PULLUP olarak ayarlandı
  pinMode(led1,OUTPUT);
  Serial.begin(9600); //Seri port 9600 hızında başlatıldı
}

void loop()
{
  if(digitalRead(buton1)==LOW){ //eğer 7 numaralı pine elektrik gelmemişse. Yani lojik 0
  	digitalWrite(led1,HIGH);
  }else{
  	digitalWrite(led1,LOW);
  }
}

Butonlar konusunun da sonuna geldik. İyi kodlamalar 🙂

Yayınlayan

Ahmet KADAK

Bilgisayar Öğretmeni & Bilgisayar Mühendisi

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.