24 de nov. 2016

Teclado matricial

La Cristina i jo, vam escollir dos camps el primer ja l'hem explicat que és sobre la llum, i el que ara explicarem és el camp del teclat matricial.
Primer vam començant provant una clau, i quan posavem la clau el led s'encenia. Ens va funcionar i vam continuar treballant.
Després vam utilitzar la pantalla LCD, que vam fer un programa molt sencill que enviarà un missatge a la pantalla. També ens va funcionar i vam continuar.
Vam decidir que ja podiem començar el treball que voliem.
Primer vam veure els materials que necessitàvem, que era:
-Teclat matricial
-Led vermell i led verd
-Pantalla LCD
-Potenciòmetre
-Brunzidor
-Servo
El que voliem era que la porta principal de la casa, s'obrís possant una clau al teclat matricial i quan la possavem que sortís en la pantalla LCD. 
Si la clau la possaves malament el led vermell s'encenia, el brunzidor sonava( que era com l'alarma de la casa) i sortia a la pantalla LCD clau errònea, i quan la possaves bé s'encenia el led verd i s'obría la porta(amb el servo, però ho faríem al final de tot).

Aquí us deixo el programa:



Després de fer el programa i comprovar-ho no ens sortia el que volíem que faci.



Després d'un temps vam aconseguir que el programa donés els resultats que volíem, amb la qual cosa el teclat matricial, quan posàvem la contrasenya correcta, la porta s'obre i un led s'encén a la mateixa vegada.

#include <Keypad.h>; // Con esta linea llamamos a la librería Keypad para que arduino reconozca el teclado
#include <Servo.h>
Servo servo1;
char contrasena[]="1234"; // En esta linea creamos la constante de cadena llamada contraseña (el numero 2222 puede ser cambiado)
char codigo[4]; // Creamos otra constante, en esta se guardaran los caracteres que presionemos en nuestro teclado matricial 4x4
int cont=0; // Esta es una variable que nos servirá más adelante
int angulo=0;

const byte FILAS = 4; //Este código se estable para definir que nuestro teclado tiene 4 filas 
const byte COLS = 4; //Este código se estable para definir que nuestro teclado tiene 4 columnas

char teclas[FILAS][COLS] = //En el siguiente matriz se agregan en orden las teclas que posee nuestro teclado
{
 {'1','2','3','A'},
 {'4','5','6','B'},
 {'7','8','9','C'},
 {'*','0','#','D'}
};

byte pinesF[FILAS] = {4, 5, 6, 7}; // Estos son los pines de conexión de Arduino de las columnas
byte pinesC[COLS] = {8, 9, 11, 10}; //Estos son los pines de conexión de Arduino de las filas

Keypad customKeypad = Keypad(makeKeymap(teclas), pinesF, pinesC , FILAS , COLS); //En este punto el teclado se inicia y realiza el mapeo de sus teclas con respecto a la matriz colocada arriba

void setup()
{
 servo1.write(10);

 pinMode(13, OUTPUT); //El pin 13 sera nuestra salida digital (así aprovecharemos el led que pose)
 Serial.begin(9600); //Se inicia el puerto serial
}

void loop()
{
 char customKey = customKeypad.getKey(); //esta linea indica que el carácter presionado se guardara en la variable customKey
 if (customKey != NO_KEY) //Con este siclo preguntamos si se presiono una tecla, si se presiono entonce el ciclo continua
 {
 codigo[cont]=customKey; //se guardaran los caracteres presionados en codigo[cont]
 Serial.print(codigo[cont]); //Se imprime en nuestro monitor serial lo que este guardado en codigo[cont]
 cont=cont+1; //incrementamos la variable cont (esto con el fin de tener los 4 dígitos que requerimos)
 if(cont==4) //Ahora comienza otro siclo if, en el cual se pregunta si ya hay 4 datos guardados y si es así entonce el siclo continua

 {

 if(codigo[0]==contrasena[0]&&codigo[1]==contrasena[1]&&codigo[2]==contrasena[2]&&codigo[3]==contrasena[3])
 {
  digitalWrite(13, HIGH);
   servo1.attach(3);
 for(angulo  = 9; angulo  <= 101; angulo  += 1) 
 {
   servo1.write(angulo);
    delay(25);
            }
 digitalWrite(13,!digitalRead(13)); //si lo anterior es verdad entonces se encenderá el led, si se ingresa nuevamente la contraseña entonces se apagara
 Serial.println("Password correcta"); //si la contraseña es correcta entonces se imprime ""Password correcta")
 delay(3000);
 for(angulo  = 9; angulo  <= 101; angulo  -= 1) 
 {
   servo1.write(angulo);
    delay(25);
            }
   servo1.detach();
 digitalWrite(13, LOW);

 }
 else//empieza un nuevo ciclo, esta vez indicamos si el código es diferente que la contraseña siga con el siclo
 {

 Serial.println("Password incorrecta"); // se imprime que que la Password es incorrecta
 }

 cont=0; //resetear a 0 la variable cont
 }
 }
}


Cap comentari:

Publica un comentari a l'entrada