Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <DHT.h>
- #include <LiquidCrystal_I2C.h>
- #include <Wire.h>
- #include <Keypad.h>
- #include <Servo.h>
- // Constants
- #define DHTPIN 7 // Pin to which the DHT11 sensor is connected
- #define DHTTYPE DHT11 // DHT 11 type sensor
- // Variables
- DHT dht(DHTPIN, DHTTYPE); // Initialize DHT sensor
- int h; // Stores humidity value
- int t; // Stores temperature value
- LiquidCrystal_I2C lcd(0x27, 16, 2);
- int estado=0; // 0=cerrado 1=abierto
- Servo servo11; // Crea el objeto servo11 con las caracteristicas de Servo
- const byte FILAS = 4; // define numero de filas
- const byte COLUMNAS = 4; // define numero de columnas
- char keys[FILAS][COLUMNAS] = { // define la distribucion de teclas
- {'1','2','3','A'},
- {'4','5','6','B'},
- {'7','8','9','C'},
- {'*','0','#','D'}
- };
- byte pinesFilas[FILAS] = {13,12,11,10}; // pines correspondientes a las filas
- byte pinesColumnas[COLUMNAS] = {6,5,4,3}; // pines correspondientes a las columnas
- Keypad teclado = Keypad(makeKeymap(keys), pinesFilas, pinesColumnas, FILAS, COLUMNAS); // crea objeto teclado
- char TECLA; // almacena la tecla presionada
- char CLAVE[5]; // almacena en un array 4 digitos ingresados
- char CLAVE_MAESTRA[5] = "0000"; // almacena en un array la contraseña inicial
- byte INDICE = 0; // indice del array
- void handleSensorReadings();
- void setup() {
- Serial.begin(9600);
- Serial.println("Temperature and Humedad Sensor Test");
- dht.begin();
- lcd.init();
- lcd.backlight();
- }
- void loop() {
- handleSensorReadings();
- delay(1000);
- }
- void handleSensorReadings() {
- h = dht.readHumidity();
- t = dht.readTemperature();
- Serial.print("Humedad: ");
- Serial.print(h);
- Serial.print(" %, Temp: ");
- Serial.print(t);
- Serial.println(" ° Celsius");
- lcd.setCursor(0, 0);
- lcd.print("Temp & Humedad");
- lcd.setCursor(0, 1);
- lcd.print("T:");
- lcd.print(t);
- lcd.print("C");
- lcd.setCursor(6, 1);
- lcd.print("2023 ");
- lcd.setCursor(11, 1);
- lcd.print("H:");
- lcd.print(h);
- lcd.print("%");
- }
- ////////////Servo////////
- void setup()
- {
- lcd.init(); // inicializa el LCD
- lcd.backlight();
- servo11.attach(11,660,1400); // Asocia el servo1 al pin 11, define el min y max del ancho del pulso
- servo11.write(150); // Gira el servo a 150 grados Cierra la puerta
- limpia();
- }
- void loop(){
- TECLA = teclado.getKey(); // obtiene tecla presionada y asigna a variable
- if (TECLA) // comprueba que se haya presionado una tecla
- {
- CLAVE[INDICE] = TECLA; // almacena en array la tecla presionada
- INDICE++; // incrementa indice en uno
- lcd.print(TECLA); // envia al LCD la tecla presionada
- }
- if(INDICE == 4) // si ya se almacenaron los 4 digitos
- {
- if(!strcmp(CLAVE, CLAVE_MAESTRA)) // compara clave ingresada con clave maestra
- abierto();
- else
- error();
- INDICE = 0;
- }
- if(estado==1 && (analogRead(A3)==0)) // si esta abierta y se pulsa boton de Nueva Clave
- nueva_clave();
- }
- ///////////////////// Error //////////////////////////////
- void error(){
- lcd.setCursor(0,1);
- lcd.print("ERROR DE CLAVE ");
- limpia();
- }
- /////////////////////abierto o cerrado //////////////////////////////
- void abierto(){
- if(estado==0){
- estado=1;
- lcd.setCursor(0,1);
- lcd.print("Abierto "); // imprime en el LCD que esta abierta
- servo11.write(30); // Gira el servo a 30 grados abre la puerta
- }
- else{
- estado=0;
- lcd.setCursor(0,1);
- lcd.print("Cerrado "); // imprime en el LCD que esta cerrada
- servo11.write(150); // Gira el servo a 150 grados cierra la puerta
- }
- limpia();
- }
- /////////////////////Nueva_Clave //////////////////////////////
- void nueva_clave(){
- lcd.setCursor(0,0);
- lcd.print("NUEVA CLAVE: ");
- lcd.setCursor(12,0);
- INDICE=0;
- while (INDICE<=3) {
- TECLA = teclado.getKey(); // obtiene tecla presionada y asigna a variable TECLA
- if (TECLA) // comprueba que se haya presionado una tecla
- {
- CLAVE_MAESTRA[INDICE] = TECLA; // almacena en array la tecla presionada
- CLAVE[INDICE] = TECLA;
- INDICE++; // incrementa indice en uno
- lcd.print(TECLA); // envia a monitor serial la tecla presionada
- }
- }
- estado=0;
- lcd.setCursor(0,1);
- lcd.print("CLAVE CAMBIADA");
- delay(2000);
- limpia();
- }
- ///////////////////// limpia //////////////////////////////
- void limpia(){
- lcd.setCursor(0,0);
- lcd.print("CLAVE : ");
- lcd.setCursor(9,0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement