Sketch Lettura tastiera matrice 3x4 con password
/* 3
Legge una tastiera a matrice 3x4. Se si inseriscono i numeri giusti (password) si attiva per un secondo
un relè.
Si fa uso dell’accesso diretto ai registri MCU per attivare le resistenze di Pull-up.
*/
unsigned char a;
unsigned char b;
unsigned char c;
int a1, b1, c1;
int rit = 150;
void setup ()
{
Serial.begin(9600);
DDRD = 0b00000000; // Il registro di direzione dati Port D - lettura/scrittura. 1 = pin_Out, 0 = Pin_In
 // In particolare, Pin da 4 a 7 come input.
PORTD = 0b11110000; // Ponendo 1 ad un pin dichiarato come Input attiva resistenza di pull up
}
void loop ()
 {
// Dispongo il pin 8 come output
DDRB = 0b100001; // PIN 13,..,8 Stringa di sei bit. 1 = pin_Out, 0 = Pin_In
// Porto a 0 la prima colonna A
PORT & 0b11110000; // And logico con Porta D
switch (a)
{
 case 112:
 Serial.println("1"); a1 = 1;
 break;
 case 176:
 Serial.println("4"); a1 = 4;
 break;
 case 208:
 Serial.println("7"); a1 = 7;
 break;
 case 224:
 Serial.println("*");
 a1=b1=c1=0; // Premendo * le variabili si azzerano. Utile in caso di errato inserimento codice.
 Serial.println("Reset");
 break;
}
delay(rit);
// Dispongo il pin 9 come output
DDRB = 0b100010; // PIN 13,..,8 Stringa di sei bit. 1 = pin_Out, 0 = Pin_In
// Porto a 0 la seconda colonna B
PORTB = 0b011101; // Pin 9 e 13 = Low
b = PIND & 0b11110000; // And logico
switch (b)
{
 case 112:
 Serial.println("2"); b1 = 2;
 break;
 case 176:
 Serial.println("5"); b1 = 5;
 break;
 case 208:
 Serial.println("8"); b1 = 8;
 break;
 case 224:
 Serial.println("0"); b1 = 0;
 break;
}
delay(rit);
// Dispongo il pin 10 come output
DDRB = 0b100100; // PIN 13,..,8 Stringa di sei bit. 1 = pin_Out, 0 = Pin_In
// Porto a 0 la terza colonna C
PORTB =0b011011; // Pin 10 e 13 = Low
c = PIND & 0b11110000; // And logico
switch (c)
{
 case 112:
 Serial.println("3"); c1 = 3;
 break;
 case 176:
 Serial.println("6"); c1 = 6;
 break;
 case 208:
 Serial.println("9"); c1 = 9;
 break;
 case 224:
 Serial.println("#");
 if (a1+b1+c1 == 6) // Codice di controllo da modificare
{
PORTB =0b100000; // Password Ok. Attiva led pin 13 + relè esterno.
Serial.println(a1+b1+c1);
delay (1000);
}
break;
delay(rit);
}
}