#define ADC_VREF_mV 5000.0 // in millivolt
#define ADC_RESOLUTION 1024.0
int PB = 2;
int IP = 3;
int IIP = 4;
int EMER = 5;
int FPB = 6;
int FIP = 7;
int FIIP = 8;
int FPC = 9;
int TEMP = A0;
int LUZ= A1;
int AIRE= A2;
int SUBE = 10;
int BAJA = 13;
int LIGHT = 12;
int BOCI = 11;
void setup() {
pinMode(PB,INPUT);
pinMode(IP,INPUT);
pinMode(IIP,INPUT);
pinMode(EMER,INPUT);
pinMode(FPB,INPUT);
pinMode(FIP,INPUT);
pinMode(FIIP,INPUT);
pinMode(FPC,INPUT);
pinMode(TEMP,INPUT);
pinMode(LUZ,INPUT);
pinMode(SUBE,OUTPUT);
pinMode(BAJA,OUTPUT);
pinMode(BOCI,OUTPUT);
pinMode(LIGHT,OUTPUT);
pinMode(AIRE, OUTPUT);
Serial.begin(9600);
}
void loop() {
boolean PulsPB = digitalRead(PB);
boolean PulsPI = digitalRead(IP);
boolean PulsPII = digitalRead(IIP);
boolean PulsEMER = digitalRead(EMER);
boolean PlantaB = digitalRead(FPB);
boolean PrimerP = digitalRead(FIP);
boolean SegundoP = digitalRead(FIIP);
boolean PuertaC = digitalRead(FPC);
Luz();
Clima();
if (PulsEMER == HIGH){
digitalWrite(SUBE, LOW);
digitalWrite(BAJA, LOW);
sirenaEmer();
}
if (PuertaC == HIGH){//verifica que la puerta esté cerrada
noTone(BOCI);//detiene la sirena
if (PrimerP == HIGH ){ //verifica la ubicación del ascensor
digitalWrite(SUBE, LOW);// al ser el piso del medio es señal de
digitalWrite(BAJA, LOW);// llegada para cuando sube y cuando baja
// y detiene la marcha
if (PulsPB == HIGH){//detecta el llamado desde la planta baja
while ((PlantaB != HIGH) && (PuertaC == HIGH)){//condiciones para la
if (PulsEMER != HIGH){ //marcha
digitalWrite(BAJA, HIGH);// enciende la marcha inversa
PlantaB=digitalRead(FPB); //verifican las
PuertaC=digitalRead(FPC); //condiciones
PulsEMER =digitalRead(EMER);
}else{
return;}// vuelve al inicio del loop
}
}
if (PulsPII == HIGH){
while ((SegundoP != HIGH)&& (PuertaC == HIGH)){
if (PulsEMER != HIGH){
digitalWrite(SUBE, HIGH);
SegundoP=digitalRead(FIIP);
PuertaC=digitalRead(FPC);
PulsEMER =digitalRead(EMER);
}else{
return;}
}
}
}
if (SegundoP == HIGH){
digitalWrite(SUBE, LOW);
if (PulsPI== HIGH){
digitalWrite(BAJA, HIGH);
}
if (PulsPB == HIGH){
while ((PlantaB != HIGH) && (PuertaC == HIGH)){
if (PulsEMER != HIGH){
digitalWrite(BAJA, HIGH);
PlantaB=digitalRead(FPB);
PuertaC=digitalRead(FPC);
PulsEMER =digitalRead(EMER);
}else{
return;}
}
}else{
//digitalWrite(LedAmarillo, LOW);
}
}
if (PlantaB == HIGH ){
// digitalWrite(LedAzul, HIGH);
digitalWrite(BAJA, LOW);
if (PulsPII == HIGH){
while ((SegundoP != HIGH) && (PuertaC == HIGH)){
if (PulsEMER != HIGH){
digitalWrite(SUBE, HIGH);
SegundoP=digitalRead(FIIP);
PuertaC=digitalRead(FPC);
PulsEMER =digitalRead(EMER);
}else{
return;}
}
}
if (PulsPI == HIGH){
digitalWrite(SUBE,HIGH);
}
}
}else{
digitalWrite(SUBE, LOW);
digitalWrite(BAJA, LOW);
sirena();
}
}
void Clima(){
int AnalogTemp = analogRead(TEMP);
float milliVolt = AnalogTemp * (ADC_VREF_mV / ADC_RESOLUTION);
float celsius = milliVolt / 10;
if (celsius > 23){
digitalWrite(AIRE, HIGH);
}
if (celsius < 21){
digitalWrite(AIRE, LOW);
}
}
void sirena() {
// Variables para el control del tiempo
unsigned long tiempoAnterior = 0; // Almacena el tiempo anterior
unsigned long duracionTono = 10; // Duración de los tonos en milisegundo
for (int l = 0; l <= 4; l++) {
tone(BOCI, 200); // Genera un tono de 200 Hz en el pin de BOCI
while (millis() - tiempoAnterior < 100) {
// Espera durante 100 milisegundos
}
tiempoAnterior = millis(); // Actualiza el tiempo anterior
noTone(BOCI); // Genera un silencio en el pin de BOCI
while (millis() - tiempoAnterior < 300) {
// Espera durante 300 milisegundos
}
tiempoAnterior = millis(); // Actualiza el tiempo anterior
// Agrega un tiempo de espera entre tonos
while (millis() - tiempoAnterior < 100) {
// Espera durante 100 milisegundos
}
tiempoAnterior = millis(); // Actualiza el tiempo anterior
}
}
void sirenaEmer() {
// Variables para el control del tiempo
unsigned long tiempoAnterior = 0; // Almacena el tiempo anterior
unsigned long duracionTono = 10; // Duración de los tonos en milisegundo
for (int l = 0; l <= 4; l++) {
tone(BOCI, 1200); // Genera un tono de 1200 Hz en el pin de BOCI
while (millis() - tiempoAnterior < 100) {
// Espera durante 100 milisegundos
}
tiempoAnterior = millis(); // Actualiza el tiempo anterior
tone(BOCI, 1500); // Genera un tono de 1500 Hz en el pin de BOCI
while (millis() - tiempoAnterior < 900) {
// Espera durante 900 milisegundos
}
tiempoAnterior = millis(); // Actualiza el tiempo anterior
// Agrega un tiempo de espera entre tonos
while (millis() - tiempoAnterior < 100) {
// Espera durante 100 milisegundos
}
tiempoAnterior = millis(); // Actualiza el tiempo anterior
}
}
void Luz(){
boolean alguien = digitalRead(LUZ);
if (alguien == HIGH){
digitalWrite(LIGHT, HIGH);
delay(50);
digitalWrite(LIGHT, LOW);
delay(50);
}else{
digitalWrite(LIGHT, LOW);
}
}