In acest articol vom folosi un joystick impreuna cu Arduino.
Un joystick este compus in 2 potentiometre pentru axele X si Y si un buton. In pozitia de repaus cursorul celor 2 potentiometre se afla la mijloc, prin actionarea pe una in axele X sau Y valoarea se va modifica in sus sau in jos. Pentru a putea folosi valorile returnate de catre joystick vom folosi 2 intrari analogice iar pentru buton vom utiliza o intrare digitala. In cazul de fata vom folosi pinii analogici 0 si 1 iar pentru buton pinul digital 2.
Alimentarea acestui joystick se face cu +5V.
Pretul acestui joystick este de 10 lei si poate fi cumparat de aici.
Joystickul folosit in acest articol este cel in fotografia e mai jos:

Valorile obtinute de la joystick le vom testa prima data pe terminalul serial. Sketchul folosit este mai jos:
int buton = 2;
int axa_X = A0;
int axa_Y = A1;
int procent_X;
int procent_Y;
void setup() {
pinMode(buton, INPUT);
digitalWrite(buton, HIGH);
pinMode(axa_X, INPUT);
pinMode(axa_Y, INPUT);
Serial.begin(9600);
Serial.println("Testare joystick");
delay(2000);
}
void loop() {
Serial.print("Buton: ");
Serial.println(digitalRead(buton));
Serial.print("Axa X: ");
procent_X = map(analogRead(axa_X), 0, 1023, 0, 100);
Serial.print(procent_X);
Serial.println("%");
Serial.print("Axa Y: ");
procent_Y = map(analogRead(axa_Y), 0, 1023, 0, 100);
Serial.print(procent_Y);
Serial.println("%");
delay(500);
}
Putem afisa aceste valori si pe un isplay LCD. Pentru acest lucru vom folosi afisajul folosit in acest articol.
Sketchul din acest exemplu este mai jos:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4);
int buton = 2;
int axa_X = A0;
int axa_Y = A1;
int procent_X;
int procent_Y;
void setup() {
pinMode(buton, INPUT);
digitalWrite(buton, HIGH);
pinMode(axa_X, INPUT);
pinMode(axa_Y, INPUT);
lcd.begin();
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print("Testare joystick");
lcd.setCursor(3, 1);
lcd.print("pe afisaj LCD");
lcd.setCursor(1, 3);
lcd.print("electronicstore.ro");
delay(3000);
lcd.clear();
}
void loop() {
lcd.setCursor(0, 0);
if (digitalRead(buton) == LOW) {
lcd.print("Buton apasat");
} else {lcd.print(" ");}
lcd.setCursor(0, 1);
lcd.print("Axa X: ");
procent_X = map(analogRead(axa_X), 0, 1023, 0, 100);
lcd.print(procent_X);
lcd.print("%");
lcd.setCursor(0, 2);
lcd.print("Axa Y: ");
procent_Y = map(analogRead(axa_Y), 0, 1023, 0, 100);
lcd.print(procent_Y);
lcd.print("%");
lcd.setCursor(0, 3);
lcd.print("electronicstore.ro");
}
Un filmulet cu acest montaj poate fi vazut mai jos: