Kód Arduina a video: Dvojosový joystick
V tomto návode si ukážeme, ako využiť dvojosový XY joystick s Arduinom. Tento joystick možno použiť ako herný ovládač alebo na ovládanie robotických ramien, okrem iných aplikácií. Hlavný dôraz bude kladený na detekciu polohy joysticku a stavu jeho tlačidlového spínača, ktoré možno zobraziť na sériovom monitore.

Počas návodu implementujeme jednoduchý program, ktorý číta polohy X a Y joysticku a zobrazuje ich v sériovom monitore Arduina. Keď je joystick stlačený, detekuje sa aj stav spínača. Podrobné vysvetlenie kódu nájdete vo videu v určených časových značkách (vo videu o 00:00).
Vysvetlenie hardvéru
Hlavné komponenty tohto projektu zahŕňajú modul dvojosového joysticku a dosku Arduino. Modul joysticku pozostáva z dvoch premenných odporov, jedného pre os X a jedného pre os Y, ktoré poskytujú analógové hodnoty na základe polohy joysticku. Tlačidlový spínač na joysticku sa používa na detekciu jeho stlačenia.
Keď pohybujete joystickom, potenciometre menia svoj odpor, čo sa prevádza na hodnoty medzi 0 a 1023. To nám umožňuje presne určiť polohu joysticku. Tlačidlový spínač je pripojený na digitálny vstupný pin Arduina, čo nám umožňuje čítať jeho stav bez potreby externého odporu pomocou funkcie interného pull-up odporu.
Podrobnosti z datasheetu
| Výrobca | Všeobecný |
|---|---|
| Číslo dielu | Modul dvojosového joysticku |
| Logické/IO napätie | 5 V |
| Napájacie napätie | 5 V |
| Rozsah výstupného napätia | 0 - 5 V |
| Rozlíšenie | 10-bitové (0-1023) analógové |
| Typ spínača | Tlačidlový |
| Puzdro | Štandardný modul |
- Zabezpečte správne napájanie (5 V) modulu joysticku.
- Pripojte výstupy X a Y joysticku na analógové piny A0 a A1.
- Použite digitálny pin 6 pre spínač joysticku.
- Využite konfiguráciu pull-up odporu pre pin spínača.
- Sledujte výstupné hodnoty, aby ste sa uistili, že sa pohybujú v rozsahu od 0 do 1023.
Pokyny na zapojenie


Na zapojenie dvojosového joysticku k Arduinu začnite pripojením uzemňovacieho pinu joysticku na uzemňovaciu lištu na breadboarde. Potom pripojte 5V pin joysticku na kladnú lištu breadboardu. Dva premenné piny na joysticku, označené ako X a Y, by mali byť pripojené na analógové piny A0 a A1 na Arduine.
Pre tlačidlový spínač na joysticku ho pripojte na digitálny pin 6 na Arduine. Toto pripojenie využíva funkciu interného pull-up odporu, takže nepotrebujete externý odpor. Nakoniec, ak chcete sledovať stav spínača pomocou LED, pripojte dlhšiu nožičku LED na digitálny pin 13 a kratšiu nožičku cez 680-ohmový odpor na uzemnenie.
Príklady kódu a vysvetlenie
V kóde Arduina definujeme pin pre spínač a špecifikujeme rozmery obrazovky na mapovanie hodnôt joysticku. Funkcia setup inicializuje sériovú komunikáciu a nastavuje režim pinu spínača.
void setup() {
Serial.begin(9600); // inicializácia sériovej komunikácie
pinMode(sw, INPUT_PULLUP); // nastavenie pinu sw ako vstup
pinMode(13, OUTPUT); // pin LED
}
Vo funkcii loop čítame analógové hodnoty pre polohy X a Y a mapujeme ich na definované rozmery obrazovky. Stav spínača sa tiež číta a vypisuje do sériového monitora.
void loop() {
int x = analogRead(A0); // čítanie analógovej hodnoty pre X
int y = analogRead(A1); // čítanie analógovej hodnoty pre Y
int sStat = digitalRead(sw); // čítanie stavu spínača
// Výpis hodnôt do sériového monitora
Serial.print("X: ");
Serial.print(xPos);
Serial.print(" Y: ");
Serial.println(yPos);
}
Nakoniec kód kontroluje, či je spínač stlačený, a zapína alebo vypína LED na základe stavu spínača. To poskytuje vizuálnu spätnú väzbu, keď je tlačidlo joysticku aktivované.
if(sStat == LOW) {
Serial.println("Spínač stlačený");
digitalWrite(13, HIGH); // Zapnutie LED
} else {
digitalWrite(13, LOW); // Vypnutie LED
}
Ak chcete vidieť, ako sa hodnoty joysticku menia v reálnom čase, nahrajte kód do Arduina a otvorte sériový monitor. Hodnoty sa budú aktualizovať každú pol sekundu a zobrazia aktuálne polohy X a Y spolu so stavom spínača (vo videu o 01:30).
Demonštrácia / Čo očakávať
Keď pohybujete joystickom, hodnoty X a Y by sa mali zodpovedajúcim spôsobom meniť v rozsahu od 0 do 1023. Ak stlačíte tlačidlo joysticku, LED pripojená na pin 13 sa rozsvieti, čo indikuje, že spínač je aktívny. Ak je joystick v strede, mali by ste vidieť hodnoty okolo 512 pre obe osi, v závislosti od kalibrácie joysticku.
Časové značky videa
- 00:00 - Úvod do dvojosového joysticku
- 01:30 - Vysvetlenie kódu a funkčnosti
- 02:45 - Pokyny na zapojenie
- 03:15 - Očakávaný výstup a testovanie
/*
* This is Arduino code to use a dual-axis XY joystick to read the value of the joystick position as X and Y, and
* also read the switch.
* Other Arduino library and videos: https://robojax.com
* Watch the video for this code to learn it fully.
* Watch the video here: https://youtu.be/6N8Iq353GM8
* This code is offered "as is" without any warranty.
* If you are sharing this code, you must keep this copyright note.
*/
/*
* Written for Robojax video on January 10, 2018
* by Ahmad Nejrabi, in Ajax, Ontario, Canada
* Copyright Robojax Inc.
*/
/*
* This is a dual-axis joystick sketch for Arduino.
* The position of the joystick is read and displayed on the serial monitor.
*/
#define sw 6
#define screenWidth 600
#define screenHeight 300
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
pinMode(sw,INPUT_PULLUP);// setting pin sw as input
pinMode(13,OUTPUT);
}
void loop() {
// Robojax Dual Axis joystick project
int x = analogRead(A0);// read analog value
int y = analogRead(A1);
int xPos = map(x, 0, 1023,0,screenWidth);
int yPos = map(y, 0, 1023,0,screenHeight);
int sStat = digitalRead(sw);//
// Robojax project
Serial.print("X: ");
Serial.print(xPos);
Serial.print(" Y: ");
Serial.println(yPos);// Robojax prints y value
if(sStat ==LOW){
Serial.println("Switch pressed");
digitalWrite(13,HIGH);// Turn LED ON
}else{
digitalWrite(13,LOW);// Turn LED OFF
}
delay(500);
}
Things you might need
-
AmazonPurchase XY Joystick from Amazonamzn.to
Resources & references
No resources yet.
Files📁
No files available.