Joystick
Descripción:
Un joystick es un dispositivo de entrada analógico o sensor de entrada analógico que es utilizado, comunmente en juego de consola o PC. Literalmente, significa palanca de juegos.
La siguiente imagen muestra el tipo de joystick que vamos a utilizar. Consiste de dos potenciómetros (Enlace a Potenciómetro), uno para cada eje, X e Y. Para usar este joystick será necesario conectar cada potenciómetro a dos de las entradas analógicas de la tarjeta Arduino.
Si no dispones de un Joystick, puedes usar de forma simultánea dos potenciómetros, pero su control no será tan efectivo.
Elementos necesarios:
1 joystick (if you don't have a joystick you can use two potentiometers instead, but of course the 'control feeling' is not the same)¿?
and a couple of wires.
Esquema de conexión:
Si tienes un joystick, debes conectar simétricamente cada potenciómetro a la tarjeta Arduino. De forma que dos de los pines exteriores del Joystick (uno por potenciómetro) van conectados a 5v y los otros dos pines exteriores que te quedan, a tierra. Los pines interiores son conectados a las entradas analógicas 2 y 3 de la tarjeta Arduino.
De esta forma también se podría determinar como eje Y del joystick la entrada analógica #2 y como eje X la entrada analógica #3 o viceversa.
Esquema :
Si no dispones de un joystick, y como ya hemos comentado anteriormente puedes usar dos potenciómetros y con el mismo esquema de conexionado.
Código:
Ejemplo1:
/* Analog Read
* ------------------
*
* Enciende y apaga un LED (light emitting diode) conectado al pin digital #13.
* La cantidad de tiempo que el LED parpadeará depende de los
* valores obtenidos del Joystick (o de un par de potenciómetros) conectado a los
* pines analógicos #2 y #3
*
*
*
* Created 1 December 2005
* copyleft 2005 DojoDave <http://www.0j0.org>
* http://arduino.berlios.de
*
*/
int joyPin1 = 2; // potenciómetro-1 conectado a la entrada analógica 2
int joyPin2 = 3; // potenciómetro-2 conectado a la entrada analógica 3
int value1 = 0; // variable para almacenar el valor capturado desde analog pin 0
int value2 = 0; // variable para almacenar el valor capturado desde analog pin 1
void setup() {
pinMode(ledPin, OUTPUT); // declara el ledPin en modo salida
}
void loop() {
// captura el valor desde el potenciómetro conectado al pin analógico 0
value1 = analogRead(joyPin1);
// Es necesaria una pequeña pausa entre capturas de pines analógicos
delay(100);
// captura el valor desde el potenciómetro conectado al pin analógico 1
value2 = analogRead(joyPin2);
digitalWrite(ledPin, HIGH); // enciende LED
delay(value1); //detiene la ejecución por un tiempo determinado por el potenciómetro-1
digitalWrite(ledPin, LOW); // apaga LED
delay(value2); //detiene la ejecución por un tiempo determinado por el potenciómetro-2
}
Ejemplo 2:
The following code includes a method called treatValue() that is transforming the sensor's messurement into a value between 0 and 9 and sends it in ASCII back to the computer. This allows to easily send the information into e.g. Flash and parse it inside your own code.
Finally we make the LED blink with the values read from the sensors as a direct visual feedback of how we control the joystick.
/* Read Jostick
* ------------
*
* Reads two analog pins that are supposed to be
* connected to a jostick made of two potentiometers
*
* We send three bytes back to the comp: one header and two
* with data as signed bytes, this will take the form:
* Jxy\r\n
*
* x and y are integers and sent in ASCII
*
* http://www.0j0.org | http://arduino.berlios.de
* copyleft 2005 DojoDave for DojoCorp
*/
int ledPin = 13;
int joyPin1 = 0; // slider variable connecetd to analog pin 0
int joyPin2 = 1; // slider variable connecetd to analog pin 1
int value1 = 0; // variable to read the value from the analog pin 0
int value2 = 0; // variable to read the value from the analog pin 1
void setup() {
pinMode(ledPin, OUTPUT); // initializes digital pins 0 to 7 as outputs
beginSerial(9600);
}
int treatValue(int data) {
return (data * 9 / 1024) + 48;
}
void loop() {
// reads the value of the variable resistor
value1 = analogRead(joyPin1);
// this small pause is needed between reading
// analog pins, otherwise we get the same value twice
delay(100);
// reads the value of the variable resistor
value2 = analogRead(joyPin2);
digitalWrite(ledPin, HIGH);
delay(value1);
digitalWrite(ledPin, LOW);
delay(value2);
serialWrite('J');
serialWrite(treatValue(value1));
serialWrite(treatValue(value2));
serialWrite(10);
serialWrite(13);
}
@idea: the order of the blinking LED
@code: David Cuartielles
@pictures and graphics: Massimo Banzi
@date: 20050820 - Malmo - Sweden