// kanjeng
// Program by baidy
#include "Arduino.h"
#include <FastLED.h>
#define NUM_STRIPS 2 // jumlah strip led kanan+kiri
#define DRLSignal 7 //DRL Switch
#define LeftSignal 5 //pin strip kiri
#define RightSignal 3 //pin strip kanan
const int RELAY_PIN = 8; //relay pin kanan
const int RELAY_PIN1 = 10; //relay pin kiri
const int RELAYDLY = 2; //relay pin delay
#define NUM_LEDS 43 //Total jumlah led
int BlinkerSpeed = 2; //Turn Signal Running LED Speed. Adjust this to match with your vehicle turn signal speed.
int BlinkerOffDelay = 330; //Turn Signal Off time. Adjust this to match with your vehicle turn signal speed.
int StartupSpeed = 15; //welcome2
int Delay = 250;
int Speed = 5; ///welcome1
int DRLDetect = 0;
CRGB leds[NUM_LEDS];
CRGB leds1[NUM_LEDS];
int r,r_dim,g,g_dim,b,b_dim;
void setup()
{
FastLED.addLeds<WS2812, 4, GRB>(leds, NUM_LEDS);
FastLED.addLeds<WS2812, 11, GRB>(leds1, NUM_LEDS);
pinMode(RELAY_PIN, OUTPUT); // set arduino pin to output mode kanan
pinMode(RELAY_PIN1, OUTPUT); // set arduino pin to output mode kiri
pinMode(RELAYDLY, OUTPUT);
pinMode(DRLSignal, INPUT);
pinMode(LeftSignal, INPUT);
pinMode(RightSignal, INPUT);
relaykanan(); ////////////////////////////////////////WELCOME
relaykiri();
MiddleOff();
Welcome();
LeftDim();
RightDim();
delay (Delay);
MiddleOff();
Welcome();
LeftDim();
RightDim();
delay (Delay);
MiddleOff();
Welcome1();
LeftDim();
RightDim();
delay (BlinkerOffDelay);
relay();
MiddleOff();
Welcome2();
LeftDim();
RightDim();
delay (BlinkerOffDelay);
relayoff(); /////////////////////////////WELCOME
fill_solid(leds, NUM_LEDS, CRGB::Black); // some led strips are all on at power on, so let's power them off at boot
fill_solid(leds1, NUM_LEDS, CRGB::Black); // some led strips are all on at power on, so let's power them off at boot
FastLED.show();
}
void loop()
{
if(DRLDetect == 0)
{
if(digitalRead(DRLSignal)==1)
{
DRLDetect = 1;
}
}
if(DRLDetect == 2)
{
if(digitalRead(DRLSignal)==0)
{
DRLDetect = 3;
}
}
if(DRLDetect == 1)
{
relaykanan();
relaykiri();
DRL_ON();
DRLDetect = 2;
}
if(DRLDetect == 3)
{
DRL_OFF();
DRLDetect = 0;
}
if(digitalRead(DRLSignal)==0)
{
if((digitalRead(LeftSignal)==1)&&(digitalRead(RightSignal)==0)) //Left Blinker
{
relaykiri();
RightOff();
LeftBlinker();
LeftDim();
delay (BlinkerOffDelay);
relayoff();
}
if((digitalRead(RightSignal)==1)&&(digitalRead(LeftSignal)==0)) //Right Blinker
{
relaykanan();
LeftOff();
RightBlinker();
RightDim();
delay (BlinkerOffDelay);
relayoff();
}
if((digitalRead(LeftSignal)==1)&&(digitalRead(RightSignal)==1)) //Dual Blinker / Hazard
{
relaykanan();
relaykiri();
MiddleOff();
DualBlinker();
LeftDim();
RightDim();
delay (BlinkerOffDelay);
}
}
if(DRLDetect == 2)
{
if((digitalRead(LeftSignal)==0)&&(digitalRead(RightSignal)==0)) //drl on modul
{
AllOff();
relayoff();
relay();
}
if((digitalRead(LeftSignal)==1)&&(digitalRead(RightSignal)==0)) //Left Blinker
{
relaykiri();
LeftDim();
RightLit();
LeftBlinker();
LeftDim();
delay (BlinkerOffDelay);
relayoff();
}
if((digitalRead(RightSignal)==1)&&(digitalRead(LeftSignal)==0)) //Right Blinker
{
relaykanan();
RightDim();
LeftLit();
RightBlinker();
RightDim();
delay (BlinkerOffDelay);
relayoff();
}
if((digitalRead(LeftSignal)==1)&&(digitalRead(RightSignal)==1)) //Dual Blinker / Hazard
{
relaykanan();
relaykiri();
LeftDim();
RightDim();
ParkMiddle();
DualBlinker();
LeftDim();
RightDim();
delay (BlinkerOffDelay);
}
}
}
void DRL_ON()
{
MiddleOff();
LeftDim();
RightDim();
delay (BlinkerOffDelay);
}
void DRL_OFF()
{
relayoff();
relaydlyoff();
}
void AllOff()
{
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds[i] = CRGB(0, 0, 0);
leds1[i] = CRGB(0, 0, 0);
}
FastLED.show();
}
void LeftOff()
{
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds1[i] = CRGB(0, 0, 0);
}
FastLED.show();
}
void RightOff()
{
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds[i] = CRGB(0, 0, 0);
}
FastLED.show();
}
void MiddleOff()
{
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds[i] = CRGB(0, 0, 0);
leds1[i] = CRGB(0, 0, 0);
}
FastLED.show();
}
void ParkFull() ///drl
{
for (int i = 0; i < NUM_LEDS; i++)
{
leds[i] = CRGB(r, g, b);
leds1[i] = CRGB(r, g, b);
}
FastLED.show();
}
void ParkMiddle()
{
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds[i] = CRGB(60, 0, 0);
leds1[i] = CRGB(60, 0, 0);
}
FastLED.show();
}
void LeftBlinker()
{
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds1[i] = CRGB(255, 65, 0);
FastLED.show();
delay (BlinkerSpeed);
}
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds1[i] = CRGB(0, 0, 0);
FastLED.show();
delay (BlinkerSpeed);
}
}
void LeftDim()
{
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds1[i] = CRGB(0, 0, 0);
}
FastLED.show();
}
void LeftLit()
{
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds1[i] = CRGB(r, g, b);
}
FastLED.show();
}
void LeftFull()
{
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds1[i] = CRGB(r, g, b);
}
FastLED.show();
}
void RightBlinker() ////////sein kanan
{
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds[i] = CRGB(255, 65, 0);
FastLED.show();
delay (BlinkerSpeed);
}
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds[i] = CRGB(0, 0, 0);
FastLED.show();
delay (BlinkerSpeed);
}
}
void RightDim()
{
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds[i] = CRGB(0, 0, 0);
}
FastLED.show();
}
void RightLit()
{
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds[i] = CRGB(r, g, b);
}
FastLED.show();
}
void RightFull()
{
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds[i] = CRGB(r, g, b);
}
FastLED.show();
}
void DualBlinker()
{
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds[i] = CRGB(255, 65, 0);
leds1[i] = CRGB(255, 65, 0);
FastLED.show();
delay (BlinkerSpeed);
}
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds[i] = CRGB(0, 0, 0);
leds1[i] = CRGB(0, 0, 0);
FastLED.show();
delay (BlinkerSpeed);
}
}
void Welcome()
{
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds[i] = CRGB(255, 65, 0);
leds1[i] = CRGB(255, 65, 0);
FastLED.show();
delay (Speed);
}
}
void Welcome1()
{
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds[i] = CRGB(0, 30, 30);
leds1[i] = CRGB(0, 30, 30);
leds[i+3] = CRGB::Black;
leds1[i+3] = CRGB::Black;
FastLED.show();
delay (StartupSpeed);
}
}
void Welcome2()
{
for (int i = 0;i<NUM_LEDS; i++)
{
leds[i] = CRGB(0, 30, 30);
leds1[i] = CRGB(0, 30, 30);
FastLED.show();
delay (StartupSpeed);
}
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds[i] = CRGB(0, 255, 255);
leds1[i] = CRGB(0, 255, 255);
FastLED.show();
delay (StartupSpeed);
}
for (int i = (NUM_LEDS-1); i >= 0; i--)
{
leds[i] = CRGB(0, 0, 0);
leds1[i] = CRGB(0, 0, 0);
FastLED.show();
delay (Speed);
}
}
void relaykanan()
{
{
digitalWrite(RELAY_PIN, HIGH); ////////sein kanan
delay(10);
}
}
void relaykiri()
{
{
digitalWrite(RELAY_PIN1, HIGH); ////////sein kanan
delay(10);
}
}
void relayoff()
{
{
digitalWrite(RELAY_PIN, LOW);
digitalWrite(RELAY_PIN1, LOW);
delay(1);
}
}
void relay()
{
{
digitalWrite(RELAYDLY , HIGH);
delay(1);
}
}
void relaydlyoff()
{
{
digitalWrite(RELAYDLY , LOW);
delay(1);
}
}