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 Sensor
U heeft waarschijnlijk een joystick gezien in bijvoorbeeld een gamecontroller, speelgoedcontroller, of zelfs in grote machines zoals een graafmachinebesturing.
De joystick bestaat uit twee potentiometers die loodrecht op elkaar staan en één drukknop. Daarom levert hij de volgende outputs:
Een analoge waarde (van 0 tot 1023) die overeenkomt met de horizontale positie (X-coördinaat genoemd)
Een analoge waarde (van 0 tot 1023) die overeenkomt met de verticale positie (Y-coördinaat genoemd)
Een digitale waarde van een drukknop (HIGH of LOW)
De combinatie van de twee analoge waarden kan 2D-coördinaten creëren waarbij de middenstand de rustpositie aangeeft. De werkelijke richting van de coördinaten is eenvoudig te identificeren bij het uitvoeren van een testcode (in het volgende gedeelte).
Sommige toepassingen gebruiken alle drie de outputs, andere slechts een deel daarvan.
Pinout
Een joystick heeft 5 pennen:
GND pin: moet worden verbonden met GND (0V)
VCC pin: moet worden verbonden met VCC (5V)
VRX pin: geeft een analoge waarde die overeenkomt met de horizontale positie (X-coördinaat)
VRY pin: geeft een analoge waarde die overeenkomt met de verticale positie (Y-coördinaat)
SW pin: is de output van de drukknop in de joystick. Deze is normaal open. Als u een pull-up weerstand gebruikt op deze pin, is de SW-pin HIGH wanneer niet ingedrukt en LOW wanneer ingedrukt.
Hoe Werkt Het
Wanneer u de joystickhendel naar links of rechts duwt, verandert de spanning op de VRX-pin. Het spanningsbereik is van 0 tot 5V (0 aan de linkerkant en 5V aan de rechterkant). De spanning is evenredig met de positie van de hendel ⇒ de uitleeswaarde op de analoge pin van Arduino ligt tussen 0 en 1023
Wanneer u de joystickhendel naar boven of beneden duwt, verandert de spanning op de VRY-pin. Het spanningsbereik is van 0 tot 5V (0 boven en 5V onder). De spanning is evenredig met de positie van de hendel ⇒ de uitleeswaarde op de analoge pin van Arduino ligt tussen 0 en 1023
Wanneer u de joystickhendel in elke richting beweegt, veranderen de spanningen op zowel VRX als VRY proportioneel met de projectie van de positie op elke as
Wanneer u de joystickhendel van boven naar beneden indrukt, sluit de drukknop binnenin de joystick. Als u een pull-up weerstand gebruikt op de SW-pin, verandert de uitgang op SW van 5V naar 0V ⇒ de uitleeswaarde op de digitale pin van Arduino verandert van HIGH naar LOW
Aansluitschema
Deze afbeelding is gemaakt met Fritzing. Klik om de afbeelding te vergroten.
Hoe Te Programmeren Voor Joystick
De joystick bestaat uit twee delen: analoog (X- en Y-as) en digitaal (drukknop)
Voor het analoge deel (X, Y as) hoeft u alleen maar de waarde van de analoge ingang te lezen met de functie analogRead().
int xValue = analogRead(A1); int yValue = analogRead(A0);
Voor het digitale deel (drukknop): dit is een knop. De eenvoudigste en handigste manier is het gebruik van de ezButton library. Deze bibliotheek ondersteunt debounce voor knoppen en activeert ook een interne pull-up weerstand. Meer over knoppen vindt u in de Arduino - Button tutorial. De bijbehorende code wordt in de volgende paragraaf van deze handleiding gepresenteerd.
Na het uitlezen van de analoge waarden kan het nodig zijn deze om te zetten naar aanstuurbare waarden. Het volgende deel bevat voorbeeldcodes hiervoor.
Arduino Code
Deze sectie geeft de volgende voorbeelden van Arduino-code:
Voorbeeldcode: leest analoge waarden van de joystick
Voorbeeldcode: leest analoge waarden en de knopstatus van de joystick
Voorbeeldcode: zet analoge waarden om naar MOVE_LEFT, MOVE_RIGHT, MOVE_UP, MOVE_DOWN commando’s
Voorbeeldcode: zet analoge waarden om naar hoeken voor aansturing van twee servo motoren (bijvoorbeeld in een pan-tilt camera)
Leest analoge waarden van joystick
/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-joystick*/#define VRX_PIN A1 // Arduino pin connected to VRX pin#define VRY_PIN A0 // Arduino 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);}
Snelstart
Kopieer bovenstaande code en open deze met de Arduino IDE
Klik op de knop Upload in de Arduino IDE om de code op de Arduino te laden
Beweeg de joystickhendel maximaal naar de uiterste positie en draai deze vervolgens in een cirkel (met of tegen de klok in)
Bekijk het resultaat in de Seriële Monitor
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno on COM15
2
Houd tijdens het draaien van de joystickhendel de Seriële Monitor in de gaten
Als de X-waarde 0 is, noteer of onthoud dan deze positie als links ⇒ de tegenovergestelde richting is rechts
Als de Y-waarde 0 is, noteer of onthoud dan deze positie als boven ⇒ de tegenovergestelde richting is onder
Leest analoge waarden en knopstatus van joystick
/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-joystick*/#include <ezButton.h>#define VRX_PIN A1 // Arduino pin connected to VRX pin#define VRY_PIN A0 // Arduino pin connected to VRY pin#define SW_PIN 2 // Arduino 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);}
Snelstart
Ga naar het icoon Libraries in de zijbalk van de Arduino IDE
Zoek op “ezButton” en vind de button library van ArduinoGetStarted.com
Klik op de knop Install om de ezButton-bibliotheek te installeren
Kopieer bovenstaande code en open deze met de Arduino IDE
Klik op de knop Upload in Arduino IDE om de code in de Arduino te plaatsen
Druk de joystickhendel naar links/rechts/boven/beneden
Druk de joystickhendel naar beneden (indrukken knop)
Bekijk het resultaat in de Seriële Monitor
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno on COM15
2
Zet analoge waarde om naar commando’s MOVE LEFT/RIGHT/UP/DOWN
/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/arduino/arduino-joystick*/#define VRX_PIN A1 // Arduino pin connected to VRX pin#define VRY_PIN A0 // Arduino 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 }}
Snelstart
Kopieer bovenstaande code en open met Arduino IDE
Klik op de knop Upload om de code op Arduino te plaatsen
Beweeg de joystickhendel naar links/rechts/boven/beneden of een willekeurige richting
Bekijk het resultaat in de Seriële Monitor
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
Ln 11, Col 1
Arduino Uno on COM15
2
※ Notiz:
Tegelijkertijd kan er geen, één of twee commando’s actief zijn (bijvoorbeeld UP en LEFT tegelijk).
Zet analoge waarden om naar hoeken voor aansturing van twee servo motoren
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. Let op: de video toont de Arduino Uno R4, maar het werkt identiek voor de Arduino Uno R3:
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!