#include "Keypad.h"
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const byte ROWS = 4; // number of rows
const byte COLS = 4; // number of columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {19, 18, 5, 17}; // row pinouts of the keypad R1 = D8, R2 = D7, R3 = D6, R4 = D5
byte colPins[COLS] = {16, 4, 0, 2}; // column pinouts of the keypad C1 = D4, C2 = D3, C3 = D2
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
char contrasena[]="2222"; // En esta linea creamos la constante de cadena llamada contraseña
char codigo[4]; // Creamos otra constante, en esta se guardaran los caracteres que presionemos
int cont=0; // Esta es una variable que nos servirá más adelante
#define LedVerde 14
#define LedRojo 27
void setup()
{
Serial.begin(9600);
pinMode(LedVerde, OUTPUT);
pinMode(LedRojo, OUTPUT);
if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
}
void loop()
{
digitalWrite(LedVerde,LOW);
digitalWrite(LedRojo,LOW);
display.clearDisplay();
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(16,0); // Start at top-left corner
display.println("Ingre la clave");
display.setTextSize(2); // Draw 2X-scale text
display.setTextColor(SSD1306_BLACK, SSD1306_WHITE);
display.setCursor(32,30); // Draw 'inverse' text
delay(30);
display.println("****");
display.display();
char teclado = keypad.getKey();
if (teclado != NO_KEY)
{
codigo[cont]=teclado;
display.setTextSize(2); // Draw 2X-scale text
display.setTextColor(SSD1306_BLACK, SSD1306_WHITE);
display.setCursor(32,30); // Draw 'inverse' text
display.print(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)
display.display();
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])
{
Serial.println();
Serial.println("Clave correcta"); //si la contraseña es correcta entonces se imprime ""Password correcta")
display.setTextSize(1); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);
display.setCursor(10,16); // Draw 'inverse' text
display.println("Clave correcta!!");
display.setTextSize(2);
display.setTextColor(SSD1306_BLACK, SSD1306_WHITE);
display.setCursor(32,30); // Draw 'inverse' text
display.println(contrasena);
display.display();
digitalWrite(LedVerde, HIGH);
delay(1000);
digitalWrite(LedVerde, LOW);
delay(1000);
digitalWrite(LedVerde, HIGH);
delay(1000);
digitalWrite(LedVerde, LOW);
delay(1000);
}
else
{
Serial.println();
Serial.println("Clave incorrecta");
display.setTextSize(1); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);
display.setCursor(10,16); // Draw 'inverse' text
display.println("Clave incorrecta!!");
display.setTextSize(2);
display.setTextColor(SSD1306_BLACK, SSD1306_WHITE);
display.setCursor(32,30); // Draw 'inverse' text
display.println("XXXX");
display.display();
display.display();
digitalWrite(LedRojo, HIGH);
delay(1000);
digitalWrite(LedRojo, LOW);
delay(1000);
digitalWrite(LedRojo, HIGH);
delay(1000);
digitalWrite(LedRojo, LOW);
delay(1000);
digitalWrite(LedRojo, HIGH);
delay(1000);
digitalWrite(LedRojo, LOW);
delay(1000);
digitalWrite(LedRojo, HIGH);
delay(2000);
digitalWrite(LedRojo, LOW);
delay(10);
}
cont=0; //resetear a 0 la variable cont
}
}
}