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.
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:
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:
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.
Notice
La definizione dei colori è automatica e definita dal browser in funzione del numero di valori che deve rappresentare.
Anche la sequenza in cui i colori compaiono e/o sono associati ai valori è automatica.
Puoi solo invertire le posizioni di output sullo sketch per ottenere una differente associazione tra i colori.