Arduino ile Analog Butonlar

Bu örnekte Arduino'nun analog giriş pinlerinden yalnızca biri kullanılarak 8 buton bağlanmıştır.

Bu örnekte Arduino'nun analog giriş pinlerinden yalnızca biri kullanılarak 8 buton bağlanmıştır. Her buton basıldığında bağlı olduğu dirençlere göre A0 pinine giden gerilim değişmekte ve bu değerden yola çıkarak hangi butona basıldığı anlaşılmaktadır.

Bu örnek, daha önce paylaştığımız potansiyometre örneğine benzetilebilir. Tek fark potansiyometre döndürülerek analog pinde 0 - 5 volt arası değişken gerilim oluştururken, butonlara bağlı dirençler sabit olduğu için her buton basıldığında buton için belirlediğimiz miktarda gerilim oluşur.

Dirençler Sırasıyla:
2K - 220R, 330R, 470R, 330R, 1K, 1K, 2K

Proje Kodu:

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 8, 2, 3, 4, 5);

#define BTN_LEFT	0
#define BTN_DOWN	1
#define BTN_UP 		2
#define BTN_RIGHT	3
#define BTN_A		4
#define BTN_B		5
#define BTN_C		6
#define BTN_D		7
#define BTN_NONE	8

int get_key()
{
  int val = analogRead(A0);
  
  if (val > 1000) return BTN_NONE;
  if (val < 100) return BTN_LEFT;
  if (val < 200) return BTN_DOWN;
  if (val < 300) return BTN_UP;
  if (val < 400) return BTN_RIGHT;
  if (val < 500) return BTN_A;
  if (val < 600) return BTN_B;
  if (val < 700) return BTN_C;
  if (val < 800) return BTN_D;
}

void setup() { lcd.begin(16, 2); }

void loop()
{  
  int key = get_key();
  
  lcd.setCursor(0, 0);
  
  switch(key)
  {
    case BTN_NONE:	lcd.print("NONE "); break;
    case BTN_LEFT:	lcd.print("LEFT "); break;
    case BTN_DOWN:	lcd.print("DOWN "); break;
    case BTN_UP:	lcd.print("UP   "); break;
    case BTN_RIGHT:	lcd.print("RIGHT"); break;
    case BTN_A:		lcd.print("A BTN"); break;
    case BTN_B:		lcd.print("B BTN"); break;
    case BTN_C:		lcd.print("C BTN"); break;
    case BTN_D:		lcd.print("D BTN"); break;
  }
  
  
  delay(100);
}

 

Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Yukarı Git