//Secuencia de semáforos
//cuando se conecta la placa comienza la secuencia
// y
//encendido de las luces a control remoto
// cuando le doy al botón 0 se enciende una luz o se apaga.
//si esta encendida la luz del parque o las de la cafetería, o le doy a sus correspondientes teclas o le doy a el power y se apagan
#include <IRremote.h>
#define Boton_power 0x5DA2FF00
#define Boton_0 0x9768FF00
#define Boton_1 0xCF30FF00
#define Boton_2 0xE718FF00
#define Boton_EQ 0xFD02FF00
const byte SENSOR = 8;
const byte LED_EXTERIOR_CAFETERIA = 5;
const byte LED_FAROLAS = 6;
const byte LED_LUZ_PARQUE = 7;
const byte LED_CASA = 4;
const byte LED_ROJO_SEMAFORO1 = 12;
const byte LED_VERDE_SEMAFORO1 = 10;
const byte LED_AMARILLO_SEMAFORO1 = 11;
const byte LED_ROJO_SEMAFORO2 = A2;
const byte LED_VERDE_SEMAFORO2 = A0;
const byte LED_AMARILLO_SEMAFORO2 = A1;
const unsigned long DELAY_SOLAP = 2000; // tiempo rojo + amarillo
const unsigned long DELAY_VERDE = 40000; // tiempo verde
const unsigned long DELAY_AMARILLO = 3000; // tiempo amarillo
const unsigned long DELAY_ROJO = DELAY_VERDE + DELAY_AMARILLO + DELAY_SOLAP; // tiempo rojo
const unsigned long T1 = DELAY_SOLAP;
const unsigned long T2 = T1 + DELAY_VERDE;
const unsigned long T3 = DELAY_ROJO;
const unsigned long T4 = T3 + T1;
const unsigned long T5 = T3 + T2;
const unsigned long T6 = T3 + T3;
const unsigned long EQKEY_EXP = 5000; // tiempo espera de 2da tecla
unsigned long oldTime;
unsigned long oldEqTime;
bool eqPressed = false;
IRrecv irrecv (SENSOR);
decode_results codigo;
void luz_x() {
digitalWrite(LED_VERDE_SEMAFORO1, 0);
digitalWrite(LED_AMARILLO_SEMAFORO1, 1);
digitalWrite(LED_ROJO_SEMAFORO1, 1);
digitalWrite(LED_VERDE_SEMAFORO2, 0);
digitalWrite(LED_AMARILLO_SEMAFORO2, 0);
digitalWrite(LED_ROJO_SEMAFORO2, 1);
oldTime = millis();
}
void semaforos() {
// --- Secuencia semáforos ---
if (millis() - oldTime >= T6) { // cambia 1 a verde
luz_x();
}
else if (millis() - oldTime >= T5) { // cambia 2 a amarillo
digitalWrite(LED_VERDE_SEMAFORO1, 0);
digitalWrite(LED_AMARILLO_SEMAFORO1, 0);
digitalWrite(LED_ROJO_SEMAFORO1, 1);
digitalWrite(LED_VERDE_SEMAFORO2, 0);
digitalWrite(LED_ROJO_SEMAFORO2, 0);
digitalWrite(LED_AMARILLO_SEMAFORO2, 1);
}
else if (millis() - oldTime >= T4) { // cambia 1 a rojo
digitalWrite(LED_AMARILLO_SEMAFORO1, 0);
digitalWrite(LED_VERDE_SEMAFORO1, 0);
digitalWrite(LED_ROJO_SEMAFORO1, 1);
digitalWrite(LED_AMARILLO_SEMAFORO2, 0);
digitalWrite(LED_ROJO_SEMAFORO2, 0);
digitalWrite(LED_VERDE_SEMAFORO2, 1);
}
else if (millis() - oldTime >= T3) { // cambia 1 a amarillo
digitalWrite(LED_VERDE_SEMAFORO1, 0);
digitalWrite(LED_AMARILLO_SEMAFORO1, 0);
digitalWrite(LED_ROJO_SEMAFORO1, 1);
digitalWrite(LED_VERDE_SEMAFORO2, 0);
digitalWrite(LED_AMARILLO_SEMAFORO2, 1);
digitalWrite(LED_ROJO_SEMAFORO2, 1);
}
else if (millis() - oldTime >= T2) { // cambia 1 a amarillo
digitalWrite(LED_VERDE_SEMAFORO1, 0);
digitalWrite(LED_ROJO_SEMAFORO1, 0);
digitalWrite(LED_AMARILLO_SEMAFORO1, 1);
digitalWrite(LED_VERDE_SEMAFORO2, 0);
digitalWrite(LED_AMARILLO_SEMAFORO2, 0);
digitalWrite(LED_ROJO_SEMAFORO2, 1);
}
else if (millis() - oldTime >= T1) { // cambia 1 a amarillo
digitalWrite(LED_AMARILLO_SEMAFORO1, 0);
digitalWrite(LED_ROJO_SEMAFORO1, 0);
digitalWrite(LED_VERDE_SEMAFORO1, 1);
digitalWrite(LED_VERDE_SEMAFORO2, 0);
digitalWrite(LED_AMARILLO_SEMAFORO2, 0);
digitalWrite(LED_ROJO_SEMAFORO2, 1);
}
// --- Fin secuencia semáforos ---
}
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(LED_ROJO_SEMAFORO1, OUTPUT);
pinMode(LED_VERDE_SEMAFORO1, OUTPUT);
pinMode(LED_AMARILLO_SEMAFORO1, OUTPUT);
pinMode(LED_ROJO_SEMAFORO2, OUTPUT);
pinMode(LED_VERDE_SEMAFORO2, OUTPUT);
pinMode(LED_AMARILLO_SEMAFORO2, OUTPUT);
pinMode(LED_CASA, OUTPUT);
pinMode(LED_EXTERIOR_CAFETERIA, OUTPUT);
pinMode(LED_FAROLAS, OUTPUT);
pinMode(LED_LUZ_PARQUE, OUTPUT);
pinMode(13, OUTPUT);
// --- Inicia con semáforo verde ---
luz_x();
}
void loop(){
semaforos();
if (irrecv.decode()) {
Serial.println(irrecv.decodedIRData.decodedRawData, HEX);
if (irrecv.decodedIRData.decodedRawData == Boton_EQ) {
eqPressed = true;
digitalWrite(13,eqPressed);
oldEqTime = millis();
}
else {
if (eqPressed) {
eqPressed = false;
digitalWrite(13,eqPressed);
switch (irrecv.decodedIRData.decodedRawData) {
case Boton_0:
// tarea alternativa
digitalWrite(LED_CASA, !digitalRead(LED_CASA));
break;
case Boton_1:
// tarea alternativa
break;
case Boton_2:
// tarea alternativa
break;
case Boton_power:
//digitalWrite(LED_CASA,LOW);
break;
default:
//eqPressed = true;
break;
}
}
else {
switch (irrecv.decodedIRData.decodedRawData) {
case Boton_0:
digitalWrite(LED_EXTERIOR_CAFETERIA, !digitalRead(LED_EXTERIOR_CAFETERIA));
break;
case Boton_1:
digitalWrite(LED_FAROLAS, !digitalRead(LED_FAROLAS));
break;
case Boton_2:
digitalWrite(LED_LUZ_PARQUE, !digitalRead(LED_LUZ_PARQUE));
break;
case Boton_power:
digitalWrite(LED_EXTERIOR_CAFETERIA,LOW);
digitalWrite(LED_FAROLAS,LOW);
digitalWrite(LED_LUZ_PARQUE,LOW);
digitalWrite(LED_CASA,LOW);
break;
}
}
}
irrecv.resume();
}
if (eqPressed && (millis() - oldEqTime >= EQKEY_EXP)) {
eqPressed = false; // expiró tiempo espera 2da tecla
digitalWrite(13,eqPressed);
}
//delay (100);
}