Butonlar önemli çünkü mikroişlemciler ile yapacağımız herhangi bir robotik uygulamada, robota bu butonlar sayesinde yön verme gibi bir seçeneğimiz bulunmakta. Oyuncak arabalar için git/gel komutları gibi.
Arduino'dan önce kullanmış olduğum MSP430 Launchpad üzerinde kendi butonu bulunmaktaydı ve geriye sadece onu programa okutmak kalıyordu. Arduino UNO'da sadece reset butonu olduğu için bu butonu kendimiz harici olarak eklicez.
Butonu şemada görüldüğü gibi +Vin ile toprak arasına bir direnç ile birlikte bağlıcaz.
Arduino, PC ile seri haberleşme yapabilme özelliğine sahip bir mikroişlemci. Arduino programının üst menüsünde bulunan Tools kısmından Serial Monitor yazan yere tıklarsak seri haberleşmeyi gösterecek olan pencereyi görebiliriz. Elbette ki bu seri haberleşmeyi kullanmamız için gereken bir komutumuz olacak.Bir kez kullanacağımız için bu komutu void setup() içerisinde kullanıcaz.
Serial.begin(9600);
Şemamızdaki devreyi kurduktan sonra aşağıdaki komutları yükleyebiliriz artık mikroişlemcimize.
int buton = 2; // 2.pini isimlendirdik
void setup() {
Serial.begin(9600); //9600 baud hızında seri haberleşme için
pinMode(buton, INPUT_PULLUP); // 2.pinin giriş olduğunu belirttik
}
void loop() {
int butondurumu = digitalRead(buton); //buton durum adında integer bir değeri programa okuttuk ve bunu da butonun durumu olarak belirledik (1 ya da 0)
Serial.println(butondurumu); // Seri Haberleşme ile butonun durumu ekrana yansıtılıyor.
delay(20); // değer okunurken 2 değer arasında ki süre ms.
}
INPUT_PULLUP komutunu kullandım çünkü sadece INPUT komutunu kullandığımda buton değerleri saçmaladı biraz. INPUT_PULLUP komutunu kullandığımda sonuçlarım daha sağlıklı oldu.
Mikroişlemcilerin tipine göre butonların okunması farklılık gösterebiliyor. Arduino'da butona bastığımızda "0", basılmadığında "1" sonucunu alıyoruz.
Seri haberleşme özelliği sayesinde butonun durumunu ekranda görebiliyoruz. 0 ise basılı , 1 ise basılı değil.
Küçük bir uygulama yapalım şimdi. Bir portu input, başka bir portu output olarak kullanalım. Çıkışa led bağlayalım,butona bastığımızda led yansın diğer koşulda da sönük halde kalsın. Devremizi aşağıdaki gibi bağlayalım.
2.pine buton, 4.pine de led bağladık.Komutlar :
int buton = 2; //buton'a 2 sayısı atandı
void setup() {
Serial.begin(9600); //Seri Haberleşme Kodu
pinMode(buton, INPUT_PULLUP); //2.pin giriş oldu
pinMode(4, OUTPUT); //4.pin çıkış oldu
}
void loop() {
int butondurumu = digitalRead(buton); // butondan okunan sonuç butondurumuna atandı
delay(20);
if (butondurumu == 0)
{ digitalWrite (4, HIGH);
Serial.println("LED YANDI");} //buton basılıysa led yanık halde // ve ekrana yansıtılıyor
else
{digitalWrite (4, LOW);
Serial.println("LED SONDU");} //buton basılı değilse led sönük halde ve ekrana yansıtılıyor
}
Videosu da burda.
Hocam merhabalar. bir sorum olacaktı. 2×16 lcd ekrana 4 adet buton bağlayıp her birine basınca ekranda bir yazı yazmasını istiyorum. Yani her butonda bir yazı bilgisi olacak. Kullandığım buton çıt çıt buton. Ancak mantığını bir türlü kuramadım. Bir butonla deneme yapıyorum ama bir türlü işin içinden çıkamadım. Arduinoda yeniyim daha. Yazdığım kodlar şu şekilde. Yanlışım nerede acaba?
YanıtlaSil#include
const int butonPin=13;
int butondurum = 0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
pinMode(butonPin, INPUT_PULLUP);
}
void loop() {
butondurum=digitalRead(butonPin);
if (butondurum == HIGH){
lcd.begin(16, 2);
lcd.print(“butona basildi”);
delay(5000);
}
else{
lcd.print(“Butona basilmadi”);
}
}