Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.
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.
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
Deze afbeelding is gemaakt met Fritzing. Klik om de afbeelding te vergroten.
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 pinint xValue = 0; // To store value of the X axisint yValue = 0; // To store value of the Y axisvoidsetup() {Serial.begin(9600) ;}voidloop() {// read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN);// print data to Serial Monitor on Arduino IDESerial.print("x = ");Serial.print(xValue);Serial.print(", y = ");Serial.println(yValue);delay(200);}
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.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
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 pinezButtonbutton(SW_PIN);int xValue = 0; // To store value of the X axisint yValue = 0; // To store value of the Y axisint bValue = 0; // To store value of the buttonvoidsetup() {Serial.begin(9600) ;button.setDebounceTime(50); // set debounce time to 50 milliseconds}voidloop() {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 IDESerial.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.
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.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
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 0x08int xValue = 0 ; // To store value of the X axisint yValue = 0 ; // To store value of the Y axisintcommand = COMMAND_NO;voidsetup() {Serial.begin(9600) ;}voidloop() {// read analog X and Y analog values xValue = analogRead(VRX_PIN); yValue = analogRead(VRY_PIN);// converts the analog value to commands// reset commandscommand = COMMAND_NO;// check left/right commandsif (xValue < LEFT_THRESHOLD)command = command | COMMAND_LEFT;elseif (xValue > RIGHT_THRESHOLD)command = command | COMMAND_RIGHT;// check up/down commandsif (yValue < UP_THRESHOLD)command = command | COMMAND_UP;elseif (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 commandif (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.
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno R4 WiFi
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno R4 WiFi' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno R4 WiFi on COM15
2
※ 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
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.
De onderstaande videodemo gebruikt de onderstaande code:
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!