ARDUİNO İLE BUTON KULLANIMI, BAĞLANTI VE KODLARI
BU YAZIDA ŞU KONULARDAN BAHSEDİLECEKTİR
BUTON NEDİR VE BUTONLAR NASIL ÇALIŞIR
BUTON ÇEŞİTLERİ NELERDİR
ARDUİNO VE BUTON İLE YAPILAN PROJELER NELERDİR
ARDUİNO İLE BUTON KULLANIMI, BAĞLANTI VE KODLARI
BİR BUTON İLE LED YAKMAYA ÇALIŞALIM
ARDUİNO İLE BUTONA KAÇ DEFA BASILDIĞINI SAYMA
ARDUİNO BUTON DEBOUCING (FİLTRELEME)
ARDUİNO BUTON INTERRUPT (ARAYA GİRME)
ARDUİNO İLE BUTON KULLANIRKEN NELERE DİKKAT ETMELİYİZ
ARDUİNO İLE BUTON KULLANIMI BAĞLANTILAR VE KODLAR
BUTON NEDİR VE BUTONLAR NASIL ÇALIŞIR
Buton, mekanik veya elektronik olarak tasarlanmış, basılarak veya dokunularak etkinleştirilen bir araçtır. Butonlar genellikle elektrik akımını açma veya kapatma, sinyallerin gönderilmesi veya alınması, sistemlerin çalışmasını başlatma veya durdurma gibi işlemler için kullanılır.
Mekanik butonlar, genellikle fiziksel bir anahtar veya düğme şeklinde tasarlanırlar. Basıldığında hareket eden bir mekanizma ile içlerindeki kontaklar arasındaki bağlantı kesilir veya yapılır. Örneğin, bir lamba butonu basıldığında lamba yanar veya söner.
Elektronik butonlar ise, genellikle bir sensör veya mikroişlemci tarafından kontrol edilirler. Örneğin, bir cep telefonunda ekrana dokunarak bir uygulamayı açabiliyorsunuz. Bu butonlar sensörler veya mikroişlemciler tarafından okunur ve işlem yapılır.
Butonlar genellikle, basıldığında işlem yapmak için kullanılır veya basılı tutulduğunda farklı bir işlem yapmak için kullanılır. Örneğin, bir kamera butonu basıldığında fotoğraf çekilir ve basılı tutulduğunda video kaydı başlar.

BUTON ÇEŞİTLERİ NELERDİR
Butonlar birçok farklı tipte ve çeşitte üretilir. Burada en yaygın olanlarından bahsedelim
- Mekanik Butonlar: Fiziksel bir düğme veya anahtar şeklinde tasarlanmıştır. Basıldığında mekanik bir mekanizma ile içlerindeki kontaklar arasındaki bağlantı kesilir veya yapılır.
- Membran Butonlar: Özellikle elektronik cihazlar için tasarlanmıştır. Yüzeyine dokunarak işlem yapar. Bu butonlar genellikle uzun ömürlüdür ve suya dayanıklıdır.
- Sıcaklık Butonları: Sıcaklık değişimine göre işlem yapar. Örneğin, bir termometre cihazında kullanılabilir.
- Proximity Butonlar: Yakınlık sensörleri ile çalışır. Örneğin, bir mobil cihazda parmak ile dokunmadan işlem yapmak için kullanılabilir.
- Touch Butonlar: Dokunmatik sensörler ile çalışır. Örneğin, cep telefonlarında ve tabletlerde kullanılır.
- Rocker Butonlar: Açma ve kapama işlemi yapmak için kullanılır. Örneğin, bir lamba veya ses aygıtındaki kontrol butonları.
- Push-Pull Butonlar: Basılı tutulmak suretiyle çalışır. Örneğin, bir fırçalı motorun hız kontrolü.
- Rotary Encoder Butonlar: Döndürülerek işlem yapar. Örneğin, bir radyo veya televizyon cihazında kanal değiştirmek için kullanılabilir.
- Joystick Butonlar: Yön tuşlarının yanı sıra hareket ederek işlem yapar. Örneğin, video oyunları veya drone kontrol cihazlarında kullanılabilir.
ARDUİNO VE BUTON İLE YAPILAN PROJELER NELERDİR
Arduino ve butonlar ile yapılabilecek birçok proje vardır. Aşağıda bazı örnekler verilmiştir:
- Basit Lamba Kontrolü: Bir lamba ve bir buton kullanarak, butona basıldığında lamba yanmasını veya sönmesini sağlamak için kod yazabilirsiniz.
- Buton Kontrollü Servo Motor: Bir servo motor ve bir buton kullanarak, butona basıldığında motorun hareket etmesini veya durmasını sağlamak için kod yazabilirsiniz.
- LED Şerit Kontrolü: Bir LED şerit, birkaç buton ve bir Arduino kullanarak, LED şeridin renklerini veya parlaklığını kontrol etmek için kod yazabilirsiniz.
- Buton Kontrollü Ses Çalar: Bir ses çalar ve bir buton kullanarak, butona basıldığında ses çalmak için kod yazabilirsiniz.
- Buton Kontrollü LCD Ekran: Bir LCD ekran, birkaç buton ve bir Arduino kullanarak, butonlar kullanarak ekrana yazı yazmak veya semboller göstermek için kod yazabilirsiniz.
- Otomatik Kapı Açma-Kapama Sistemi: Bir kapı sensörü, bir kapı motoru ve bir buton kullanarak, butona basıldığında kapının otomatik olarak açılmasını veya kapatılmasını sağlamak için kod yazabilirsiniz.
- Buton Kontrollü Robot: Bir robot ve birkaç buton kullanarak, butonlar kullanarak robotun hareket etmesini veya sensörleri kullanmasını sağlamak için kod yazabilirsiniz.
- Buton Kontrollü Sıcaklık ve Nem Sensörü: Bir sıcaklık ve nem sensörü, birkaç buton ve bir Arduino kullanarak, butonlar kullanarak sensörlerin okuduğu değerleri görüntülemek için kod yazabilirsiniz.
ARDUİNO İLE BUTON KULLANIMI, BAĞLANTI VE KODLARI

Arduino ile buton kullanmak için, butonun bir ucu GND pini, diğer ucu ise bir digital pini ile bağlanır. Bu bağlantı için, genellikle bir direnç eklenir, çünkü buton kontakları arasında direnç olabilir. Bu direnci, butona basıldığında devreye girer ve Arduino tarafından okunur.
Aşağıda basit bir buton bağlantısı ve kod örneği veriyorum bu kod ile Arduino ile buton durumunu seri ekrandan okuyabilirsiniz:
///////////////
// Buton Bağlantısı
// Butonun bir ucu GND pini’e, diğer ucu ise pin 2’ye bağlanır
// Buton arasına 4.7K ohm bir direnç eklenir.
const int buttonPin = 2; // Butonun bağlandığı pin
void setup() {
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop() {
int buttonState = digitalRead(buttonPin);
Serial.print(“Button State: “);
if (buttonState == HIGH) {
Serial.println(“Pressed”);
} else {
Serial.println(“Released”);
}
delay(1000);
}
///////////////
Bu kod örneğinde, buton durumu döngü içinde sürekli olarak okunur ve seri ekrana yazdırılır. Buton basılı olduğunda “Pressed” yazdırılır ve bırakıldığında “Released” yazdırılır. delay(1000) fonksiyonu ile ekranda görüntünün rahat okunması için 1 saniyelik bir bekleme yapılmıştır.
KODU AÇIKLAMAK GEREKİRSE:
- pinMode(buttonPin, INPUT): Bu komut, belirtilen pinin (buttonPin) girdi olarak kullanılmasını sağlar.
- Serial.begin(9600) : Bu komut, seri haberleşme için 9600 baud hızını ayarlar. Bu hız, Arduino ve bilgisayar arasındaki veri hızıdır.
- Serial.print(“Button State: “); : Bu komut, seri ekrana “Button State: ” yazdırır.
- Serial.println(“Pressed”) : Bu komut, seri ekrana “Pressed” yazdırır ve alt satıra geçer.
- Serial.println(“Released”) : Bu komut, seri ekrana “Released” yazdırır ve alt satıra geçer.
- digitalRead(buttonPin) : Bu fonksiyon, belirtilen pinin (buttonPin) durumunu okur. Eğer pin HIGH (5V) değerinde ise fonksiyon 1 değerini döndürür ve eğer pin LOW (0V) değerinde ise fonksiyon 0 değerini döndürür.
- if (buttonState == HIGH) : Bu komut, buttonState değişkeninin değerini kontrol eder. Eğer buttonState HIGH (1) değerindeyse, içindeki kodlar çalıştırılır ve “Pressed” yazdırılır. Eğer buttonState LOW (0) değerindeyse, else bloğundaki kodlar çalıştırılır ve “Released” yazdırılır.
- delay(1000) : Bu fonksiyon, programın belirtilen milisaniye (1000ms = 1s) boyunca beklemesini sağlar. Bu kod örneğinde, her döngüde 1 saniye boyunca bekleme yapılır ve buton durumu tekrar okunur.
- void loop() : Bu fonksiyon, Arduino programının çalışmasını sürdürdüğü döngüdür. Program başladıktan sonra loop() fonksiyonu sürekli olarak çalışır ve içindeki kodlar tekrar tekrar çalıştırılır.
- void setup() : Bu fonksiyon, program başladığında çalıştırılacak ilk kodları içerir. Bu kodlar sadece bir kere çalıştırılır ve genellikle pin modlarının ve başka başlangıç ayarlarının yapılması için kullanılır.
ARDUİNO İLE BUTON KULLANIRKEN DİRENÇ KULLANMAK GEREKİR Mİ?
Arduinoya buton bağlamak için direnç kullanmak gerekli değildir, ancak direnç kullanmak butonun daha stabil ve güvenli bir şekilde çalışmasını sağlar.
Butonlar arasında yer alan kontaklar arasında direnç olabilir. Bu direnç, butona basıldığında devreye girer ve Arduino tarafından okunur. Bu direnç, butonun çalışmasını etkileyebilir. Özellikle, buton bırakıldığında kontaklar arasındaki direnç nedeniyle butonun hala aktif olarak görünmesi gibi sorunlar oluşabilir. Bu sorunları önlemek için buton arasına seri olarak bir direnç bağlamak gerekir.
Ayrıca, butonun arduino ile bağlantısı için kullanılan pin’in pull-up veya pull-down direncini kullanarak butonun çalışmasını sağlamak da mümkündür. Bu yöntem arduino tarafından sağlanan bir özellik olduğu için yazılım tarafından yapılmaktadır.
BUTON KULLANIRKEN PULL-UP PULL-DOWN DİRENÇLERİ NASIL KULLANILIR
Arduino ile butonları kullanırken, pull-up veya pull-down dirençleri kullanmak, butonun daha stabil ve güvenli bir şekilde çalışmasını sağlar. Bu dirençler, butonun arasındaki kontaklar arasındaki direnci azaltır ve butonun daha doğru şekilde okunmasını sağlar.
Pull-up direnci, buton arasına seri olarak bağlanan bir dirençtir ve buton normal olarak açık (open) konumda olduğunda çalışır. Bu durumda, buton arasındaki direnç yüksek değerdedir ve pin LOW (0V) değerinde okunur. Butona basıldığında, buton arasındaki direnç düşer ve pin HIGH (5V) değerinde okunur.
Pull-down direnci ise buton arasına paralel olarak bağlanan bir dirençtir ve buton normal olarak kapalı (closed) konumda olduğunda çalışır. Bu durumda, buton arasındaki direnç düşük değerdedir ve pin HIGH (5V) değerinde okunur. Butona basıldığında, buton arasındaki direnç yükselir ve pin LOW (0V) değerinde okunur.
Arduino, pinMode() fonksiyonu ile INPUT_PULLUP veya INPUT_PULLDOWN modlarını kullanarak pin’in pull-up veya pull-down direncini kullanmasını sağlar.
PULL-UP VE PULL-DOWN FONKSİYONLARI İLE ARDUİNO ÜZERİNDEN BUTON KONTROLÜ
pull-up ve pull-down direnci kullanarak buton durumunu seri ekrandan okumanız için aşağıdaki kodları kullanabilirsiniz:
///////////
const int buttonPin = 2; // Butonun bağlandığı pin
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // pull-up direnci aktif
Serial.begin(9600);
}
void loop() {
int buttonState = digitalRead(buttonPin);
Serial.print(“Button State: “);
if (buttonState == LOW) {
Serial.println(“Pressed”);
} else {
Serial.println(“Released”);
}
delay(1000);
}
//////////////
Bu kod örneğinde, pinMode(buttonPin, INPUT_PULLUP) komutu ile pull-up direnci aktif hale getirilmiştir. Bu durumda, buton normal olarak açık (open) konumda olduğunda pin HIGH (5V) değerinde okunur. Butona basıldığında, buton arasındaki direnç düşer ve pin LOW (0V) değerinde okunur. Bu nedenle, if(buttonState == LOW) kontrol bloğu içinde “Pressed” yazdırılır ve else bloğu içinde “Released” yazdırılır.
Eğer pull-down direnci kullanmak isterseniz, pinMode(buttonPin, INPUT_PULLDOWN) komutunu kullanabilirsiniz. Bu durumda, buton normal olarak kapalı (closed) konumda olduğunda pin LOW (0V) değerinde okunur. Butona basıldığında, buton arasındaki direnç yükselir ve pin HIGH (5V) değerinde okunur. Bu nedenle, if(buttonState == HIGH) kontrol bloğu içinde “Pressed” yazdırılır ve else bloğu içinde “Released” yazdırılır.
BİR BUTON İLE LED YAKMAYA ÇALIŞALIM

////////////
const int buttonPin = 2; // Butonun bağlandığı pin
const int ledPin = 13; // LED’in bağlandığı pin
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // pull-up direnci aktif
pinMode(ledPin, OUTPUT);
}
void loop() {
int buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
/////////////
Bu kod örneğinde, butona basıldığında, buton arasındaki direnç düşer ve if bloğu içindeki kodlar çalışır, ledPin’i HIGH(5V) değerine getirir. Bu durumda led yanar. Buton bırakıldığında, buton arasındaki direnç yükselir ve else bloğu içindeki kodlar çalışır, ledPin’i LOW(0V) değerine getirir. Bu durumda led söner. Bu kod örneğinde pull-up direnci kullanılmıştır.
pull-down direnci kullanarak butonu kontrol etmek için kullandığınız kod aşağıdaki gibi de kullanılabilir:
///////////////
const int buttonPin = 2; // Butonun bağlandığı pin
const int ledPin = 13; // LED’in bağlandığı pin
void setup() {
pinMode(buttonPin, INPUT_PULLDOWN); // pull-down direnci aktif
pinMode(ledPin, OUTPUT);
}
void loop() {
int buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
////////////////
Bu kod örneğinde pull-down direnci kullanılmıştır. Bu durumda buton normal olarak kapalı (closed) konumda olduğunda pin LOW (0V) değerinde okunur. Butona basıldığında, buton arasındaki direnç yükselir ve pin HIGH (5V) değerinde okunur. Bu nedenle, if(buttonState == HIGH) kontrol bloğu içinde ledPin’i HIGH(5V) değerine getirir. Bu durumda led yanar. Buton bırakıldığında, buton arasındaki direnç düşer ve else bloğu içindeki kodlar çalışır, ledPin’i LOW(0V) değerine getirir. Bu durumda led söner.
Arduino ile LED kullanırken direnç kullanmak gerekli değildir, ancak direnç kullanmak LED’in daha uzun ömürlü ve güvenli bir şekilde çalışmasını sağlar. LED’ler, direnç kullanmadan doğrudan bağlandığında, çok yüksek bir akım geçebilir ve bu nedenle çabuk yıpranabilir veya tamamen arızalayabilir.
LED’lerin çalışması için gerekli olan akım seviyesi, LED tipine ve renklerine göre değişebilir. Ayrıca, arduino tarafından sağlanan pinlerin çıkışından geçen maksimum akım seviyeleri de farklılık gösterir. Bu nedenle, LED’leri çalıştırmak için gerekli olan akımı sağlamak için direnç kullanmak gerekir. Bu direnç,
ARDUİNO İLE BUTONA KAÇ DEFA BASILDIĞINI SAYMA (ARDUİNO BUTON COUNTER)
Arduino ile butona kaç defa basıldığını saymak için aşağıdaki kodları kullanabilirsiniz:
////////////////
const int buttonPin = 2; // Butonun bağlandığı pin
int buttonCounter = 0; // Butona basılan sayaç
void setup() {
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop() {
int buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
buttonCounter++;
Serial.print(“Button presses: “);
Serial.println(buttonCounter);
delay(100);
}
}
//////////////
Bu kod örneğinde, buttonCounter değişkeni, butona basılan sayaç olarak kullanılmaktadır. Her döngüde, buttonState değişkeninin değerini okur ve eğer LOW (0) değerindeyse, buttonCounter değişkeni 1 arttırılır ve seri ekrana basılan sayısı yazdırılır. Bu kod örneğinde, delay(100) komutu ile her butona basıldığında 100ms beklenir. Bu, butonun çok hızlı bir şekilde birden fazla kez basılmasını engellemek için kullanılır. Bu kod örneğinde pull-up direnci kullanılmamıştır, ama pull-up direnci kullanmak isterseniz pinMode(buttonPin, INPUT_PULLUP) komutunu kullanabilirsiniz.
ARDUİNO BUTON DEBOUCING (millis(); FİLTRELEME)
Arduino ile buton kullanırken, butonun mekanik yapısı nedeniyle, butonu basarken veya bırakarken kısa süreli olarak arızalı (bouncing) sinyaller oluşabilir. Bu arızalı sinyaller, butonun birden fazla defa basıldığını veya bırakıldığını gösterebilir, bu da istenmeyen sonuçlar doğurabilir. Bu nedenle, buton arızasını engellemek için debouncing yapmak gerekir.
Debouncing, butonun arızalı sinyallerini filtrelemek için kullanılan bir yöntemdir. Bu yöntem, butonun basıldığı veya bırakıldığı anın gerçekte ne olduğunu belirlemek için butonun durumunu kontrol etmek için kısa bir zaman aralığı belirler. Bu aralık içinde butonun durumu birden fazla kez kontrol edilir ve eğer butonun durumu değişmediyse, gerçek bir buton basma veya bırakma olarak kabul edilir.
Arduino ile debouncing yapmak için, millis() fonksiyonu kullanılabilir. Bu fonksiyon, arduino’nun çalıştığı süre boyunca geçen milisaniye sayısını döndürür. Bu, butonun durumunu kontrol etmek için kullanılabilecek bir zaman aralığını belirlemek için kullanılabilir. Örneğin, aşağıdaki kod, butona basıldığı anı ve butonun bırakıldığı anı takip eder ve gerçek bir buton basma veya bırakma olarak kabul edilir.
///////////
const int buttonPin = 2; // Butonun bağlandığı pin
int buttonCounter = 0; // Butona basılan sayaç
unsigned long previousMillis = 0; // Önceki zaman
const long debounceDelay = 50; // Debouncing zaman aralığı
void setup() {
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop() {
int buttonState = digitalRead(buttonPin);
if ((millis() – previousMillis) > debounceDelay) {
if (buttonState == LOW) {
buttonCounter++;
Serial.print(“Button presses: “);
Serial.println(buttonCounter);
}
previousMillis = millis();
}
}
///////////////////
Bu kod örneğinde, buton debouncing için previousMillis değişkeni kullanılır. previousMillis değişkeni, önceki buton durumunun kontrol edildiği zamanı tutar. her döngüde, millis() fonksiyonu ile geçen zaman hesaplanır ve previousMillis değişkeninden çıkarılır. Bu işlem sonucu oluşan değer, debounceDelay değişkeninde belirtilen zaman aralığı ile karşılaştırılır. Evet, devam ediyorum. Eğer zaman aralığı debounceDelay değişkeninde belirtilen değerden daha büyükse, buttonState değişkeni okunur ve eğer buttonState değişkeni LOW değerindeyse (buton basılmış) buttonCounter değişkeni 1 arttırılır ve seri ekrana basılan sayısı yazdırılır. Bu kod, arızalı sinyalleri filtrelemek için debounceDelay değişkeninde belirtilen zaman aralığını kullanarak buton durumunu kontrol eder.
Bu kodun çalışması sırasında, her butona basıldığında, buton durumu kontrol edilir ve eğer gerçek bir buton basma olarak kabul edilirse, buttonCounter değişkeni arttırılır ve seri ekrana yazdırılır. Bu kod örneğinde, pull-up direnci kullanılmamıştır, ama pull-up direnci kullanmak isterseniz pinMode(buttonPin, INPUT_PULLUP) komutunu kullanabilirsiniz.
ARDUİNO BUTON INTERRUPT (attachInterrupt(); ARAYA GİRME)
Buton interrupt, mikroişlemci üzerinde çalışan bir programın çalışmasını durdurarak belirli bir işlevi çalıştırmak için kullanılan bir mekanizmadır. Interrupt, mikroişlemci üzerinde çalışan bir programın çalışmasını durdurarak belirli bir işlevi çalıştırmak için kullanılır. Buton interrupt, butona basıldığında belirli bir işlevi çalıştırmak için kullanılır. Örneğin, butona basıldığında led yanmasını sağlamak veya bir sayaç arttırmak gibi. Bu işlem için butonun pinine bir interrupt fonksiyonu atanır ve buton basıldığında çalışması sağlanır. Arduino ile buton interrupt kullanmak için aşağıdaki kodları kullanabilirsiniz:
////////////////
const int buttonPin = 2; // Butonun bağlandığı pin
volatile int buttonCounter = 0; // Butona basılan sayaç
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(buttonPin), buttonPressed, FALLING);
Serial.begin(9600);
}
void loop() {
// arduino’nun normal işlemleri
}
void buttonPressed() {
buttonCounter++;
Serial.print(“Button presses: “);
Serial.println(buttonCounter);
}
//////////////
Bu kod örneğinde, attachInterrupt() fonksiyonu kullanılarak butonPin’e bağlı olan interrupt’un buttonPressed() fonksiyonunu çağırması sağlanmıştır. Bu fonksiyon çalıştığında butonCounter değişkeni 1 arttır
ARDUİNO İLE BUTON KULLANIRKEN NELERE DİKKAT ETMELİYİZ
Arduino ile buton kullanırken dikkat etmeniz gereken bazı noktalar şunlardır:
- Butonun bağlantısının doğru yapılmış olması: Butonun pinleri doğru şekilde GND ve digital pin arasına bağlanmalıdır.
- Butonun çalışmasının test edilmesi: Butonun çalışıp çalışmadığını test etmek için, Arduino kodunuzda butona basıldığında bir LED yanmasını sağlayabilirsiniz.
- Buton de-bouncing: Butonlar genellikle mekanik olarak yapılır ve basıldığında veya kaldırıldığında kısa süreli olarak arka arkaya birden fazla değişim yapabilirler. Bu nedenle, butonun arka arkaya birden fazla değişim yapmasını önlemek için de-bouncing yapmanız gerekir.
- Debouncing kodlarının kullanımı: Debouncing için birçok yol vardır, ancak en yaygın yolu kullanmak, millis() fonksiyonunu kullanarak geçen zamanı ölçmek ve butona basılması veya kaldırılması durumunda geçen zamanı kontrol etmektir.
- Butonun özellikleri : Butonların çeşitli özellikleri vardır, ancak özellikle kullandığınız uygulamaya göre seçim yapmalısınız. Örneğin, basılı tutulan bir buton için bir toggle switch, basıldığında açılıp kapandığı için bir momentary switch daha uygun olabilir.