Search Code

Kód Arduina a video: Dvojosový joystick

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.

XY-Dual access joystick

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ýrobcaVšeobecný
Číslo dieluModul dvojosového joysticku
Logické/IO napätie5 V
Napájacie napätie5 V
Rozsah výstupného napätia0 - 5 V
Rozlíšenie10-bitové (0-1023) analógové
Typ spínačaTlač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

Arduino wiring for XY-Dual access joystick
Arduino wiring for XY-Dual access joystick
Arduino X-Y-Joystick wiring
Arduino X-Y-Joystick wiring

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

Images

Arduino wiring for XY-Dual access joystick
Arduino wiring for XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
XY-Dual access joystick
Arduino X-Y-Joystick wiring
Arduino X-Y-Joystick wiring
58-This is the Arduino code for a dual-axis joystick.
Language: C++
/*
 * 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

Resources & references

No resources yet.

Files📁

No files available.