Arduino UNO R4 - Joystick

In deze gids leren we hoe u een joystick met Arduino UNO R4 gebruikt. We behandelen:

Arduino UNO R4 en Joystick

Over de Joystick

U heeft misschien wel eens een joystick gezien die wordt gebruikt als game controller, speelgoed controller, of zelfs in grote machines zoals graafmachine controllers.

De joystick heeft twee potentiometers gerangschikt in een vierkante formatie en één drukknop. Deze geeft de volgende uitgangen:

  • Een analoge waarde (van 0 tot 1023) voor de horizontale positie (X-coördinaat)
  • Een analoge waarde (van 0 tot 1023) voor de verticale positie (Y-coördinaat)
  • Een digitale status van een knop (HIGH of LOW)

Wanneer u twee analoge waarden combineert, vormen ze 2-D coördinaten. Deze coördinaten zijn gecentreerd wanneer de joystick niet wordt bewogen. U kunt gemakkelijk de werkelijke richting van deze coördinaten achterhalen door een testcode uit te voeren, wat we in het volgende gedeelte zullen behandelen.

Sommige toepassingen gebruiken mogelijk alle drie uitgangen, terwijl andere mogelijk slechts enkele ervan gebruiken.

Pinout

Een joystick gebruikt vijf pinnen.

  • GND-pin: verbind met GND (0V)
  • VCC-pin: verbind met VCC (5V)
  • VRX-pin: geeft een analoge waarde voor de horizontale positie (X-coördinaat).
  • VRY-pin: geeft een analoge waarde voor de verticale positie (Y-coördinaat).
  • SW-pin: komt van de drukknop van de joystick. Deze is meestal open. Het gebruik van een pull-up weerstand maakt deze pin HIGH wanneer niet ingedrukt en LOW wanneer ingedrukt.
Joystick Pinout

Hoe het Werkt

  • Links/Rechts Beweging
    • Wanneer u de joystick naar links of rechts beweegt, verandert dit het elektrische signaal (spanning) op de VRX-pin.
    • Naar links bewegen verlaagt de spanning naar 0 volt.
    • Naar rechts bewegen verhoogt de spanning naar 5 volt.
    • De Arduino leest deze spanning en zet deze om naar een getal tussen 0 en 1023. Dus 0V komt overeen met 0, en 5V komt overeen met 1023.
  • Omhoog/Omlaag Beweging:
    • Op dezelfde manier verandert het bewegen van de joystick omhoog of omlaag de spanning op de VRY-pin.
    • Omhoog bewegen verlaagt de spanning naar 0 volt.
    • Omlaag bewegen verhoogt de spanning naar 5 volt.
    • De Arduino leest deze spanning ook en zet deze om naar een getal tussen 0 en 1023, net als bij de VRX-pin.
  • Gecombineerde Bewegingen:
    • Wanneer u de joystick in elke richting beweegt (niet alleen puur links/rechts of omhoog/omlaag), verandert dit de spanning op zowel VRX- als VRY-pinnen gebaseerd op de positie langs elke as.
  • De Joystick Indrukken:
    • Wanneer u de joystick naar beneden drukt (zoals het indrukken van een knop), activeert dit een interne knop in de joystick.
    • Als u een pull-up weerstand aansluit op de SW-pin, zal de spanning op deze pin veranderen van 5V naar 0V wanneer ingedrukt.
    • De Arduino leest deze verandering als een digitaal signaal, dat HIGH (5V) toont wanneer niet ingedrukt en LOW (0V) wanneer ingedrukt.

    Samenvattend: het bewegen van de joystick verandert spanningen op VRX en VRY, die de Arduino leest als getallen tussen 0 en 1023. Het indrukken van de joystick verandert de spanning op de SW-pin, die de Arduino leest als HIGH of LOW.

Bedradingsschema

Arduino UNO R4 Joystick Bedradingsschema

This image is created using Fritzing. Click to enlarge image

Zie De beste manier om Arduino Uno R4 en andere componenten van stroom te voorzien.

Hoe Te Programmeren Voor Joystick

De joystick bestaat uit twee componenten: een analoog deel (X- en Y-as) en een digitaal deel (een drukknop).

  • Om de waarden voor de X- en Y-assen te lezen, gebruikt u eenvoudig de functie analogRead() op de analoge ingangspin.
int xValue = analogRead(A1); int yValue = analogRead(A0);
  • Voor het digitale deel, wat een drukknop is: het is gewoon een knop. Een gemakkelijke en effectieve methode is het gebruik van de ezButton bibliotheek. Deze bibliotheek helpt de stabiliteit van de knop te beheren en activeert ook een intern systeem om de knop stabiel te houden. U kunt meer leren in de Arduino UNO R4 - Button tutorial. We zullen u laten zien hoe de code te gebruiken in het volgende deel van deze tutorial.

Na het verkrijgen van de waarden van analoge pinnen, moeten we ze mogelijk omzetten in beheersbare waarden. Het volgende gedeelte zal voorbeeldcodes hiervoor geven.

Arduino UNO R4 Code

Hier zijn voorbeeldcodes voor Arduino UNO R4:

  • Voorbeeldcode: verkrijgt analoge waarden van joystick
  • Voorbeeldcode: verkrijgt analoge waarden en controleert knopstatus op joystick
  • Voorbeeldcode: zet analoge waarde om naar commando's: MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN
  • Voorbeeldcode: zet analoge waarden om naar hoeken om twee servomotoren te besturen (zoals in een pan-tilt camera)

Leest analoge waarden van joystick

/* * Deze Arduino UNO R4 code is ontwikkeld door newbiely.nl * Deze Arduino UNO R4 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-uno-r4/arduino-uno-r4-joystick */ #define VRX_PIN A1 // The Arduino UNO R4 pin connected to VRX pin #define VRY_PIN A0 // The Arduino UNO R4 pin connected to VRY pin int xValue = 0; // To store value of the X axis int yValue = 0; // To store value of the Y axis void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN); // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(xValue); Serial.print(", y = "); Serial.println(yValue); delay(200); }

Snelle Stappen

Volg deze instructies stap voor stap:

  • Als dit uw eerste keer is met de Arduino Uno R4 WiFi/Minima, raadpleeg dan de tutorial over het instellen van de omgeving voor Arduino Uno R4 WiFi/Minima in de Arduino IDE.
  • Sluit de joystick aan op Arduino UNO R4 volgens het bijgeleverde schema.
  • Verbind het Arduino Uno R4 bord met uw computer via een USB-kabel.
  • Start de Arduino IDE op uw computer.
  • Selecteer het juiste Arduino Uno R4 bord (bijv. Arduino Uno R4 WiFi) en COM-poort.
  • Kopieer de bovenstaande code en open deze in Arduino IDE
  • Klik op de Upload knop in Arduino IDE om de code naar uw Arduino UNO R4 te uploaden
  • Duw de joystick's duim helemaal naar de rand, draai deze vervolgens in een cirkel (klokgewijs of tegen de klok in)
  • Controleer de resultaten op de Serial Monitor.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Wanneer u de joystick draait, houd de Serial Monitor in de gaten. Als de X-waarde 0 toont, onthoud deze positie als links; het tegenovergestelde is rechts. Als de Y-waarde 0 is, noteer deze positie als omhoog; het tegenovergestelde is omlaag.

Leest analoge waarden en leest de knopstatus van een joystick

/* * Deze Arduino UNO R4 code is ontwikkeld door newbiely.nl * Deze Arduino UNO R4 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-uno-r4/arduino-uno-r4-joystick */ #include <ezButton.h> #define VRX_PIN A1 // The Arduino UNO R4 pin connected to VRX pin #define VRY_PIN A0 // The Arduino UNO R4 pin connected to VRY pin #define SW_PIN 2 // The Arduino UNO R4 pin connected to SW pin ezButton button(SW_PIN); int xValue = 0; // To store value of the X axis int yValue = 0; // To store value of the Y axis int bValue = 0; // To store value of the button void setup() { Serial.begin(9600) ; button.setDebounceTime(50); // set debounce time to 50 milliseconds } void loop() { button.loop(); // MUST call the loop() function first // read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN); // Read the button value bValue = button.getState(); if (button.isPressed()) { Serial.println("The button is pressed"); // TODO do something here } if (button.isReleased()) { Serial.println("The button is released"); // TODO do something here } // print data to Serial Monitor on Arduino IDE Serial.print("x = "); Serial.print(xValue); Serial.print(", y = "); Serial.print(yValue); Serial.print(" : button = "); Serial.println(bValue); }

Snelle Stappen

  • Ga naar het Libraries pictogram aan de linkerkant van de Arduino IDE.
  • Zoek naar "ezButton" en vind de knop bibliotheek van ArduinoGetStarted.com
  • Druk op de Install knop om de ezButton bibliotheek toe te voegen.
Arduino UNO R4 button library
  • Kopieer de code en open deze in Arduino IDE.
  • Klik op de Upload knop in Arduino IDE om de code naar de Arduino UNO R4 te uploaden.
  • Beweeg de joystick duim naar links, rechts, omhoog of omlaag.
  • Druk naar beneden op de bovenkant van de joystick.
  • Controleer de resultaten op de Serial Monitor.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Zet analoge waarde om naar MOVE LEFT/RIGHT/UP/DOWN commando's

/* * Deze Arduino UNO R4 code is ontwikkeld door newbiely.nl * Deze Arduino UNO R4 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino-uno-r4/arduino-uno-r4-joystick */ #define VRX_PIN A1 // The Arduino UNO R4 pin connected to VRX pin #define VRY_PIN A0 // The Arduino UNO R4 pin connected to VRY pin #define LEFT_THRESHOLD 400 #define RIGHT_THRESHOLD 800 #define UP_THRESHOLD 400 #define DOWN_THRESHOLD 800 #define COMMAND_NO 0x00 #define COMMAND_LEFT 0x01 #define COMMAND_RIGHT 0x02 #define COMMAND_UP 0x04 #define COMMAND_DOWN 0x08 int xValue = 0 ; // To store value of the X axis int yValue = 0 ; // To store value of the Y axis int command = COMMAND_NO; void setup() { Serial.begin(9600) ; } void loop() { // read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN); // converts the analog value to commands // reset commands command = COMMAND_NO; // check left/right commands if (xValue < LEFT_THRESHOLD) command = command | COMMAND_LEFT; else if (xValue > RIGHT_THRESHOLD) command = command | COMMAND_RIGHT; // check up/down commands if (yValue < UP_THRESHOLD) command = command | COMMAND_UP; else if (yValue > DOWN_THRESHOLD) command = command | COMMAND_DOWN; // NOTE: AT A TIME, THERE MAY BE NO COMMAND, ONE COMMAND OR TWO COMMANDS // print command to serial and process command if (command & COMMAND_LEFT) { Serial.println("COMMAND LEFT"); // TODO: add your task here } if (command & COMMAND_RIGHT) { Serial.println("COMMAND RIGHT"); // TODO: add your task here } if (command & COMMAND_UP) { Serial.println("COMMAND UP"); // TODO: add your task here } if (command & COMMAND_DOWN) { Serial.println("COMMAND DOWN"); // TODO: add your task here } }

Snelle Stappen

  • Kopieer de bovenstaande code en open deze met Arduino IDE.
  • Klik op de Upload knop in Arduino IDE om de code naar Arduino UNO R4 te uploaden.
  • Beweeg de joystick duim naar links, rechts, omhoog, omlaag of in een andere richting.
  • Controleer de resultaten op de Serial Monitor.
COM6
Send
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Notiz:

Soms kan er geen commando zijn, één commando, of twee commando's tegelijkertijd (bijvoorbeeld UP en LEFT samen).

Zet analoge waarden om naar hoeken om twee servomotoren te besturen

U kunt informatie vinden in de Arduino UNO R4 - Joystick bestuurt Servo Motor tutorial.

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!