Feather joywing

Feather joywing segue il precedente articolo in cui hai letto come è fatta la scheda e come puoi leggere i dati relativi al joystick ed i pulsanti.

Feather joywing featherwing

Dopo aver eseguito la configurazione della shield joystick dal punto di vista dell’indirizzo I2C e dell’interrupt per i pulsati puoi utilizzare lo sketch proposto in seguito per visualizzare graficamente i dati provenienti dalla Feather joywing. 

La configurazione della Feather joywing

La configurazione, dal punto di vista elettronico non è variata:

Feather joy featherwing interrupt pin 2

puoi mantenere liberi i contatti che definiscono l’indirizzo iic e cortocircuitare la pista in corrispondenza al pin 2 per l’interrupt.

Lo sketch

Puoi modificare lo sketch presentato nel precedente articolo rendendolo simile al seguente:

#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.print(y); Serial.print(" ");
    last_x = x;
    last_y = y;
  } else {
    Serial.print(last_x); Serial.print(" "); 
    Serial.print(last_y); Serial.print(" ");
  }
  
  uint32_t buttons = ss.digitalReadBulk(button_mask);
  
  if (! (buttons & (1 << BUTTON_RIGHT))) { Serial.print("1023"); } 
  else { Serial.print("0"); }
  Serial.print(" ");
  if (! (buttons & (1 << BUTTON_DOWN))) { Serial.print("1023"); } 
  else { Serial.print("0"); }
  Serial.print(" ");

  if (! (buttons & (1 << BUTTON_LEFT))) { Serial.print("1023"); } 
  else { Serial.print("0"); }
  Serial.print(" ");

  if (! (buttons & (1 << BUTTON_UP))) { Serial.print("1023"); } 
  else { Serial.print("0"); }
  Serial.print(" ");

  if (! (buttons & (1 << BUTTON_SEL))) { Serial.print("1023"); } 
  else { Serial.print("0"); }
  Serial.println(" ");
  
  delay(100);
}

le linee dalla 01 alla 49 non sono variate rispetto a quanto scritto in merito allo sketch di esempio della Feather joywing distribuito con la libreria Adafruit seesaw e commentato nel precedente articolo.

Le linee 50-53: ti servono per avere sempre un riscontro sul monitor seriale, anche in presenza di variazioni inferiori a tre, la discriminante dell’IF presente alla linea 45;

linea 55: leggi il valore dei pulsanti usando il metodo digitalReadBulk(button_mask); della libreria ss;

linea 57: se il pulsante di destra ( right ) è stato premuto il valore scritto sul monito seriale sarà “1023” ossia il massimo valore analogico che puoi rilevare su un convertitore ADC da 10bit;

linea 58: in caso contrario scrivi “0”;

linea 59: scrivi sul monitor seriale uno spazio ” ” vuoto in modo da separare i valori di pressione del primo pulsante dal successivo;

linee 60-74: esegui la medesima operazione già eseguita alle linee 57-59 e ripetila per tutti gli altri 4 pulsanti rimanenti;

linea 76: attendi 100 millisecondi prima di eseguire nuovamente il loop().

Test dello sketch Feather joywing

Il test dello sketch puoi eseguirlo aprendo il monitor seriale e visualizzando i valori numerici letti dal joystick ed i pulsanti della feather joywing separati tra loro da un carattere spazio, oppure puoi utilizzare il plotter seriale:

Feather joywing plotter seriale

in cui, come vedi nell’immagine sopra, i valori sono rappresetati graficamente nel tempo.

Per ciascun dato è stato assegnato un colore differente per permetterti di visualizzarlo in modo corretto.

Cortesemente, prima di inserire i commenti leggi il regolamento

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

Lascia un commento

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.