#include <Servo.h>
#include <Keypad.h>
#define PUERTA 11
#define VENTANA 8
#define FOCO 12
#define BOCINA 9
#define VENTILADOR 13
#define SENSOR A0
static const float BETA = 3950;
static volatile bool adentro = false;
static volatile bool ventanaCerrada = true;
static String password = "1471";
const byte KEYPAD_ROWS = 4;
const byte KEYPAD_COLS = 4;
byte rowPins[KEYPAD_ROWS] = {7, 6, 5, 4};
byte colPins[KEYPAD_COLS] = {3, 2, 1, 0};
char keys[KEYPAD_ROWS][KEYPAD_COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, KEYPAD_ROWS, KEYPAD_COLS);
Servo myservo;
static String entrada = "";
void teclado() {
char key = keypad.getKey();
if (adentro) {
if (key == '*') {
adentro = false;
Serial.println("Hasta luego");
}
return;
}
if (key >= '0' && key <= '9') {
Serial.print(key);
entrada += key;
if (entrada.length() == 4) {
String temp = entrada;
entrada = "";
adentro = (temp == password);
Serial.println();
Serial.println(adentro ? "Bienvenido" : "Credenciales incorrectas");
}
}
}
void foco() {
digitalWrite(FOCO, adentro);
}
void ventana() {
ventanaCerrada = digitalRead(VENTANA);
if (ventanaCerrada) {
noTone(BOCINA);
return;
}
if (!adentro) {
tone(BOCINA, 200);
}
}
void ventilador() {
int temperatura = analogRead(SENSOR);
float celsius = 1 / (log(1 / (1023. / temperatura - 1)) / BETA + 1.0 / 298.15) - 273.15;
if (celsius < 20) {
myservo.write(0);
return;
}
if (celsius <= 26) {
myservo.write(90);
return;
}
myservo.write(180);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(PUERTA, INPUT_PULLUP);
pinMode(VENTANA, INPUT_PULLUP);
pinMode(FOCO, OUTPUT);
pinMode(BOCINA, OUTPUT);
myservo.attach(VENTILADOR);
Serial.println("Inicio");
}
void loop() {
teclado();
foco();
ventana();
ventilador();
// delay(100);
}