Learning   Examples | Foundations | Hacking | Links

Conectando un Joystick

El Joystick

Esquema

Cómo funciona

El joystick de la imagen no es más que dos potenciómetros que nos permiten medir el movimiento en 2-D. Los potenciómetros son resistencias variables y, por lo tanto, actúan como sensores proporcionándonos una tensión variable dependiendo de la rotación del dispositivo sobre su eje.

El programa que necesitamos para monitorear el joystick necesita usar dos entradas analógicas. Podemos mandar esos valores de vuelta al ordenador, pero entonces nos encontraremos con el clásico problema de que la transmisión a través del puerto de comunicación debe ser con valores de 8bits, mientras que el DAC (conversor analógico-digital, que mide los valores de los potenciómetros del joystick) tiene una resolución de 10bits. En otras palabras, esto significa que nuestro sensor está caracterizado con un valor digital entre 0 y 1023.

El siguiente código incluye un método llamado "treatValue()" que transforma la medida del sensor en un valor entre 0 y 9, y lo manda al ordenador, en ASCII. Esto permite un envío sencillo de la información a, por ejemplo, Flash, para analizarlo desde su propio código.

Por último, haremos que el LED parpadee con los valores leídos del sensor, como una forma de comprobación visual de como controlamos el joystick.

 /* Lee Jostick
  * ------------
  *
  * Lee dos entradas analógicas que se sopone que están conectadas a
  * un joystick fabricado con dos potenciómetros
  *
  * Enviamos tres bytes al ordenador: uno de cabecera y otros dos 
  * con datos como bytes con signo, esto tomará la forma:
  *		Jxy\r\n
  *
  * x e y son enteros y se mandan en ASCII 
  * 
  * http://www.0j0.org | http://arduino.berlios.de
  * copyleft 2005 DojoDave para DojoCorp
  */

 int ledPin = 13;
 int joyPin1 = 0;                 // potenciómetro conectado al pin analógico 0
 int joyPin2 = 1;                 // potenciómetro conectado al pin analógico 0
 int value1 = 0;                  // variable para leer el valor del pin analógico 0
 int value2 = 0;                  // variable para leer el valor del pin analógico 1

 void setup() {
  pinMode(ledPin, OUTPUT);              // inicializa el pin digital 13 como salida
  beginSerial(9600);
 }

 int treatValue(int data) {
  return (data * 9 / 1024) + 48;
 }

 void loop() {
  // lee el valor de la resistencia variable 
  value1 = analogRead(joyPin1);   
  // esta pequeña parada es necesaria entre lecturas de un pin analógico
  // de otra manera devolvería el mismo valor las dos veces
  delay(100);			  
  // lee el valor de la resistencia variable 
  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: el orden del LED parpadeante

@Código: David Cuartielles

@Imágenes y gráficos: Massimo Banzi

@Fecha: 20050820 - Malmo - Sweden

Share