Go Down

Topic: Comandare uscite con un Keypad (Read 4277 times) previous topic - next topic

marcosilve95

Salve a tutti,
io dovrei tramite l'utilizzo di un Keypad comandare delle uscite a relè. Cioè ad ogni tasto associare l'attivazione di un'uscita.
Qualcuno mi potrebbe dire come impostare lo sketch per eseguire questa operazione con Arduino?
Grazie

brunello22

Quale keypad ?

Comunque c'e' un esempio nel playground
http://playground.arduino.cc/Main/KeypadTutorial

marcosilve95

Grazie per la risposta.
io ho provato a copiare lo stesso codice , solo che durante la compilazione mi da in seguente errore

"



C:\Users\Marco\Desktop\keypad\examples\DynamicKeypad\DynamicKeypad.ino:83:20: fatal error: Keypad.h: No such file or directory

 #include <Keypad.h>

                    ^

compilation terminated.

exit status 1
Errore durante la compilazione per la scheda Arduino/Genuino Mega or Mega 2560."

fratt

Hai scaricato la libreria?
Puoi farlo dal link di Brunello.

marcosilve95

Adesso ho installato la libreria. Utilizzo il Keypad quello con 16 tasti:
1,2,3,A
4,5,6,B
7,8,9,C
*.0,#,D

SukkoPera

Bene, andiamo per gradi: riesci a stampare sul monitor seriale il valore del tasto che premi sul keypad?
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

marcosilve95

Si, ma non sono corretti. Nel senso che se premo 1 sul keypad mi compare 8. Se premo 2 mi compare 0. Se premo 3 non compare nulla. Se premo 4 mi compare 9... Tutto sbagliato

SukkoPera

"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E


fratt

a me succede quando inverto i collegamenti delle righe con le colonne...
sembra banale, ma prova a controllare che i collegamenti siano corretti.

SukkoPera

Concordo: se le pressioni vengono rilevate correttamente, ma escono i tasti sbagliati, probabilmente è solo un problema di collegamenti, quindi ricontrollali.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

marcosilve95

Ho invertito tutti i collegamenti e adesso rileva tutto giusto.
Adesso per associare ad ogni tasto una certa uscita, che funzioni si dovrebbero usare?

nid69ita

Lo switch come indicato nell'esempio del playground
http://playground.arduino.cc/Main/KeypadTutorial
my name is IGOR, not AIGOR

SukkoPera

Ci sono molti modi per farlo, il più semplice potrebbe essere uno switch case. Vedi questo e questo.


Occhio solo che il carattere letto deve essere salvato in una variabile di tipo char (o int), non può essere una stringa.
"Code is read much more often than it is written, so plan accordingly. Design for readability."

Guida rapida a ESP8266: https://goo.gl/kzh62E

marcosilve95

#14
Mar 31, 2016, 12:11 pm Last Edit: Mar 31, 2016, 12:23 pm by marcosilve95
Adesso ho creato uno sketch in cui se preso il taso 1 si accende il led, se premo il tasto 2 si spegne..
E se adesso volessi fare in modo che dopo due secondo si spenga automaticamente il led, senza premere il tasto 2, dove devo inserire la funzione delay?

Questo è il codice:
Code: [Select]
// ACCENDERE E SPEGNERE UN LED CON IL TASTO 1 E DUE

#include <Keypad.h>

const byte ROWS = 4; // quattro righe
const byte COLS = 4; // quattro colonne
// Definizione del Keymap
char keys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'#','0','*','D'}
};
// Connessione Keypad ROW0, ROW1, ROW2 e ROW3 ai pin Arduino
byte rowPins[ROWS] = { 2,3,4,5};
// Connessione Kaypad COL0, COL1 e COL2 ai pin Arduino
byte colPins[COLS] = { 6,7,8,9 };

// Creazione del Keypad
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

#define ledpin 13

void setup()
{
  pinMode(ledpin,OUTPUT);
  digitalWrite(ledpin, HIGH);
  Serial.begin(9600);
}

void loop()
{
  char key = kpd.getKey();
  if(key)  // Controllo del tasto premuto
  Serial.println(key);
  {
    switch (key)
    {
      case '1':
        digitalWrite(ledpin, LOW);
        break;
       
      case '2':
        digitalWrite(ledpin, HIGH);
        break;
        }
  }

}

Go Up