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.

Arduino Joystick PS2

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.

Schéma zapojení Arduino Joysticku PS2

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

FB tw

Další podobné články