key matrix

Salve
Sto giocando da un pò di tempo con un tastierino a matrice e dei led.
ho realizzato un piccolo codice che mi fa accedendere o spegnere il led associato al tasto del tastierino, nel seguente modo:
premo il tasto, led accesso, ri premo il tasto, led spento.

vi posto il codice:

#include <Keypad.h>
const byte ROWS = 2; // two rows
const byte COLS = 3; // Three columns
// Define the Keymap
char keys[ROWS][COLS] = {
  {1,2,3},
  {4,5,6}
  
};
int stato[7]={LOW,LOW,LOW,LOW,LOW,LOW,LOW};
int led[7]={13,32,30,28,26,24,22};
// Connect keypad ROW
byte rowPins[ROWS] = {2,3};
// Connect keypad COL
byte colPins[COLS] = {4,5,6}; 
 // Create the Keypad
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );


void setup()
{
 int a=0;
 for(a=0;a<7;a++)
 { pinMode(led[a], OUTPUT);
 }
  
}



void loop()
{
  char key = kpd.getKey();
  if(key)  // Check for a valid key.
  {
    if(stato[key]==LOW)
    {stato[key]=HIGH;}
    else
    {stato[key]=LOW;}
  }
int i=0;
for(i=0;i<7;i++)
 { digitalWrite(led[i],stato[i]); }

}

volevo chiedere nel caso che voglia fare un codice che faccia questo:
premo un tasto(lasciandolo premuto) il led si accende, lascio il tasto, il led si spegne. sapete darmi una mano ad implementarlo...
vi ringrazio!

Non conosco bene la Keypad, ma direi che a occhio e croce dovresti identificare gli eventi di transizione tra tasto premuto e non premuto, e viceversa.

key = leggi tasto attualmente premuto
if (!prevKey && key) {
// il tasto key è stato premuto
}
else if (prevKey && !key) {
// il tasto prevKey è stato rilasciato
}
prevKey = key

È semplice; controlli uno dopo l'altro se un pulsante é premuto e poi accendi o spegni il rispettivo led.
Ciao Uwe

Già... molto più semplice la soluzinoe di uwe :slight_smile:

ok, ma sapete come fare a controllare un tasto, l'uno dopo l'altro.....che voi sappiate c'è una funzione apposita in keymatrix oppure lo devo fare con dei cicli anadando a scorrere pin to pin , i pin della tastiera?