Hola buenas noches estoy elaborando un programa para un trabajo escolar pero no lo puedo completar me gustaría recibir algunos consejos por favor. Esto es lo que tiene que hacer el programa
Diseñar un sistema de seguridad para un edificio inteligente que cuente con lo siguiente:
-Teclado matricial para introducir la clave para activar y/o desactivar la alarma.
-Pantalla LCD para desplegar el estado de la alarma y de los sensores.
- Sensor en la puerta principal
- Sensores en al menos 1 ventana
- Sensor de movimiento
- Sensor de fuga de gas y/o incendio.
- Bocina
Para activar la alarma deben estar todos los sensores desactivados y posteriormente introducir la clave y dará un lapso de 10 segundos para abandonar el edificio, en ese lapso puede ser abierta la puerta principal y no debe sonar la bocina de alarma.
Pasados los 10 segundos, si se activa algun sensor (excepto el de la puerta principal), sonará la bocina y se apagará después de 10 segundos para volver a encender en 2 segundos más por otro lapso de 10 segundos y se repetirá hasta que se introduzca la clave para desactivar la alarma.
Una vez activada la alarma, si se abre la puerta principal, les dará 10 segundos para introducir la clave y desactivar la alarma, si no se logra en ese tiempo se activará la bocina y se apagará hasta que se introduzca la clave correcta.
En caso de detectar fuga de gas debe cerrar la llave de paso del gas y activar un buzzer. En caso de sensor de incendio debe activar aspersores y un buzzer. (En esta última opción, el equipo puede elegir si utiliza un sensor de gas o sensor de humo).
Código que he elaborado perdón por el desorden y mis errores
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>; // Con esta linea llamamos a la librería Keypad para que arduino reconozca el teclad
//teclado
LiquidCrystal_I2C lcd(32,16,2);
char contrasena[]="2222"; // 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 puerco=0;
int cont=0; // Esta es una variable que nos servirá más adelante
int on;
int con = 0;
int buzzer = A3;
int puerta = 11;
int ventana = 10;
int pued=0;
int vd =0;
int gas = A2;
int p = 12;
int gasd=0;
int pd=0;
int opto=0;
const byte ROWS = 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 hexaKeys[ROWS][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 rowPins[ROWS] = {9, 8, 7, 6}; // Estos son los pines de conexión de Arduino de las columnas
byte colPins[COLS] = {5, 4, 3, 2}; //Estos son los pines de conexión de Arduino de las filas
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); //En este punto el teclado se inicia y realiza el mapeo de sus teclas con respecto a la matriz colocada arriba
void setup()
{
pinMode(puerta,INPUT);
pinMode(ventana,INPUT);
pinMode(12, INPUT);
pinMode(buzzer, OUTPUT);
pinMode(gas, INPUT);
pinMode(13, OUTPUT); //El pin 13 sera nuestra salida digital (así aprovecharemos el led que pose)
Serial.begin(9600); //Se inicia el puerto seria
//teclado
lcd.init();
lcd.backlight();
}
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,!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")
on = digitalRead(13);
}
else{(codigo!=contrasena);//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
}
}
if (on==HIGH){
if(con==0){
con++;
lcd.clear();
lcd.print("abandona");
delay(5000);
lcd.clear();}
else{
//cont=0; //resetear a 0 la variable cont
lcd.setCursor(0,0);
lcd.print("alarma on");
gasd = analogRead(gas);
pd = digitalRead(p);
pued = digitalRead(puerta);
vd = digitalRead (ventana);
//gas
if(gasd >= 600){
lcd.clear();
delay(500);
lcd.setCursor(0,0);
lcd.print("gas");
analogWrite(buzzer,255);
delay(10000);
analogWrite(buzzer,0);
delay(2000);
analogWrite(buzzer,255);
delay(10000);
analogWrite(buzzer,0);
delay(2000);
lcd.clear();}
else{
analogWrite(buzzer,0);
}
//movimiento
if(pd==HIGH){
lcd.clear();
delay(500);
lcd.setCursor(0,0);
lcd.print("movimiento");
analogWrite(buzzer,255);
delay(10000);
analogWrite(buzzer,0);
delay(2000);
analogWrite(buzzer,255);
delay(10000);
analogWrite(buzzer,0);
delay(2000);
lcd.clear();}
else{
analogWrite(buzzer,0); }
//puerta
if (pued==HIGH){
Serial.println(pued);
lcd.clear();
delay(500);
lcd.setCursor(0,0);
lcd.print("cotrasena");
//entrada
}
else{analogWrite(buzzer,0);}
}
}
}