Go Down

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

damosound

salve ragazzi, sto facendo un piccolo sketch, per imparare ad utilizzare i tastierini a matrice
mi sono servito della keypad.h
ho una matrice 2 righe ,3 colonne  e 6 led.
quello che voglio realizzare è semplice, spingo un tasto si accende il led corrispondente, ri-premo il tasto e il led corrispondente si spegne.
questo è il codice che ho prodotto
Code: [Select]
#include <Keypad.h>
const byte ROWS = 2; // two rows
const byte COLS = 3; // Three columns
// Define the Keymap
char keys[ROWS][COLS] = {
  {0,1,2},
  {3,4,5}
 
};
int stato[6]={LOW,LOW,LOW,LOW,LOW,LOW};
int led[6]={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<6;i++)
{ digitalWrite(led[i],stato[i]); }
}

allora, il codice fa quello che deve per i primi 5 switch e led, se premo il 6° sw il 6° led non si accende.
ho provato a ricontrollare il codice, ma non riesco a capire cosa non va, mi date una mano??
saluti! e grazie per l'attenzione!

uwefed

Code: [Select]
int a=0;
for(a=0;a<7;a++)
{ pinMode(led[a], OUTPUT);
}


Stai mettedo 7 Pin come uscite e hai definito nel Array solo 6 (indice da 0 a 5) Pin.
giusto é:
Code: [Select]
for(a=0;a<6;a++)

Se Ti fai stampare il dato restituito dalla funzione kpd.getKey(); cosa trovi se premi il sesto pulsante?

Ciao Uwe

damosound

come faccio a farmelo  stampare?

uwefed

con Serial.print
http://arduino.cc/en/Reference/Serial e
http://arduino.cc/en/Serial/Print
Ciao Uwe

damosound

GRazie UWE della dritta... non sapevo si potesse monitorare la seriale in questo modo....
Comunque dal monitor seriale ho notato che premendo lo sw corrispondende allo "0", la seriale non trametteva nessun dato, mentre per gli altri si.
ho risolto, togliendo lo "0" dai valori della matrice key. in  questo modo funziona correttamente.
presto inserisco  il codice corretto, nel caso qualcuno possa trovarne giovamento.

uwefed

Di niente
Ciao Uwe

Go Up