Ciao,
nel mio progetto, utilizzo l'IC del titolo, come I/O expander per i tasti che l'utente utilizza quando vuole impostare/variare qualcosa, mano a mano però che implemento le varie funzioni e le faccio funzionare, perdo reattività sulla lettura dei tasti quando vengono premuti, in pratica, più cose chiedo di fare ad Arduino, e sempre meno è utilizzabile il tastierino, lo so per certo, perché ho fatto prove disabilitando a casaccio alcune funzioni ed il tastierino torna ad essere veloce nell'utilizzo...
Ho deciso quindi di iniziare ad usare gli interrupt per leggere i tasti forte del fatto che il PCF in questione ha un piedino int ( è Open drain, come mi ha spiegato uwefed in passato, quindi uso una pull-up da 10k), ed ho iniziato a fare prove collegando il piedino int del PCF al piedino 2 di arduino per vedere come variava l'ingresso... avrei dovuto saperlo prima in effetti, in ogni caso va da 1 a 0 ad ogni pressione di tasto e fa la stessa cosa al rilascio del tasto, quindi ho due variazioni in uscita dal piedino int, ogni volta che uso un tasto qualsiasi, già questo mi incarta parecchio, ma via software credo di poterlo risolvere...
Ho iniziato ad avere problemi quando ho provato a capire, utilizzando attachInterrupt, quale tasto premo:
#include <Wire.h>
#include <IOexp.h>
byte led = 13;
volatile int statoled = LOW;
volatile byte tasto;
IOexp tastiera(0x39);
void lampeggioled13letturatasto()
{
statoled = !statoled;
Wire.beginTransmission(0x39);
Wire.requestFrom(0x39, 8);
if(Wire.available() )
{
tasto = Wire.read();
}
//tasto = tastiera.fullread();
}
void setup()
{
Wire.begin();
Serial.begin(9600);
pinMode(led, OUTPUT);
attachInterrupt(0, lampeggioled13letturatasto, CHANGE);
}
void loop()
{
digitalWrite(led, statoled);
Serial.print("LED = ");
Serial.print(statoled);
//tasto = tastiera.fullread();
/* Wire.beginTransmission(0x39);
Wire.requestFrom(0x39, 8);
if(Wire.available() )
{
tasto = Wire.read();
}
*/
Serial.print(" Tasto = ");
Serial.println(tasto, DEC);
}
In pratica ho preso uno programmino già funzionate copiato da internet per fare delle prove ed ho aggiunto i comandi per leggere il tasto, inizialmento usando la libreria IOexp, ma anche usando i comandi della wire, ed ecco cosa succede:
(ho sempre compilazioni senza errori)
- senza nessun comando per lettura tasto il led lampeggia (il piedino int varia due volte ogni volta che premo e rilascio qualsiasi pulsante, quindi non rimane acceso
- Aggiungendo alternativamente i comandi di lettura tasto sia per IOexp che per wire, nel loop, tutto funziona e nel seriale ho i riscontri
- Provo ad inserire i comandi di lettura tasti nella funzione che attacco all'interrupt carico senza errori e sia il seriale che il led si bloccano alla prima pressione di qualsiasi tasto sia con la libreria IOexp che con wire e non riesco a capire perché =(
=( =( =( Mi aiutate per favore?
Grazie Riccardo