/*--------------------------------------------------------------------------------------//
3-Light Sequential Brake/Turn Signal Actuation
(Both Left and Right sides)
//--------------------------------------------------------------------------------------*/
const int LeftInnerLED = 10;
const int LeftCenterLED = 11;
const int LeftOuterLED = 12;
const int RightInnerLED = 5;
const int RightCenterLED = 4;
const int RightOuterLED = 3;
const int LeftTurnSwitch = 8;
const int RightTurnSwitch = 7;
int delayOn; // declare delay time variable from Potentiometer
boolean Rstate=0, Lstate=0;
void setup() {
pinMode (RightInnerLED, OUTPUT); // Right: connect LEDs, relay drivers or mosfet Gates here
pinMode (RightCenterLED, OUTPUT);
pinMode (RightOuterLED, OUTPUT);
pinMode (LeftInnerLED, OUTPUT); // Left: connect LEDs, relay drivers or mosfet Gates here
pinMode (LeftCenterLED, OUTPUT);
pinMode (LeftOuterLED, OUTPUT);
pinMode (A5, INPUT);
// connect Brake/Turn signal here (through divider or regulator to give ~4-5V when ON)
pinMode (RightTurnSwitch, INPUT); // Right ts/b
pinMode (LeftTurnSwitch, INPUT); // Left ts/b
}
void loop() {
delayOn = map(analogRead(A5),0,1023,0,500); {
}
while (digitalRead(RightTurnSwitch)==LOW && digitalRead(LeftTurnSwitch)==LOW) {
// do nothing, wait for signal to go HIGH
delay(20); // short pause to allow read/writes to proceed without interference
}
if (!Rstate) { // If lights are already on, skip turning them on again
delay(20); // short pause to allow read/writes to proceed without interference
// when Right signal goes High, actuate R outputs in sequence
if (digitalRead(RightTurnSwitch)==HIGH && digitalRead(LeftTurnSwitch)==LOW) {
Rstate=1;
digitalWrite(RightInnerLED, HIGH);
delay(delayOn);
digitalWrite(RightCenterLED, HIGH);
delay(delayOn);
digitalWrite(RightOuterLED, HIGH);
delay(delayOn);
}
}
if (!Lstate) { // If lights are already on, skip turning them on again
delay(20); // short pause to allow read/writes to proceed without interference
// when Left signal goes High, actuate L outputs in sequence
if (digitalRead(RightTurnSwitch)==LOW && digitalRead(LeftTurnSwitch)==HIGH) {
Lstate=1;
digitalWrite(LeftInnerLED, HIGH);
delay(delayOn);
digitalWrite(LeftCenterLED, HIGH);
delay(delayOn);
digitalWrite(LeftOuterLED, HIGH);
delay(delayOn);
}
}
if ((!Rstate) || (!Lstate)) { // If lights are already on, skip turning them on again
// when Brake (both) signal goes High, actuate R and L outputs in sequence
if (digitalRead(RightTurnSwitch)==HIGH && digitalRead(LeftTurnSwitch)==HIGH) {
Rstate=1;
Lstate=1;
digitalWrite(LeftInnerLED, HIGH);
digitalWrite(RightInnerLED, HIGH);
delay(delayOn);
digitalWrite(LeftCenterLED, HIGH);
digitalWrite(RightCenterLED, HIGH);
delay(delayOn);
digitalWrite(LeftOuterLED, HIGH);
digitalWrite(RightOuterLED, HIGH);
delay(delayOn);
}
}
delay(20); // short pause to allow read/writes to proceed without interference
// when signal goes LOW turn off all outputs
if (digitalRead(RightTurnSwitch)==LOW) {
digitalWrite(LeftInnerLED, LOW);
digitalWrite(LeftCenterLED, LOW);
digitalWrite(LeftOuterLED, LOW);
Rstate=0;
}
if (digitalRead(LeftTurnSwitch)==LOW) {
digitalWrite(RightInnerLED, LOW);
digitalWrite(RightCenterLED, LOW);
digitalWrite(RightOuterLED, LOW);
Lstate=0;
}
}