Feather joy-featherwing

Feather joy-featherwing è una shield della serie Feather della Adafruit con cui hai a disposizione un Joystick e cinque pulsanti già in configurazione joypad.

Feather joy-featherwing front

Come puoi vedere nella foto sopra la disposizione dei pulsanti a destra e del joystick a sinistra ricorda quella di molti joypad in commercio.

Configurazione della Feather joy-featherwing

Sul retro della Feather joy-featherwing trovi diverse piazzole con cui configurare la scheda:

Feather joy-featherwing rear

le 7 in corrispondenza dei pin di interconnessione servono a collegare i pulsanti ai pin digitali del micro controllore.

Le due piazzole orizzontali, A0 ed A1, ti permettono di configurare l’indirizzo I2C con cui comunicare con Feather joy-featherwing secondo la tabella riportata sul sito del produttore.

Ne avrai dedotto che la comunicazione tra la Feather joy-featherwing ed il microcontrollore a cui la colleghi avviene mediante due canali:

  • IIC o I2C con indirizzo di defailt 0x49
  • interrupt pin per i pulsanti

Nei miei esperimenti ho deciso di utilizzare il primo pin, il pin 2, per la comunicazione tra i pulsanti ed il microcontrollore:

Feather joy featherwing interrupt pin 2

lasciando invariato l’indirizzo i2c.

Libreria Feather joy-featherwing

Per utilizzare la Feather joy-featherwing hai bisogno della libreria Adafruit seesaw che ti mette a disposizione il produttore.

Per installare la seesaw library puoi accedere, dal tuo IDE, alla sezione Gestione librerie e cercare la Adafruit seesaw:

Feather joy featherwing Adafruit seesaw libraryprocedi quindi a cliccare sul pulsante “Installa” per avviare l’installazione della libreria nel tuo IDE.

Al termine dell’installazione otterrai:

Feather joy featherwing Adafrut seesqw library installed e nei menu esempi dell’IDE ti compariranno gli esempi che puoi utilizzare per i primi test:

Feather joy featherwing simple example

Simple Joy Wing Sketch

Il primo sketch di esempio che puoi utilizzare è il SimpleJoyWing:

#include "Adafruit_seesaw.h"
Adafruit_seesaw ss;
#define BUTTON_RIGHT 6
#define BUTTON_DOWN  7
#define BUTTON_LEFT  9
#define BUTTON_UP    10
#define BUTTON_SEL   14
uint32_t button_mask = (1 << BUTTON_RIGHT) | (1 << BUTTON_DOWN) | 
                (1 << BUTTON_LEFT) | (1 << BUTTON_UP) | (1 << BUTTON_SEL);
#if defined(ESP8266)
  #define IRQ_PIN   2
#elif defined(ESP32)
  #define IRQ_PIN   14
#elif defined(NRF52)
  #define IRQ_PIN   27
#elif defined(TEENSYDUINO)
  #define IRQ_PIN   8
#elif defined(ARDUINO_ARCH_WICED)
  #define IRQ_PIN   PC5
#else
  #define IRQ_PIN   5
#endif
void setup() {
  Serial.begin(115200);
  while(!Serial);
  
  if(!ss.begin(0x49)){
    Serial.println("ERROR!");
    while(1);
  }
  else{
    Serial.println("seesaw started");
    Serial.print("version: ");
    Serial.println(ss.getVersion(), HEX);
  }
  ss.pinModeBulk(button_mask, INPUT_PULLUP);
  ss.setGPIOInterrupts(button_mask, 1);
  pinMode(IRQ_PIN, INPUT);
}
int last_x = 0, last_y = 0;
void loop() {
  int x = ss.analogRead(2);
  int y = ss.analogRead(3);
  
  if ( (abs(x - last_x) > 3)  ||  (abs(y - last_y) > 3)) {
    Serial.print(x); Serial.print(", "); Serial.println(y);
    last_x = x;
    last_y = y;
  }
  
  if(!digitalRead(IRQ_PIN)){
    uint32_t buttons = ss.digitalReadBulk(button_mask);
    //Serial.println(buttons, BIN);
    if (! (buttons & (1 << BUTTON_RIGHT))) {
      Serial.println("Button Right pressed");
    }
    if (! (buttons & (1 << BUTTON_DOWN))) {
      Serial.println("Button Down pressed");
    }
    if (! (buttons & (1 << BUTTON_LEFT))) {
      Serial.println("Button Left pressed");
    }
    if (! (buttons & (1 << BUTTON_UP))) {
      Serial.println("Button Up pressed");
    }
    if (! (buttons & (1 << BUTTON_SEL))) {
      Serial.println("Button SEL pressed");
    }
  }
  delay(10);
}

la prima linea include la libreria Adafruit_seesaw;

linea 02: definisci l’istanza ss della libreria seesaw di Adafruit;

linee 03-07: definisci le costanti corrispondenti ai pulsanti;

linea 08: imposta la maschera di lettura dei pulsanti eseguedo lo shift del primo bit in funzione delle costanti definite alle linee 03-07;

linee 10-22: in funzione del micro controllore con cui stai utilizzando la feather joy-featherwing imposta il pin di interrupt per la comunicazione con i pulsati come configurato a livello hardware sul retro della board;

linee 27-35: inizializza e verifica la comunicazione con il joystick sull’indirizzo 0x49, in caso di fallimento della comunicazione otterrai un messaggio sul monitor seriale. Se la comunicazione avviene correttamente, sul monotor seriale, leggi i valori di risposta della scheda;

linea 36: usa il metodo pinModeBulk a cui passi la maschera dei bottoni calcolata alla linea 08 ed il metodo INPUT_PULLUP;

linea 37: usa il metodo setGPIOInterrupts per impostare a 1 la maschera dei bottoni;

linea 38: imposta il pin 2 ( IRQ_PIN ) come INPUT;

linea 40: definisci le due variabili last_x e last_y come integer ed a valore 0;

linee 42-43: usa il metodo analogRead() della libreria Adafruit per farti restituire il valore del Joystick sugli assi X ed Y;

linee 45-49: valuta la differenza assoluta ( abs ) tra il precedente valore assunto dalla coordinata x o y ed il valore corrente, se la differenza è maggiore di 3 scrive sul monitor seriale i nuovi valori e li riassegna alle rispettive variabili last_;

linea 51: se la lettura sul pin IRQ_PIN è 0 esegue le linee dalla 52 alla 68;

linea 52: con il metodo digitalReadBulk() puoi leggere il valore che ti restituiscono i pulsanti;

linee 54-68: per ciascun pulsante scrivi sul monitor seriale quale pulsante è stato premuto.

Test del simpleJoyFeather sul monitor seriale

Il test del feather joy-featherwing sketch produce sul monitor seriale una schermata sinile alla seguente:

Feather joy featherwing serial data

In cui il movimento del joystick sull’asse verticale passa da 0, in alto, a 1023 in basso. Il joystick orizzontale passa da 0 a sinistra fino a 1023 verso destra.

La pressione dei singoli pulsanti appare separatamente in funzione del pulsante premuto.

Ho acquistato la scheda sul sito: robotics-3d 

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/feather-joy-featherwing.html

2 pings

  1. […] « Feather joy-featherwing […]

  2. […] Feather joy-featherwing […]

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.