Tutorial joystick shield per arduino

La scorsa settimana ho acquistato una joystick shield prodotta da sparkfun ed ho fatto qualche test realizzando un tutorial joystick shield per arduino.

joystick shield sparkfun

La shield è dotata di un joystick a due assi con pulsante centrale e quattro pulsanti ciascuno connesso ad un pin digitale.

Come sai il mio spirito makers mi spinge a smontare e rimaneggiare le shield ed in questo caso mi ha ispirato la presenza al centro della joystick shield dei fori tipici di una basetta millefori in cui ho saldato un potenziometro aggiuntivo da 10Kohm

Come è fatta la joystick shield

Sul sito del produttore trovi tutta la documentazione necessaria ad usare questa shield

La Joystick shield è composta da:

  • un joystick a due assi in cui ciascun asse è collegato ad un potenziometro connesso ai pin A0 ed A1
  • un pulsante connesso al joystick connesso al pin 2
  • quattro pulsanti connessi rispettivamente ai pin 3 (right), 4 (up), 5 (down), 6 (left)

e la mia personale modifica:

  • un potenziometro da 10Kohm collegato al pin analogico A2

joystick shield potenziometro

ho collegato il potenziometro come mostrato nello schema seguente:

joystick shield connection

Lo sketch di test

Lo sketch che ho utilizzato per il test della joystick shield for arduino è molto simile a quello proposto dal produttore della shield, leggermente moficato per potre leggere anche il potenziometro che ho aggiunto:

/*
 * Joystick Shield Tets
 *
 * Autore: Alfieri Mauro
 * Twitter: @mauroalfieri
 *
 * http://www.sparkfun.com/commerce/product_info.php?products_id=9490 
 *
 * created Nov. 15, 2014
 * by Mauro Alfieri
 */

const byte PIN_BUTTON_SELECT = 2;

const byte PIN_BUTTON_RIGHT = 3;
const byte PIN_BUTTON_UP = 4;
const byte PIN_BUTTON_DOWN = 5;
const byte PIN_BUTTON_LEFT = 6;

const byte PIN_ANALOG_X = A0;
const byte PIN_ANALOG_Y = A1;
const byte PIN_ANALOG_P = A2;

byte i=0;

void setup(void)
{
  pinMode(PIN_BUTTON_SELECT, INPUT);  digitalWrite(PIN_BUTTON_SELECT, HIGH);
  pinMode(PIN_BUTTON_RIGHT, INPUT);   digitalWrite(PIN_BUTTON_RIGHT, HIGH);
  pinMode(PIN_BUTTON_UP, INPUT);      digitalWrite(PIN_BUTTON_UP, HIGH);
  pinMode(PIN_BUTTON_DOWN, INPUT);    digitalWrite(PIN_BUTTON_DOWN, HIGH);
  pinMode(PIN_BUTTON_LEFT, INPUT);    digitalWrite(PIN_BUTTON_LEFT, HIGH);
  
  pinMode(PIN_ANALOG_X, INPUT);
  pinMode(PIN_ANALOG_Y, INPUT);
  pinMode(PIN_ANALOG_P, INPUT);

  Serial.begin(9600);
}

void loop(void) {
  if (i== 30) {
  Serial.print("SELECT, RIGHT, UP, DOWN, LEFT, ANALOG_X, ANALOG_Y,ANALOG_P\n");
  i=0;
  }
  
  Serial.print(digitalRead(PIN_BUTTON_SELECT));
  Serial.print(",");
  Serial.print(digitalRead(PIN_BUTTON_RIGHT));
  Serial.print(",");
  Serial.print(digitalRead(PIN_BUTTON_UP));
  Serial.print(",");
  Serial.print(digitalRead(PIN_BUTTON_DOWN));
  Serial.print(",");
  Serial.print(digitalRead(PIN_BUTTON_LEFT));
  Serial.print(",");
  Serial.print(analogRead(PIN_ANALOG_X));
  Serial.print(",");
  Serial.print(analogRead(PIN_ANALOG_Y));
  Serial.print(",");
  Serial.print(analogRead(PIN_ANALOG_P));
  Serial.print("\n");
  
  delay(100);
  i++;
}

come vedi nella prima parte ho definito delle costanti di tipo byte una per ciascun pin connesso.

linea 24: definisci una variabile di tipo byte in che userai come contatore interno al loop(), vedrai in seguito a cosa serve;

linee 26-39: imposta la funzione setup() il cui scopo è definire la modalità di funzionamento di ciascun pin, impostare HIGH il valore dei pin digitali, attivando in questo modo la resistenza di pull-up e attivare il canale di comunicazione seriale a 9600 baud;

linee 42-46: è qui che usi il contatore “i” verificando quando il suo valore è uguale a 30, in questo caso scrivi sul monitor seriale la linea di intestazione “SELECT, RIGHT, UP, DOWN, LEFT, ANALOG_X, ANALOG_Y,ANALOG_P\n” e imposta nuovamente a 0 il valore di “i”;

linee 48-63: scrivi sul monitor di rete i valori letti dai singoli pin della joystick shield;

linea 65: attendi 100 millisecondi tra un esecuzione di un ciclo di loop() ed il successivo;

linea 66: incrementa il contatore “i” di un valore;

Il risultato del test lo puoi vedere nel video riportato di seguito:

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/tutorial-joystick-shield-per-arduino.html

Lascia un commento

Your email address will not be published.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.