Arduino Joystick Kontrolü
Yuvarlak butonu ile tek parmağımızla kolayca kontrol edebildiğimiz Arduino uyumlu en güzel modüllerden birisidir Joystick. Projemizde oyun konsolunu Arduino ile birleştirip bir kırmızı led kontrolü sağlayacağız.
Kullanılan Malzemeler
- Bir adet Arduino Uno kartı,
- Bir adet Arduino uyumlu Joystick, Bir adet 1 kiloohm direnç,
- iki adet led.
Tasarım
Projenin beyni her zaman oluğu gibi yine, Arduino Uno mikrodenetleyicisidir, Analog verileri okuyarak giriş/çıkış portları üzerinden işlemler yapacağız, Ayrıca serial monitör üzerinden de bu verilerin komutlara göre pozisyonları incelenebilir. Kullanılan 2 eksenli oyun çubuğu, x ve y koordinatlarını basit ve kolay bir şekilde kontrol etmemizi sağlar. Her eksene bağlı bir 10K potansiyometresi yukarı/aşağı ve sol/sağ pozisyonların oransal geri bildirimini sağlar. Yaylı konsol buton’u serbest bırakıldığında her zaman merkezi konumuna döner.
Devremizde x koordinat pozisyonunu Arduino analog 0 pini, y koordinat pozisyonunu ise analog 1 pini üzerinden okuyacağız. analogRead() fonksiyonu ile okunan analog veriler 0 ile 1023 arasındaki sayılarla ifade edilecek. 512 numaralı analog veri konsol buton’unu merkezi konumda/ rölantide olduğunu belirtir. Okunan analog verilerin görsel çıkışına sağlayacak olan led ise önündeki 1 kiloohm direnç ile Arduino kartın dijital 13 pinine bağlıdır. Konsol butonunu sağ/sol ve yukarı/aşağı oynattıkça led üzerinde değişiklikler olacaktır. İsterseniz ikinci bir led’i konsol buton’unun rölanti halini gözlemlemek için dijital 11 ucuna bağlayabilirsiniz. Konsolun SW yani buton ucunu, Arduino dijital 12 pin’ine bağlayınız.
Kodlar
int birinci_led = 13; int yukari_asagi = 0; int sag_sol = 1; int giris_1 = 0; int giris_2 = 0; int button=12; int ikinci_led=11; int buton_durumu=0; void setup() { pinMode(birinci_led, OUTPUT); pinMode(button,INPUT); pinMode(ikinci_led, OUTPUT); digitalWrite(button,HIGH); } int handleValue(int data) { return (data * 9 / 1024) + 48; } void loop() { giris_1 = analogRead(yukari_asagi); delay(100); giris_2 = analogRead(sag_sol); digitalWrite(birinci_led, HIGH); delay(giris_1); digitalWrite(birinci_led, LOW); delay(giris_2); buton_durumu = digitalRead(button); if (buton_durumu == LOW) { digitalWrite(ikinci_led, HIGH); } else { digitalWrite(ikinci_led, LOW); } }