// Define the pin numbers for the LEDs
int lowLightPin = 2;
int highLightPin = 3;
int rightDRLPin = 4;
int leftDRLPin = 5;
int rightBlinkerPin = 6;
int leftBlinkerPin = 7;
int tailLightPin = 8;
int reverseLightPin = 9;
// Define the pin numbers for the toggle switches
int rightBlinkerButtonPin = 11;
int leftBlinkerButtonPin = 12;
int reverseButtonPin = 13;
int drlButtonPin = A1;
int primaryButtonPin = A2; //Activate low light and tail light
int highButtonPin = A3;
int hazardButtonPin = A4;
int brakeButtonPin = A5;
int rightBlinkerOn = LOW;
int leftBlinkerOn = LOW;
int reverseOn = LOW;
int drlOn = LOW;
int primaryOn = LOW; //Low light and tail light
int highOn = LOW;
int hazardOn = LOW;
int brakePressed = LOW;
int lastHazardOn = LOW;
unsigned long previousMillisBlinker = 0;
const long intervalBlinker = 250;
unsigned long previousMillisRightDrl = 0;
const long intervalRightDrl = 500;
unsigned long previousMillisLeftDrl = 0;
const long intervalLeftDrl = 500;
const long intervalHazard = 250;
void setup() {
// Initialize the LED pins as outputs
pinMode(lowLightPin, OUTPUT);
pinMode(highLightPin, OUTPUT);
pinMode(rightDRLPin, OUTPUT);
pinMode(leftDRLPin, OUTPUT);
pinMode(rightBlinkerPin, OUTPUT);
pinMode(leftBlinkerPin, OUTPUT);
pinMode(tailLightPin, OUTPUT);
pinMode(reverseLightPin, OUTPUT);
// Initialize the switch pins as inputs with pull-up resistors
pinMode(rightBlinkerButtonPin, INPUT_PULLUP);
pinMode(leftBlinkerButtonPin, INPUT_PULLUP);
pinMode(reverseButtonPin, INPUT_PULLUP);
pinMode(drlButtonPin, INPUT_PULLUP);
pinMode(primaryButtonPin, INPUT_PULLUP);
pinMode(highButtonPin, INPUT_PULLUP);
pinMode(hazardButtonPin, INPUT_PULLUP);
pinMode(brakeButtonPin, INPUT_PULLUP);
}
void loop() {
brakePressed = digitalRead(brakeButtonPin);
primaryOn = digitalRead(primaryButtonPin); // Include low and tail light
// Read the state of the primary light switch (low and tail)
if (primaryOn) {
digitalWrite(lowLightPin, HIGH);analogWrite(tailLightPin, 50);
} else {
digitalWrite(lowLightPin, LOW);analogWrite(tailLightPin, 0);
}
if (brakePressed) {
analogWrite(tailLightPin, 255); // Full brightness
}
// Read the state of the right blinker switch
if (digitalRead(rightBlinkerButtonPin) == LOW) {
rightBlinkerOn = !rightBlinkerOn;
digitalWrite(rightBlinkerPin, rightBlinkerOn ? HIGH : LOW);
delay(100);
}
// Read the state of the left blinker switch
if (digitalRead(leftBlinkerButtonPin) == LOW) {
leftBlinkerOn = !leftBlinkerOn;
digitalWrite(leftBlinkerPin, leftBlinkerOn ? HIGH : LOW);
delay(100);
}
// Implement blinkers
unsigned long currentMillisBlinker = millis();
if ((leftBlinkerOn || rightBlinkerOn) && (currentMillisBlinker - previousMillisBlinker >= intervalBlinker)) {
previousMillisBlinker = currentMillisBlinker;
digitalWrite(leftBlinkerPin, leftBlinkerOn ? !digitalRead(leftBlinkerPin) : LOW);
digitalWrite(rightBlinkerPin, rightBlinkerOn ? !digitalRead(rightBlinkerPin) : LOW);
}
// Read the state of the drl
if (digitalRead(drlButtonPin) == LOW) {
drlOn = !drlOn;
digitalWrite(rightDRLPin || leftDRLPin, drlOn ? HIGH : LOW);
delay(100);
}
// Implement right drl
unsigned long currentMillisRightDrl = millis();
if ((drlOn) && (currentMillisRightDrl - previousMillisRightDrl >= intervalRightDrl)) {
previousMillisRightDrl = currentMillisRightDrl;
digitalWrite(rightDRLPin, drlOn ? !digitalRead(drlButtonPin) : LOW);
}
// Implement left drl
unsigned long currentMillisleftDrl = millis();
if ((drlOn) && (currentMillisleftDrl - previousMillisLeftDrl >= intervalLeftDrl)) {
previousMillisLeftDrl = currentMillisleftDrl;
digitalWrite(leftDRLPin, drlOn ? !digitalRead(drlButtonPin) : LOW);
}
// Read the state of the reverse button
if (digitalRead(reverseButtonPin) == LOW) {
reverseOn = !reverseOn;
digitalWrite(reverseLightPin, reverseOn ? HIGH : LOW);
delay(100);
}
// Read the state of the high button
if (digitalRead(highButtonPin) == LOW) {
highOn = !highOn;
digitalWrite(highLightPin, highOn ? HIGH : LOW);
delay(100);
}
// Read the state of the hazard button
int reading = digitalRead(hazardButtonPin);
// Check if the hazard button state has changed
if (reading != lastHazardOn) {
// Button state has changed, save the time
previousMillisBlinker = millis();
}
// Update the hazard button state
lastHazardOn = reading;
// Implement hazard lights
if (reading == LOW && (currentMillisBlinker - previousMillisBlinker >= 50)) {
hazardbutton();
}
}
void hazardbutton() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillisBlinker >= intervalHazard) {
previousMillisBlinker = currentMillis;
rightBlinkerOn = !rightBlinkerOn;
leftBlinkerOn = !leftBlinkerOn;
digitalWrite(rightBlinkerPin, rightBlinkerOn ? HIGH : LOW);
digitalWrite(leftBlinkerPin, leftBlinkerOn ? HIGH : LOW);
}
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
r1:1
r1:2
r2:1
r2:2
r3:1
r3:2
r4:1
r4:2
r5:1
r5:2
r6:1
r6:2
r7:1
r7:2
r8:1
r8:2
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
btn4:1.l
btn4:2.l
btn4:1.r
btn4:2.r
btn5:1.l
btn5:2.l
btn5:1.r
btn5:2.r
btn6:1.l
btn6:2.l
btn6:1.r
btn6:2.r
btn7:1.l
btn7:2.l
btn7:1.r
btn7:2.r
btn8:1.l
btn8:2.l
btn8:1.r
btn8:2.r
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
led5:A
led5:C
led6:A
led6:C
led7:A
led7:C
led8:A
led8:C
led9:A
led9:C
led10:A
led10:C
led11:A
led11:C
led12:A
led12:C
led13:A
led13:C
led14:A
led14:C
led15:A
led15:C
led16:A
led16:C
btn9:1.l
btn9:2.l
btn9:1.r
btn9:2.r
vcc1:VCC