Arduino Joystick PS2 je herní modul, který umožňuje snímat pohyb herní páčky ve dvou směrech. Samotný joystick je tvořen konstrukcí, která obsahuje dva potenciometry o velikosti 10 kiloohmů a taktéž tlačítko pro detekci stisku joysticku. V normálním stavu je tedy potenciometr nastaven přibližně do poloviny svého rozsahu a při pohybu páčky se mění jeho odpor od 0 ohmů až po 10 kiloohmů. V Arduinu pak už jen stačí měřit měnící se napětí díky změně odporu a přepočíst toto napětí na námi zvolené souřadnice.
Pro úspěšné propojení s Arduino deskou stačí zapojit pět propojovacích pinů. Propojíme pin KEY s D2, pin Y s A1, pin X s A0, pin VCC s napájecím napětím 5 V a GND se zemí Arduina. Pro piny KEY, X a Y je možné využít také ostatní piny, ale je nutné použít analogové piny pro X a Y a taktéž volbu provést v programu.
Ukázkový kód na svém začátku obsahuje nastavení propojovacích pinů modulu s joystickem a také vytvoření proměnných pro uložení středových hodnot joysticku. V podprogramu setup() je inicializováno tlačítko jako vstupní s pull-up odporem, nastavena komunikace po sériové lince a následně načteny nulové hodnoty pro obě osy. Nekonečná smyčka loop() obsahuje na svém začátku vytvoření proměnných pro uložení analogových hodnot z obou os a také uložení stavu tlačítka. Poté je provedeno načtení analogových hodnot obou os s odečtením nulové hodnoty následované načtením stavu tlačítka a poté je pomocí funkce map přepočtena naměřená hodnota na rozsah 0 až +100, resp. 0 až -100 pro opačný směr. Díky tomuto přepočtu poté máme v proměnných aktX a aktY uloženy vždy hodnoty v rozsahu -100 až +100. Poté následuje vytištění všech informací po sériové lince, kontrola stisku tlačítka s případným vytištěním informace a volitelná pauza pro přehledný tisk.
// Arduino Joystick PS2 // nastavení propojovacích pinů modulu #define pinX A0 #define pinY A1 #define pinKey 2 // proměnné pro uložení hodnoty // středu joysticku int nulaX, nulaY; void setup() { // inicializace tlačítka joysticku pinMode(pinKey, INPUT_PULLUP); // komunikace přes sériovou linku rychlostí 9600 baud Serial.begin(9600); // načtení a uložení hodnot pro x a y osy nulaX = analogRead(pinX); nulaY = analogRead(pinY); } void loop() { // vytvoření proměnných pro uložení // hodnot pro osy x, y a stav tlačítka int aktX, aktY, stavTlac; // načtení analogových hodnot osy x a y aktX = analogRead(pinX) - nulaX; aktY = analogRead(pinY) - nulaY; // načtení stavu tlačítka stavTlac = digitalRead(pinKey); if (aktX > 0) { aktX = map(aktX, 0, 1023-nulaX, 0, 100); } else { aktX = map(aktX, 0, -nulaX, 0, -100); } if (aktY > 0) { aktY = map(aktY, 0, 1023-nulaY, 0, 100); } else { aktY = map(aktY, 0, -nulaY, 0, -100); } // vytištění informací o souřadnicích // po sériové lince Serial.print("Souradnice X,Y = "); Serial.print(aktX); Serial.print(", "); Serial.print(aktY); // kontrola stavu tlačítka, v případě stisku // vytiskneme informaci po sériové lince if(stavTlac == LOW) { Serial.print(" | Tlacitko stisknuto."); } Serial.println(); // volitelná pauza pro přehledný tisk delay(1000); }
Po nahrání programu do Arduino desky s připojeným joystickem PS2 dostaneme například tento výpis:
Souradnice X,Y = 0, -100 Souradnice X,Y = -100, -100 Souradnice X,Y = -93, 0 Souradnice X,Y = 0, 52 Souradnice X,Y = -31, 30 | Tlacitko stisknuto.
Arduino Joystick PS2 je zajímavý herní modul, který lze jednoduše zapojit a dále využívat pro různá herní zařízení či obecně jako ovládací prvek. Velkou výhodou tohoto joysticku je také přítomnost potvrzovacího tlačítka přímo v modulu či přítomnost ovládacího kloboučku přímo v balení, kdy tento klobouček má právě obdobnou velikost jako ten na ovladačích herní konzole Playstation 2 (PS2).
Seznam použitých komponent:
http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html
http://dratek.cz/arduino/884-arduino-joystick-ps2-1420494869.html