#include <RTClib.h>
#include <Wire.h>
#define on HIGH
#define off LOW
RTC_DS3231 rtc;
// tV1 : tiempo verde 1 tv2 : tiempo verde 2
// TARV : tiempo de amarillo de rojo a verde TAVR : tiempo de amarillo de verde a rojo
// tRR : tiempo de rojo y rojo TD : tiempo de destello
// CDA : cantidad de destello amarillo CDV : cantidad de destello verde
// hDAIx : hora de destello amarillo inferrior mDAIx : minuto de destello amarillo inferior
// hDASx : hora de destello amarillo superior mDASx : minuto de destello amarillo superior
// RETARDO : retardo de la sincronizacion
const int tV1A = 10000; const int tV1B = 10000; const int tV1 = 16000;
const int tV2A = 10000; const int tV2B = 10000; const int tV2 = 16000;
const int tARV = 1000; const int tAVR = 4000; const int tRR = 1000; const int tD = 500;
const int CDA = 2; const int CDV = 3;
const float hDAIx = 0; const float mDAIx = 1; const float hDASx = 6; const float mDASx = 0;
const int RETARDO = 5000;
int ciclo = (tV1A + tV1B + tV1 + tV2A + tV2B + tV2 + (2*CDV) + (2*tAVR) + (2*tARV) + (2*tRR));
int x = (86400/ciclo); int Verde[960];
for(i=0;i<960;i++)
{
Verde[i]= ((i*ciclo) + 1 + RETARDO);
}
int tV1x = (tV1/1000); int tV2x = (tV2/1000);
float hDAI = (hDAIx + (mDAIx/100));
float hDAS = (hDASx + (mDASx/100)); int RETx = RETARDO/1000;
int AM1 = 6; int AM2 = 3; int R1 = 7; int V1 = 5; int R2 = 4; int V2 = 2; int b=0; int d=0; int hora; int minu; int tiempo;
void setup ()
{
pinMode(AM1, OUTPUT); pinMode(R1, OUTPUT); pinMode(V1, OUTPUT);
pinMode(AM2, OUTPUT); pinMode(R2, OUTPUT); pinMode(V2, OUTPUT);
Wire.begin();
rtc.begin();
//rtc.adjust(DateTime((__DATE__),(__TIME__)));
Serial.begin(9600);
if (! rtc.begin())
{
Serial.println("Modulo RTC no encontrado !");
while (1);
}
}
void loop()
{
DateTime fecha = rtc.now();
Serial.print("Hora: "); Serial.print(fecha.hour()); Serial.print(":");
Serial.println(fecha.minute());
float A = fecha.hour(); float B = fecha.minute();
float D = fecha.second();
float C = (A + (B/100));
int ts = (1+D+(B*60)+(A*3600));
Serial.println(ts);
if ((C>=hDAI) & (C<hDAS))
{
destello(); d=0;
}
else
{ if (b==0)
{
destello(); b=1;
}
if (d==0)
{
destello2(); rojo();
}
normal();
}
}
void rojo()
{
digitalWrite(R1, on); digitalWrite(R2, on); digitalWrite(AM1, off); digitalWrite(AM2, off); digitalWrite(V1, off); digitalWrite(V2,off);
delay(2000); d=1;
}
void destello()
{
for (int i=0;i<CDA;i++)
{
digitalWrite(R1, off); digitalWrite(V1, off); digitalWrite(R2, off); digitalWrite(V2, off);
digitalWrite(AM1, on);
digitalWrite(AM2, on); delay(tD); digitalWrite(AM1, off); digitalWrite(AM2, off);
delay(tD);
}
}
void destello2()
{
for (int i=0;i<RETx;i++)
{
digitalWrite(R1, off); digitalWrite(V1, off);
digitalWrite(R2, off); digitalWrite(V2, off);
digitalWrite(AM1, on); digitalWrite(AM2, on);
delay(tD);
digitalWrite(AM1, off); digitalWrite(AM2, off);
delay(tD);
}
}
void normal()
{
digitalWrite(R1, on); digitalWrite(AM1, off); digitalWrite(V1, off);
digitalWrite(R2, on); digitalWrite(AM2, on); digitalWrite(V2, off);
delay(tARV);
digitalWrite(R1, on); digitalWrite(AM1, off); digitalWrite(V1, off);
digitalWrite(R2, off); digitalWrite(AM2, off); digitalWrite(V2, on);
delay(tV2A); delay(tV2B); delay(tV2);
for (int j=0;j<CDV;j++)
{
digitalWrite(V2, off); delay(tD); digitalWrite(V2, on); delay(tD);
}
digitalWrite(R1, on); digitalWrite(AM1, off); digitalWrite(V1, off);
digitalWrite(R2, off); digitalWrite(AM2, on); digitalWrite(V2, off);
delay(tAVR);
digitalWrite(R1, on); digitalWrite(AM1, off); digitalWrite(V1, off);
digitalWrite(R2, on); digitalWrite(AM2, off); digitalWrite(V2, off);
delay(tRR);
digitalWrite(R1, on); digitalWrite(AM1, on); digitalWrite(V1, off);
digitalWrite(R2, on); digitalWrite(AM2, off); digitalWrite(V2, off);
delay(tARV);
digitalWrite(R1, off); digitalWrite(AM1, off); digitalWrite(V1, on);
digitalWrite(R2, on); digitalWrite(AM2, off); digitalWrite(V2, off);
delay(tV1A); delay(tV1B); delay(tV1);
for (int j=0;j<CDV;j++)
{
digitalWrite(V1, off); delay(tD); digitalWrite(V1, on); delay(tD);
}
digitalWrite(R1, off); digitalWrite(AM1, on); digitalWrite(V1, off);
digitalWrite(R2, on); digitalWrite(AM2, off); digitalWrite(V2, off);
delay(tAVR);
digitalWrite(R1, on); digitalWrite(AM1, off); digitalWrite(V1, off);
digitalWrite(R2, on); digitalWrite(AM2, off); digitalWrite(V2, off);
delay(tRR);
}