#include <Arduino.h>
#include <freertos/FreeRTOS.h>
#include <freertos/task.h>
const int led1 = 2;
const int led2 = 4;
const int led3 = 5;
const int led4 = 18;
const int ledsave = 15;
const int barrier1 = 16;
const int barrier2 = 17;
byte x;
byte y;
byte z;
//botones
const int boton1 = 12;
bool bot1 = 0;
const int boton2 = 13;
bool bot2 = 0;
//110v
const int bomb = 19;
const int zum = 23;
//binario
int bin = 0;
//ingresar contraseña
int dato1 = 0;
int dato2 = 0;
int dato3 = 0;
bool code1 = 0;
bool code2 = 0;
bool code3 = 0;
//ingresar clave
int num1 = 0;
int num2 = 0;
int num3 = 0;
bool numerosave1 = 0;
bool numerosave2 = 0;
bool numerosave3 = 0;
bool imprimir = false;
bool state = 0;
bool state1 = 0;
bool alarma = false;
bool alarma1 = false;
//numero de seguridad
int inicio = 0;
bool stateinit = false;
int nrandom = 0;
unsigned long tiempo;
unsigned long tx = 0;
bool estadotiempo = 0;
int estado = LOW;
bool statealarm = false;
bool statealarm1 = false;
void binario(int bin ){
digitalWrite(led1,bitRead(bin,0));
digitalWrite(led2,bitRead(bin,1));
digitalWrite(led3,bitRead(bin,2));
digitalWrite(led4,bitRead(bin,3));
}
void alarmainit(void *pvParameters) {
(void) pvParameters;
if(alarma == true || alarma == true){
for (;;) {
digitalWrite(zum, HIGH);
digitalWrite(bomb, HIGH);
vTaskDelay(pdMS_TO_TICKS(1000));
digitalWrite(bomb, LOW);
vTaskDelay(pdMS_TO_TICKS(1000));
if ((alarma == false && alarma1 == false) && statealarm == true){
digitalWrite(zum, LOW);
vTaskSuspend(NULL);
statealarm1 = true;
statealarm = false;
}
if ((alarma == true || alarma1 == true) && statealarm1 == true){
vTaskResume(NULL);
statealarm1 = false;
}
}
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(ledsave, OUTPUT);
pinMode(barrier1,OUTPUT);
pinMode(barrier2, OUTPUT);
pinMode(bomb,OUTPUT);
pinMode(zum, OUTPUT);
pinMode(boton1, INPUT);
pinMode(boton2, INPUT);
randomSeed(analogRead(0));
Serial.println("ingrese una contraseña de 3 digitos ");
digitalWrite(barrier1, HIGH);
digitalWrite(barrier2, HIGH);
}
void loop() {
bot1 = digitalRead(boton1);
bot2 = digitalRead(boton2);
//primer numero ingresado
if(numerosave1 == false && num3 == z){
if(bot1 == 1 && bot2 == 0){
binario(bin);
x = bin;
Serial.println(x);
bin = (bin + 1) % 9;
delay(200);
}
if(bot2 == 1 && bot1 == 0){
Serial.print("primer numero ingresado es: ");
Serial.println(x);
delay(200);
num1 = x;
numerosave1 = true;
bot2 = 0;
binario(0);
}
}
//segundo numero ingresado
if(numerosave2 == false && numerosave1 == true ){
if(bot1 == 1 && bot2 == 0){
binario(bin);
y = bin;
Serial.println(y);
bin = (bin + 1) % 9;
delay(200);
}
if(bot2 == 1 && bot1 == 0){
Serial.print("segundo numero ingresado es: ");
Serial.println(y);
delay(200);
num2 = y;
numerosave2 = true;
bot2 = 0;
binario(0);
}
}
//tercer numero ingresado
if(numerosave3 == false && numerosave1 == true && numerosave2 == true){
if(bot1 == 1 && bot2 == 0){
binario(bin);
z = bin;
Serial.println(z);
bin = (bin + 1) % 9;
delay(200);
}
if(bot2 == 1 && bot1 == 0){
Serial.print("tercer numero ingresado es: ");
Serial.println(z);
delay(200);
num3 = z;
numerosave3 = true;
bot2 = 0;
Serial.print("tu contraseña es : ");
Serial.print(num1);
Serial.print(num2);
Serial.println(num3);
delay(200);
binario(bin = 0);
x = 0;
y = 0;
z = 0;
}
}
if(numerosave3 == true && numerosave1 == true && numerosave2 == true){
digitalWrite(ledsave,HIGH);
delay(100);
if(imprimir == false){
Serial.println("ingrese su contraseña : ");
imprimir = true;
}
if(code1 == false){
if(bot1 == 1 && bot2 == 0){
bin = (bin + 1) % 9;
binario(bin);
x = bin;
Serial.println(bin);
delay(200);
}
if(bot2 == 1 && bot1 == 0){
Serial.print("primer numero ingresado es: ");
Serial.println(x);
delay(200);
dato1 = x;
code1 = true;
bot2 = 0;
binario(0);
}
}
if(code1 == true && code2 == false){
if(bot1 == 1 && bot2 == 0){
bin = (bin + 1) % 9;
binario(bin);
y = bin;
Serial.println(bin);
delay(200);
}
if(bot2 == 1 && bot1 == 0){
Serial.print("segundo numero ingresado es: ");
Serial.println(y);
delay(200);
dato2 = y;
code2 = true;
bot2 = 0;
binario(0);
}
}
if(code1 == true && code2 == true && code3 == false){
if(bot1 == 1 && bot2 == 0){
bin = (bin + 1) % 9;
binario(bin);
z = bin;
Serial.println(bin);
delay(200);
}
if(bot2 == 1 && bot1 == 0){
Serial.print("tercer numero ingresado es: ");
Serial.println(z);
delay(200);
dato3 = z;
bot2 = 0;
Serial.print("contraseña digitada: ");
Serial.print(dato1);
Serial.print(dato2);
Serial.println(dato3);
delay(200);
binario(bin = 0);
code3 = true;
}
}
if(code1 == true && code2 == true && code3 == true){
if(dato1 != num1 || dato2 != num2 || dato3 != num3){
Serial.println("contraseña incorrecta ***");
Serial.println("vuelva a ingresar su contraseña ***");
noInterrupts();
alarma = true;
code1 = 0;
code2 = 0;
code3 = 0;
interrupts();
x = 0;
y = 0;
z = 0;
}
// contraseña establecida
if(dato1 == num1 && dato2 == num2 && dato3 == num3 && state == false){
alarma = false;
alarma1 = false;
Serial.println("contraseña correcta ***");
digitalWrite(barrier1, LOW);
binario(0);
delay(200);
int nrandom = random(1, 7);
y = nrandom;
binario(y);
Serial.print("tu codigo de seguridad es : ");
Serial.println(y);
delay(200);
state = true;
}
//ingreso codigo de seguridad
if(state == true){
if (bot1 == 1 && bot2 == 0 && y != 0 && state1 == false){
binario(bin);
x = bin;
Serial.println(bin);
bin = (bin + 1) % 9;
delay(200);
}
if (bot1 == 0 && bot2 == 1 && y != 0 && state1 == false){
Serial.print("codigo de seguridad ingresado : ");
inicio = x;
Serial.println(x);
delay(200);
state1 = true;
bot2 = 0;
}
if (inicio == y && state1 == true){
Serial.println("codigo de seguridad correcto***");
Serial.println("vuelva a ingresar el codigo de seguridad para iniciar el sistema");
digitalWrite(barrier2, LOW);
delay (200);
stateinit = true;
}
if (inicio != y && state1 == true){
Serial.println("codigo de seguridad incorrecto***");
delay (200);
digitalWrite(barrier1, HIGH);
digitalWrite(barrier2, HIGH);
noInterrupts();
code1 = false;
code2 = false;
code3 = false;
x = 0;
y = 0;
z = 0;
dato1 = 0;
dato2 = 0;
dato3 = 0;
state1 = false;
state = false;
interrupts();
}
}
}
if (stateinit == true){
digitalWrite(bomb, HIGH);
digitalWrite(zum, HIGH);
delay(1000);
digitalWrite(bomb, LOW);
digitalWrite(zum, LOW);
state1 = false;
stateinit = false;
}
if (alarma == true || alarma1 == true){
if (statealarm == false) {
digitalWrite(zum, HIGH);
xTaskCreate(alarmainit, "LED1", 1000, NULL, 1, NULL);
statealarm = true;
}
}
}
}