#include <ESP32Servo.h>
#include <ABLocks_TimerFreeTone.h>
#include <FastLED.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
double A;
double N;
double R;
double V;
double I;
double J;
Servo servo_15;
CRGB neopixelFL_leds[64];
Adafruit_SSD1306 oled_1(128,64, &Wire,-1);
bool oled_1_autoshow=true;
String rtt_melody_1=":d=4,o=5,b=250:e,8p,8f,8g,8p,1c6,8p.,d,8p,8e,1f";
String rtt_melody_7=":d=16,o=6,b=95:g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#";
void ROJO() {
TimerFreeToneRtttl(12,(const char *)rtt_melody_1.c_str());
R = 0;
for (int count = 0; count < 64; count++) {
neopixelFL_leds[(int)(R)].r = 204;
neopixelFL_leds[(int)(R)].g = 0;
neopixelFL_leds[(int)(R)].b = 0;
R=R+(1);
FastLED.show();
}
}
void AMARILLO() {
A = 0;
for (int count = 0; count < 64; count++) {
neopixelFL_leds[(int)(A)].r = 255;
neopixelFL_leds[(int)(A)].g = 255;
neopixelFL_leds[(int)(A)].b = 0;
A=A+(1);
FastLED.show();
}
}
void VERDE() {
TimerFreeToneRtttl(26,(const char *)rtt_melody_7.c_str());
V = 0;
for (int count = 0; count < 64; count++) {
neopixelFL_leds[(int)(V)].r = 0;
neopixelFL_leds[(int)(V)].g = 153;
neopixelFL_leds[(int)(V)].b = 0;
V=V+(1);
FastLED.show();
}
}
void NEGRO() {
N = 0;
for (int count = 0; count < 64; count++) {
neopixelFL_leds[(int)(N)].r = 0;
neopixelFL_leds[(int)(N)].g = 0;
neopixelFL_leds[(int)(N)].b = 0;
N=N+(1);
FastLED.show();
}
TimerFreeTone(14,523.26,1500);
TimerFreeTone(12,659.26,1000);
TimerFreeTone(26,783.99,500);
}
void setup()
{
pinMode(4, INPUT);
pinMode(25, OUTPUT);
pinMode(32, OUTPUT);
pinMode(33, OUTPUT);
servo_15.attach(15);
pinMode(26, OUTPUT);
pinMode(12, OUTPUT);
pinMode(14, OUTPUT);
FastLED.addLeds<WS2812B, 13,GRB>(neopixelFL_leds,64);
oled_1.begin(SSD1306_SWITCHCAPVCC,0x3C);
oled_1.clearDisplay();
if(oled_1_autoshow)oled_1.display();
oled_1.setTextSize(1);
oled_1.setTextColor(WHITE);
oled_1.setCursor(0,0);
oled_1.print(String("Semáforo Peatonal"));
if(oled_1_autoshow)oled_1.display();
oled_1.setTextSize(1);
oled_1.setTextColor(WHITE);
oled_1.setCursor(0,30);
oled_1.print(String("con alarma"));
if(oled_1_autoshow)oled_1.display();
oled_1.display();
I = 3;
J = I;
}
void loop()
{
yield();
while(!((!digitalRead(4))));
delay(2000);
oled_1.clearDisplay();
if(oled_1_autoshow)oled_1.display();
oled_1.setTextSize(1);
oled_1.setTextColor(WHITE);
oled_1.setCursor(0,0);
oled_1.print(String("TIENE 10 SEGUNDOS"));
if(oled_1_autoshow)oled_1.display();
oled_1.setTextSize(1);
oled_1.setTextColor(WHITE);
oled_1.setCursor(0,30);
oled_1.print(String("PARA PASAR"));
if(oled_1_autoshow)oled_1.display();
oled_1.display();
digitalWrite(25, LOW);
digitalWrite(32, HIGH);
digitalWrite(33, LOW);
servo_15.write(90);
delay(100);
VERDE();
delay(7000);
for (int count = 0; count < I; count++) {
oled_1.clearDisplay();
if(oled_1_autoshow)oled_1.display();
oled_1.setTextSize(1);
oled_1.setTextColor(WHITE);
oled_1.setCursor(0,0);
oled_1.print(String("LE QUEDAN"));
if(oled_1_autoshow)oled_1.display();
oled_1.setTextSize(1);
oled_1.setTextColor(WHITE);
oled_1.setCursor(0,30);
oled_1.print(J);
if(oled_1_autoshow)oled_1.display();
oled_1.setTextSize(1);
oled_1.setTextColor(WHITE);
oled_1.setCursor(0,50);
oled_1.print(String("SEGUNDOS PARA PASAR"));
if(oled_1_autoshow)oled_1.display();
oled_1.display();
AMARILLO();
digitalWrite(25, LOW);
digitalWrite(32, LOW);
digitalWrite(33, HIGH);
TimerFreeTone(26,1000,500);
digitalWrite(25, LOW);
digitalWrite(32, LOW);
digitalWrite(33, LOW);
TimerFreeTone(26,500,500);
J = (J - 1);
}
digitalWrite(25, HIGH);
digitalWrite(32, LOW);
digitalWrite(33, LOW);
servo_15.write(0);
delay(100);
oled_1.clearDisplay();
if(oled_1_autoshow)oled_1.display();
oled_1.setTextSize(3);
oled_1.setTextColor(WHITE);
oled_1.setCursor(0,0);
oled_1.print(String("PARAR"));
if(oled_1_autoshow)oled_1.display();
oled_1.display();
ROJO();
delay(5000);
NEGRO();
J = I;
}