//----------WHITE & ORANGE - MIX -- WWO // DRL-SMD - LEDS -H_O - ANIMATIONS_WHITE LEDS - DRL PATTERNS -------------------//
//WHITE & ORANGE - MIX -- WWO - SA_PB//
#define WHITE_RIGHT_PIN 2 // Arduino pin controlling MOSFET for white right LEDs
#define WHITE_LEFT_PIN 10 // Arduino pin controlling MOSFET for white left LEDs
#define ORANGE_RIGHT_PIN 4 // Arduino pin controlling MOSFET for orange right LEDs
#define ORANGE_LEFT_PIN 5 // Arduino pin controlling MOSFET for orange left LEDs
#define LEFT_INDICATOR_PIN 6 // Example pin for left indicator input
#define RIGHT_INDICATOR_PIN 7 // Example pin for right indicator input
#define HAZARD_PIN 8 // Example pin for hazard light button
#define ANIMATION_BUTTON_PIN 9 // Example pin for animation change button
int currentPattern = 0;
const int numPatterns = 3; // Number of different patterns
bool hazardOn = false;
bool lastHazardState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
void setup() {
pinMode(LEFT_INDICATOR_PIN, INPUT); // Set left indicator pin as input
pinMode(RIGHT_INDICATOR_PIN, INPUT); // Set right indicator pin as input
pinMode(HAZARD_PIN, INPUT); // Set hazard light pin as input
pinMode(ANIMATION_BUTTON_PIN, INPUT); // Set animation button pin as input
pinMode(WHITE_RIGHT_PIN, OUTPUT);
pinMode(WHITE_LEFT_PIN, OUTPUT);
pinMode(ORANGE_RIGHT_PIN, OUTPUT);
pinMode(ORANGE_LEFT_PIN, OUTPUT);
// Turn off all LEDs initially
digitalWrite(WHITE_RIGHT_PIN, LOW);
digitalWrite(WHITE_LEFT_PIN, LOW);
digitalWrite(ORANGE_RIGHT_PIN, LOW);
digitalWrite(ORANGE_LEFT_PIN, LOW);
//Startup animation for white LEDs
startupWhiteAnimation();
// Set all white LEDs to on after the animation
digitalWrite(WHITE_RIGHT_PIN, HIGH);
digitalWrite(WHITE_LEFT_PIN, HIGH);
}
void loop() {
// Read the state of the left, right, and hazard indicators
int leftIndicatorState = digitalRead(LEFT_INDICATOR_PIN);
int rightIndicatorState = digitalRead(RIGHT_INDICATOR_PIN);
int hazardState = digitalRead(HAZARD_PIN);
int animationButtonState = digitalRead(ANIMATION_BUTTON_PIN);
if ((millis() - lastDebounceTime) > debounceDelay) {
if (hazardState != lastHazardState) {
lastHazardState = hazardState;
if (hazardState == HIGH) {
hazardOn = !hazardOn; // Toggle hazard state
}
lastDebounceTime = millis(); // Reset debounce timer
}
if (animationButtonState == HIGH) {
changePattern();
lastDebounceTime = millis(); // Reset debounce timer
}
}
if (hazardOn) {
// If the hazard is on, turn off white LEDs and flash both orange LEDs
digitalWrite(WHITE_RIGHT_PIN, LOW);
digitalWrite(WHITE_LEFT_PIN, LOW);
flashOrangeLEDs(HAZARD_PIN);
} else if (leftIndicatorState == HIGH) {
digitalWrite(WHITE_LEFT_PIN, LOW); // Turn off left white LED
digitalWrite(WHITE_RIGHT_PIN, HIGH); // Turn on right white LED
flashOrangeLEDs(LEFT_INDICATOR_PIN); // Flash left orange LEDs
} else if (rightIndicatorState == HIGH) {
digitalWrite(WHITE_RIGHT_PIN, LOW); // Turn off right white LED
digitalWrite(WHITE_LEFT_PIN, HIGH); // Turn on left white LED
flashOrangeLEDs(RIGHT_INDICATOR_PIN); // Flash right orange LEDs
} else {
// Execute the current light pattern for the white LEDs
runCurrentPattern();
}
}
// Function to flash orange LEDs based on the indicator side
void flashOrangeLEDs(int side) {
if (side == LEFT_INDICATOR_PIN) {
// Flash left orange LEDs
digitalWrite(ORANGE_LEFT_PIN, HIGH);
delay(500); // Adjust delay for desired flashing speed
digitalWrite(ORANGE_LEFT_PIN, LOW);
delay(500); // Adjust delay for desired flashing speed
} else if (side == RIGHT_INDICATOR_PIN) {
// Flash right orange LEDs
digitalWrite(ORANGE_RIGHT_PIN, HIGH);
delay(500); // Adjust delay for desired flashing speed
digitalWrite(ORANGE_RIGHT_PIN, LOW);
delay(500); // Adjust delay for desired flashing speed
} else if (side == HAZARD_PIN) {
// Flash both orange LEDs for hazard lights
digitalWrite(ORANGE_LEFT_PIN, HIGH);
digitalWrite(ORANGE_RIGHT_PIN, HIGH);
delay(500); // Adjust delay for desired flashing speed
digitalWrite(ORANGE_LEFT_PIN, LOW);
digitalWrite(ORANGE_RIGHT_PIN, LOW);
delay(500); // Adjust delay for desired flashing speed
}
}
// Function to change the current pattern
void changePattern() {
currentPattern = (currentPattern + 1) % numPatterns;
}
// Function to run the current pattern
void runCurrentPattern() {
switch (currentPattern) {
case 0:
pattern1();
break;
case 1:
pattern2();
break;
case 2:
pattern3();
break;
}
}
// Different pattern functions
void pattern1() {
// Pattern 1: Both LEDs steady on
digitalWrite(WHITE_RIGHT_PIN, HIGH);
digitalWrite(WHITE_LEFT_PIN, HIGH);
}
void pattern2() {
// Pattern 2: Alternating flash
static unsigned long lastTime = 0;
unsigned long currentTime = millis();
if (currentTime - lastTime > 500) { // 500 ms interval
lastTime = currentTime;
digitalWrite(WHITE_RIGHT_PIN, !digitalRead(WHITE_RIGHT_PIN));
digitalWrite(WHITE_LEFT_PIN, !digitalRead(WHITE_LEFT_PIN));
}
}
void pattern3() {
// Pattern 3: Blinking together
static unsigned long lastTime = 0;
unsigned long currentTime = millis();
if (currentTime - lastTime > 500) { // 500 ms interval
lastTime = currentTime;
bool state = digitalRead(WHITE_RIGHT_PIN); // Read one pin to get the current state
digitalWrite(WHITE_RIGHT_PIN, !state);
digitalWrite(WHITE_LEFT_PIN, !state);
}
}
//OKAY -1
void startupWhiteAnimation() {
// Turn on white LEDs on the right side one by one
for (int i = 0; i < 20; i++) {
digitalWrite(WHITE_RIGHT_PIN, HIGH);
// delay(10); // Adjust delay for desired speed
digitalWrite(WHITE_RIGHT_PIN, LOW);
delay(20); // Adjust delay for desired effect
digitalWrite(WHITE_LEFT_PIN, HIGH);
delay(10); // Adjust delay for desired speed
digitalWrite(WHITE_LEFT_PIN, LOW);
delay(20); // Adjust delay for desired effect
}
}
/* OKAY -2
void startupWhiteAnimation() {
// Turn on white LEDs simultaneously on both sides
for (int i = 0; i < 20; i++) {
digitalWrite(WHITE_RIGHT_PIN, HIGH);
digitalWrite(WHITE_LEFT_PIN, HIGH);
delay(50); // Adjust delay for desired speed
digitalWrite(WHITE_RIGHT_PIN, LOW);
digitalWrite(WHITE_LEFT_PIN, LOW);
delay(20); // Adjust delay for desired effect
}
}
*/
/* OKAY - 3
void startupWhiteAnimation() {
// Cascading effect for white LEDs on both sides
for (int i = 0; i < 2; i++) {
digitalWrite(WHITE_RIGHT_PIN, HIGH);
delay(100); // Adjust delay for desired cascading speed
digitalWrite(WHITE_LEFT_PIN, HIGH);
delay(100); // Adjust delay for desired cascading speed
digitalWrite(WHITE_RIGHT_PIN, LOW);
delay(100); // Adjust delay for desired cascading speed
digitalWrite(WHITE_LEFT_PIN, LOW);
delay(100); // Adjust delay for desired cascading speed
}
}
*/
/*
OKAY - 4
void startupWhiteAnimation() {
// Alternating blink animation for white LEDs on both sides
for (int i = 0; i < 5; i++) { // Repeat 10 times
digitalWrite(WHITE_RIGHT_PIN, HIGH); // Turn on right LED
delay(300); // Adjust delay for desired speed
digitalWrite(WHITE_RIGHT_PIN, LOW); // Turn off right LED
digitalWrite(WHITE_LEFT_PIN, HIGH); // Turn on left LED
delay(300); // Adjust delay for desired speed
digitalWrite(WHITE_LEFT_PIN, LOW); // Turn off left LED
}
}
*/
/*TEST
void startupWhiteAnimation() {
// Fading animation for white LEDs on both sides
int brightness = 100;
int fadeAmount = 3; // Adjust the fade amount for desired speed
// Fade in
while (brightness < 255) {
analogWrite(WHITE_RIGHT_PIN, brightness);
analogWrite(WHITE_LEFT_PIN, brightness);
brightness += fadeAmount;
//delay(10); // Adjust delay for desired fading speed
}
// Fade out
while (brightness > 0) {
analogWrite(WHITE_RIGHT_PIN, brightness);
analogWrite(WHITE_LEFT_PIN, brightness);
brightness -= fadeAmount;
delay(10); // Adjust delay for desired fading speed
}
}
*/
/* OKAY - 5
void startupWhiteAnimation() {
// Chasing animation for non-addressable LEDs on both sides
for (int i = 0; i < 3; i++) { // Repeat 5 times
for (int j = 0; j < 4; j++) {
digitalWrite(WHITE_RIGHT_PIN + j, HIGH); // Turn on LED one by one
delay(50); // Adjust delay for desired speed
digitalWrite(WHITE_RIGHT_PIN + j, LOW); // Turn off LED
}
delay(100); // Delay between sides
for (int j = 3; j >= 0; j--) {
digitalWrite(WHITE_LEFT_PIN + j, HIGH); // Turn on LED one by one in reverse order
delay(50); // Adjust delay for desired speed
digitalWrite(WHITE_LEFT_PIN + j, LOW); // Turn off LED
}
delay(100); // Delay between sides
}
}
*/