El joystick és un comandament capaç de girar 360 graus i de retornar la posició en la que es trova.
Si li treiem el caputxó veurem que està format per dos potenciòmetres i un polsador.
Amb un dels potenciòmetres (VRx) podem mesurar la posició en l'eix X, i amb l'altre (VRy) la posició en l'eix Y. La sotida SW correspón al polsador.
Els potenciòmetres (VRx - VRy) es connecten cada un a un pin analògic, i el polsador (SW) si el volem utilitzar, a un pin digital.
Exemple 1. Mostrar els valors pel monitor sèrie
Valors amb que treballem
const int Eix_X = A0; // pin de connexió potenciòmetre eix X const int Eix_Y = A1; // pin de connexió potenciòmetre eix Y const int Boto = 8; // pin de connexió polsadorConfiguració
void setup() { pinMode (Boto,INPUT_PULLUP); // el botó és una entrada digital* Serial.begin(9600); // inici de la comunicació sèrie }Definició de les accions
void loop() { Serial.print ("X = "); Serial.println (analogRead(Eix_X)); // lectura analògica pin A0 Serial.print ("Y = "); Serial.println (analogRead(Eix_Y)); // lectura analògica pin A1 Serial.print ("Estat Botó = "); Serial.println (digitalRead(Boto)); // lectura digital pin 2 delay (100); // pausa per comoditat de lectura }* El botó del joystick s'ha definit com a INPUT_PULLUP en comptes de INPUT perquè així no cal connectar una resistència, Arduino connecta un pullup internament.
La lectura és 0 quan premem el botó, i 1 quan no el premem.
Exemple 2. Encesa de LEDs
.
Exemple 3. Control de servos
#include <Servo.h> // llibreria per treballar amb servos const int Eix_X = A0; // pin de connexió potenciòmetre eix X const int Eix_Y = A1; // pin de connexió potenciòmetre eix Y Servo ServoX; // asignem l'eix X a un servo Servo ServoY; // assignem l'eix Y a l'altre servo int JoystickVal; // variable per llegir el valor del pin analògic int ServoVal; // variable per assignar la posició del servo void setup() { ServoX.attach(9); // servo connectat al pin 9 ServoY.attach(10); // servo connectat al pin 10 Serial.begin(9600); // per monitoritzar } void loop() { // ---------- Control Servo X ---------- // lectura de la posició del joystick en X: JoystickVal = analogRead(Eix_X); // transforma el valor llegit en un valor dins del rang de moviment del servo: ServoVal = map (JoystickVal, 0, 1023, 0, 180); // Mou el servo a la posició corresponent: ServoX.write (ServoVal); // ---------- Control Servo Y ---------- // lectura de la posició del joystick en Y: JoystickVal = analogRead(Eix_Y); // transforma el valor llegit en un valor dins del rang de moviment del servo: ServoVal = map (JoystickVal, 0, 1023, 0, 180); // Mou el servo a la posició corresponent: ServoY.write (ServoVal); delay (20); // temps per moure els servos abans d'una nova lectura }
Cap comentari:
Publica un comentari a l'entrada