14 de febr. 2016

Joystick



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.
El nostre joystick l'hem comprat aqui >>
Tutorial Sparkfun >>


Connexió a Arduino
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ó polsador
Configuració
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