// HAZI TECH
// Program by Hasitha Jayasundara
// Subscribe to my YouTube Channel - http://www.youtube.com/c/HAZITECH?sub_confirmation=1
#include "Arduino.h"
#include <FastLED.h>
#define LED_PIN 2 //LED Strip Signal Connection
#define LED_PIN1 3 //LED Strip Signal Connection
#define LED_PIN2 4 //LED Strip Signal Connection
//#define LED_PIN1 3 //LED Strip Signal Connection
#define HazardSignal A3 //Brake Signal Connection
#define LeftSignal A4 //Left Blinker Signal Connection
#define RightSignal A5 //Right Blinker Signal Connection
#define NUM_LEDS 10 //Total no of LEDs in the LED strip
#define NUM_LEDS1 1 //Total no of LEDs in the LED strip
#define NUM_LEDS2 1
//#define NUM_LEDS1 16 //Total no of LEDs in the LED strip
#define BlinkerLEDs 4 //LEDs for Left/Right Blinker
#define BlinkerLEDs1 4 //LEDs for Left/Right Blinker
#define BlinkerLEDs2 3
int BlinkerSpeed = 60; //Blinker Running LED Speed. Adjust this to match with your Bike blinker speed.
int BlinkerOffDelay = 300; //Blinker Off time. Adjust this to match with your Bike blinker speed.
CRGB leds[NUM_LEDS];
CRGB leds1[NUM_LEDS1];
CRGB leds2[NUM_LEDS2];
//CRGB leds1[NUM_LEDS1];
void setup()
{
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
FastLED.addLeds<WS2812, LED_PIN1, GRB>(leds1, NUM_LEDS1);
FastLED.addLeds<WS2812, LED_PIN2, GRB>(leds2, NUM_LEDS2);
pinMode(HazardSignal, INPUT);
pinMode(LeftSignal, INPUT);
pinMode(RightSignal, INPUT);
for (int i = 0; i < (NUM_LEDS/2); i++)
{
leds[i] = CRGB(255, 0, 0);
leds[i-1] = CRGB(0, 0, 0);
leds[(NUM_LEDS-1)-i] = CRGB(255, 0, 0);
leds[(NUM_LEDS)-i] = CRGB(0, 0, 0);
FastLED.show();
delay (BlinkerSpeed);
}
for (int j = ((NUM_LEDS/2)-1); j >= 0; j--)
{
leds[j] = CRGB(255, 0, 0);
leds[(NUM_LEDS/2-1)+((NUM_LEDS/2)-j)] = CRGB(255, 0, 0);
FastLED.show();
delay (BlinkerSpeed);
}
for (int i = 0; i < 5; i++)
{
for (int i = 0; i < NUM_LEDS; i++)
{
leds[i] = CRGB(0, 0, 0);
}
FastLED.show();
delay (75);
for (int i = 0; i < NUM_LEDS; i++)
{
leds[i] = CRGB(255, 0, 0);
}
FastLED.show();
delay (50);
}
}
//-----------------
void loop()
{
if((digitalRead(LeftSignal)==0)&&(digitalRead(RightSignal)==0)&&(digitalRead(HazardSignal)==0)) //Park Light
{
ParkFull();
}
if((digitalRead(LeftSignal)==1)&&(digitalRead(RightSignal)==0)&&(digitalRead(HazardSignal)==0)) //Left Blinker
{
LeftDim();
RightLit();
LeftBlinker();
LeftDim();
delay (BlinkerOffDelay);
}
if((digitalRead(RightSignal)==1)&&(digitalRead(LeftSignal)==0)&&(digitalRead(HazardSignal)==0)) //Right Blinker
{
RightDim();
LeftLit();
RightBlinker();
RightDim();
delay (BlinkerOffDelay);
}
if((digitalRead(LeftSignal)==1)&&(digitalRead(RightSignal)==0)&&(digitalRead(HazardSignal)==1)) //Left Blinker & H
{
LeftDim();
RightFull();
LeftBlinker();
LeftDim();
delay (BlinkerOffDelay);
}
if((digitalRead(RightSignal)==1)&&(digitalRead(LeftSignal)==0)&&(digitalRead(HazardSignal)==1)) //Right Blinker & H
{
RightDim();
LeftFull();
RightBlinker();
RightDim();
delay (BlinkerOffDelay);
}
if((digitalRead(LeftSignal)==0)&&(digitalRead(RightSignal)==0)&&(digitalRead(HazardSignal)==1)) //Dual Blinker / Hazard
{
LeftDim2();
RightDim2();
ParkMiddle();
DualBlinker();
LeftDim2();
RightDim2();
delay (BlinkerOffDelay);
}
}
void ParkFull()
{
for (int i = 0; i < 5; i++)
{
for (int i = 0; i < NUM_LEDS; i++)
{
leds[i] = CRGB(64, 0, 0);
}
FastLED.show();
delay (100);
for (int i = 0; i < NUM_LEDS; i++)
{
leds[i] = CRGB(255, 0, 0);
}
FastLED.show();
delay (200);
}
}
void ParkMiddle()
{
for (int i = BlinkerLEDs2; i < (NUM_LEDS - BlinkerLEDs2); i++)
{
leds[i] = CRGB(255, 0, 0);
}
FastLED.show();
}
void RightBlinker()
{
for (int i = (BlinkerLEDs-1); i >= 0; i--)
{
leds[i] = CRGB(255, 165, 0);
leds2[0] = CRGB(255, 165, 0);
FastLED.show();
delay (BlinkerSpeed);
}
}
void RightDim()
{
for (int i = 0; i < BlinkerLEDs; i++)
{
leds[i] = CRGB(0, 0, 0);
leds2[0] = CRGB(0, 0, 0);
}
FastLED.show();
}
void RightDim2()
{
for (int i = 0; i < BlinkerLEDs2; i++)
{
leds[i] = CRGB(0, 0, 0);
leds2[0] = CRGB(0, 0, 0);
}
FastLED.show();
}
void RightLit()
{
for (int i = 0; i < (NUM_LEDS - BlinkerLEDs); i++)
{
leds[i] = CRGB(255, 0, 0);
}
FastLED.show();
}
void RightFull()
{
for (int i = 0; i < (NUM_LEDS - BlinkerLEDs); i++)
{
leds[i] = CRGB(255, 0, 0);
}
FastLED.show();
}
void LeftBlinker()
{
for (int i = (NUM_LEDS - BlinkerLEDs); i < NUM_LEDS; i++)
{
leds[i] = CRGB(255, 165, 0);
leds1[0] = CRGB(255, 165, 0);
FastLED.show();
delay (BlinkerSpeed);
}
}
void LeftDim()
{
for (int i = (NUM_LEDS - BlinkerLEDs); i < NUM_LEDS; i++)
{
leds[i] = CRGB(0, 0, 0);
leds1[0] = CRGB(0, 0, 0);
}
FastLED.show();
}
void LeftDim2()
{
for (int i = (NUM_LEDS - BlinkerLEDs2); i < NUM_LEDS; i++)
{
leds[i] = CRGB(0, 0, 0);
leds1[0] = CRGB(0, 0, 0);
}
FastLED.show();
}
void LeftLit()
{
for (int i = BlinkerLEDs; i < NUM_LEDS; i++)
{
leds[i] = CRGB(255, 0, 0);
}
FastLED.show();
}
void LeftFull()
{
for (int i = BlinkerLEDs; i < NUM_LEDS; i++)
{
leds[i] = CRGB(255, 0, 0);
}
FastLED.show();
}
void DualBlinker()
{
for (int i = (BlinkerLEDs2-1); i >= 0; i--)
{
leds[i] = CRGB(255, 165, 0);
leds[NUM_LEDS-1-i] = CRGB(255, 165, 0);
leds1[0] = CRGB(255, 165, 0);
leds2[0] = CRGB(255, 165, 0);
FastLED.show();
delay (BlinkerSpeed);
}
}
//..................................