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;
unsigned long tiempoAnterior = 0;
int QPPB;
int QPPP;
int QPSP;
float Celsius;
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);
if (millis()-tiempoAnterior>=2000){
tiempoAnterior=millis();
//Serial.print(temProm);
Serial.print(Celsius);
Serial.print(",");
Serial.print(QPPB);
Serial.print(",");
Serial.print(QPPP/2);
Serial.print(",");
Serial.print(QPSP);
Serial.println("\n");
}
Luz();
Clima();
if (PulsEMER == HIGH){
digitalWrite(SUBE, LOW);
digitalWrite(BAJA, LOW);
sirenaEmer();
delay(5000);
digitalWrite(BAJA, HIGH);
}
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
QPPB++;
retardo();
while ((PlantaB != HIGH) && (PuertaC == HIGH)){//condiciones para la marcha
Luz();
Clima();
if (PulsEMER != HIGH){
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){
QPSP++;
while ((SegundoP != HIGH)&& (PuertaC == HIGH)){
Luz();
Clima();
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){
QPPP++;
retardo();
digitalWrite(BAJA, HIGH);
}
if (PulsPB == HIGH){
QPPB++;
retardo();
while ((PlantaB != HIGH) && (PuertaC == HIGH)){
Luz();
Clima();
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){
QPSP++;
retardo();
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){
QPPP++;
retardo();
digitalWrite(SUBE,HIGH);
}
}
}else{
digitalWrite(SUBE, LOW);
digitalWrite(BAJA, LOW);
sirena();
}
}
void Clima(){
float AnCelsius;
AnCelsius = analogRead(TEMP);
Celsius = (5.0 *AnCelsius * 100.0)/1024.0 ;
if (Celsius > 25){
digitalWrite(AIRE, HIGH);
}
if (Celsius <22){
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, 600); // Genera un tono de 1200 Hz en el pin de BOCI
while (millis() - tiempoAnterior < 200) {
// Espera durante 100 milisegundos
}
tiempoAnterior = millis(); // Actualiza el tiempo anterior
tone(BOCI, 1000); // Genera un tono de 1500 Hz en el pin de BOCI
while (millis() - tiempoAnterior < 400) {
// Espera durante 900 milisegundos
}
tiempoAnterior = millis(); // Actualiza el tiempo anterior
// Agrega un tiempo de espera entre tonos
while (millis() - tiempoAnterior < 300) {
// Espera durante 900 milisegundos
}
tiempoAnterior = millis(); // Actualiza el tiempo anterior
}
}
void Luz(){
boolean alguien = digitalRead(LUZ);
unsigned long tiempoAnterior = 0; // Almacena el tiempo anterior
if (alguien == HIGH){
digitalWrite(LIGHT, HIGH);
while (millis()-tiempoAnterior<10000)
digitalWrite(LIGHT, LOW);
tiempoAnterior=millis();
}else{
digitalWrite(LIGHT, LOW);
}
}
void retardo(){
while(millis()-tiempoAnterior <200){
}
tiempoAnterior= millis();
}