// 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>
CRGBPalette16 currentPalette;
TBlendType currentBlending;
int hue = 0;
#define LED_PIN 4 //LED Strip Signal Connection
#define BrakeSignal 2 //Brake Signal Connection
#define LeftSignal 1 //Left Blinker Signal Connection
#define RightSignal 0 //Right Blinker Signal Connection
#define ReverseSignal 5 //Reverse Signal Connection
//#define LED_PIN 6 // Pin yang digunakan untuk mengontrol LED strip
//#define NUM_LEDS 60 // Jumlah LED dalam strip Anda
#define BRIGHTNESS 64 // Tingkat kecerahan LED (sesuaikan sesuai kebutuhan)
#define COMET_SPEED 60 // Kecepatan pergerakan komet (sesuaikan sesuai kebutuhan)
#define NUM_LEDS 23 //Total no of LEDs in the LED strip
#define BlinkerLEDs 8 //No of LEDs for Left/Right Blinker
#define BlinkerREMs 8
int BlinkerSpeed = 30; //Turn Signal Running LED Speed. Adjust this to match with your vehicle turn signal speed.
int BlinkerOffDelay = 300; //Turn Signal Off time. Adjust this to match with your vehicle turn signal speed.
int BlinkerRem = 20;
int StartupSpeed = 5;
CRGB leds[NUM_LEDS];
void setup()
{
FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);
pinMode(BrakeSignal, INPUT);
pinMode(LeftSignal, INPUT);
pinMode(RightSignal, INPUT);
pinMode(ReverseSignal, INPUT);
for (int i = 0; i < (NUM_LEDS/2); i++)
{
leds[i] = CRGB(60, 0, 0);
leds[i-1] = CRGB(0, 0, 0);
leds[(NUM_LEDS-1)-i] = CRGB(60, 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::Red;
leds[(NUM_LEDS/2-1)+((NUM_LEDS/2)-j)] = CRGB::Red;
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(60, 0, 0);
}
FastLED.show();
delay (50);
}
}
void loop()
{
if((digitalRead(ReverseSignal)==1)&&(digitalRead(BrakeSignal)==0)) //Reverse Light
{
Reverse();
//LeftDim();
//RightDim();
//BrakeMiddle();
//DualBlinker();
//LeftDim();
//RightDim();
//delay (BlinkerOffDelay);
}
if(digitalRead(BrakeSignal)==1)//Brake Light
{
BrakeFull();
BrakeVar();
}
if(digitalRead(ReverseSignal)==0)
{
if((digitalRead(LeftSignal)==0)&&(digitalRead(RightSignal)==0)&&(digitalRead(BrakeSignal)==0)) //Park Light
{
ParkFull();
}
if((digitalRead(BrakeSignal)==1)&&(digitalRead(LeftSignal)==0)&&(digitalRead(RightSignal)==0)) //Brake Light
{
BrakeFull();
BrakeVar();
}
if((digitalRead(LeftSignal)==1)&&(digitalRead(RightSignal)==0)&&(digitalRead(BrakeSignal)==0)) //Left Blinker
{
LeftDim();
RightLit();
LeftBlinker();
LeftDim();
delay (BlinkerOffDelay);
}
if((digitalRead(RightSignal)==1)&&(digitalRead(LeftSignal)==0)&&(digitalRead(BrakeSignal)==0)) //Right Blinker
{
RightDim();
LeftLit();
RightBlinker();
RightDim();
delay (BlinkerOffDelay);
}
if((digitalRead(LeftSignal)==1)&&(digitalRead(RightSignal)==0)&&(digitalRead(BrakeSignal)==1)) //Left Blinker & Brake
{
LeftDim();
RightFull();
LeftBlinker();
LeftDim();
delay (BlinkerOffDelay);
}
if((digitalRead(RightSignal)==1)&&(digitalRead(LeftSignal)==0)&&(digitalRead(BrakeSignal)==1)) //Right Blinker & Brake
{
RightDim();
LeftFull();
RightBlinker();
RightDim();
delay (BlinkerOffDelay);
}
if((digitalRead(LeftSignal)==1)&&(digitalRead(RightSignal)==1)&&(digitalRead(BrakeSignal)==0)) //Dual Blinker / Hazard
{
LeftDim();
RightDim();
ParkMiddle();
DualBlinker();
LeftDim();
RightDim();
delay (BlinkerOffDelay);
}
if((digitalRead(LeftSignal)==1)&&(digitalRead(RightSignal)==1)&&(digitalRead(BrakeSignal)==1)) //Dual Blinker / Hazard + Brake
{
LeftDim();
RightDim();
BrakeMiddle();
DualBlinker();
LeftDim();
RightDim();
delay (BlinkerOffDelay);
}
}
}
void Reverse()
{
const byte fadeAmt = 128;
const int cometSize = 5;
const int deltaHue = 4;
static byte hue = HUE_RED;
static int iDirection = 1;
static int iPos = 0;
hue += deltahue;
iPos += iDeirection;
}
void BrakeFull()
{
for (int i = 0; i <NUM_LEDS; i++)
{
leds[i] = CRGB::Red;
}
FastLED.show();
}
void BrakeVar()
{
for (int i = 0; i < ((NUM_LEDS/2)-2); i++)
{
leds[i] = CRGB::Red;
leds[i-2] = CRGB(60, 0, 0);
leds[(NUM_LEDS-1)-i] = CRGB::Red;
leds[(NUM_LEDS)-i] = CRGB(60, 0, 0);
FastLED.show();
delay (40);
}
for (int j = ((NUM_LEDS/2)-1); j >= 0; j--)
{
leds[j] = CRGB::Red;
leds[(NUM_LEDS/2-1)+((NUM_LEDS/2)-j)] = CRGB::Red;
FastLED.show();
delay (40);
}
/*
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::Red;
}
FastLED.show();
delay (50);
}
for (int j = ((NUM_LEDS/2)-5); j >= 0; j--)
{
leds[j] = CRGB::Black;
leds[(NUM_LEDS/2)+((NUM_LEDS/2)-j)] = CRGB::Black;
FastLED.show();
delay (20);
}
for (int j = (NUM_LEDS/2); j >= 0; j--)
{
leds[j] = CRGB(255, 0, 0);
leds[(NUM_LEDS/2)+((NUM_LEDS/2)-j)] = CRGB(255, 0, 0);
FastLED.show();
delay (20);
}
*/
}
void BrakeMiddle()
{
for (int i = BlinkerLEDs; i < (NUM_LEDS - BlinkerLEDs); i++)
{
leds[i] = CRGB(255, 0, 0);
}
FastLED.show();
}
void ParkFull()
{
for (int i = 0; i < NUM_LEDS; i++)
{
leds[i] = CRGB(60, 0, 0);
}
FastLED.show();
}
void ParkMiddle()
{
for (int i = BlinkerLEDs; i < (NUM_LEDS - BlinkerLEDs); i++)
{
leds[i] = CRGB(60, 0, 0);
}
FastLED.show();
}
void LeftBlinker()
{
for (int i = (BlinkerLEDs-1); i >= 0; i--)
{
leds[i] = CRGB(255, 165, 0);
FastLED.show();
delay (BlinkerSpeed);
}
}
void LeftDim()
{
for (int i = 0; i < BlinkerLEDs; i++)
{
leds[i] = CRGB(0, 0, 0);
}
FastLED.show();
}
void LeftLit()
{
for (int i = 0; i < (NUM_LEDS - BlinkerLEDs); i++)
{
leds[i] = CRGB(75, 0, 0);
}
FastLED.show();
}
void LeftFull()
{
for (int i = 0; i < (NUM_LEDS - BlinkerLEDs); i++)
{
leds[i] = CRGB(255, 0, 0);
}
FastLED.show();
}
void RightBlinker()
{
for (int i = (NUM_LEDS - BlinkerLEDs); i < NUM_LEDS; i++)
{
leds[i] = CRGB(255, 165, 0);
FastLED.show();
delay (BlinkerSpeed);
}
}
void RightDim()
{
for (int i = (NUM_LEDS - BlinkerLEDs); i < NUM_LEDS; i++)
{
leds[i] = CRGB(0, 0, 0);
}
FastLED.show();
}
void RightLit()
{
for (int i = BlinkerLEDs; i < NUM_LEDS; i++)
{
leds[i] = CRGB(75, 0, 0);
}
FastLED.show();
}
void RightFull()
{
for (int i = BlinkerLEDs; i < NUM_LEDS; i++)
{
leds[i] = CRGB(255, 0, 0);
}
FastLED.show();
}
void DualBlinker()
{
for (int i = (BlinkerLEDs-1); i >= 0; i--)
{
leds[i] = CRGB(255, 165, 0);
leds[NUM_LEDS-1-i] = CRGB(255, 165, 0);
FastLED.show();
delay (BlinkerSpeed);
}
}