Go Down

Topic: key matrix (Read 779 times) previous topic - next topic

damosound

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:
Code: [Select]

#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!

tuxduino

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

uwefed

#2
Dec 08, 2012, 03:24 pm Last Edit: Dec 08, 2012, 09:21 pm by uwefed Reason: 1
È semplice; controlli uno dopo l'altro se un pulsante é premuto e poi accendi o spegni il rispettivo led.
Ciao Uwe

tuxduino

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

damosound

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?

Go Up