Blog - LEDbar controller for Garbage run 2018
09-Feb-2018
			  
            Atmega based LEDbar controller to switch 4 LEDbars (12v 180w) on a car for the Garbage run 2018
Updated on: 05-02-2018 :: Version 0.1
Specifications
Schematic
		..
Parts
Part details used for the controller:
ATmega source code (Arduino IDE)
/*
Atmega sketch for LEDbar controller - Duteweerd Elektronica 2017 - 2018
*/
int allOnPin = 2;                 //Switch: All on (Pin2)
int strobePin = 3;                //
int LEDBar_10frontPin = 4;        //
int LEDBar_rearPin = 5;           //
int LEDBar_highbeamSigPin = 7;    //
int LEDBar_rearSigPin = 6;        //
int LEDbarF1_outPin = 8;          //
int LEDbarF2_outPin = 9;          //
int LEDbarF3_outPin = 10;         //
int LEDbarR1_outPin = 11;         //
int HeartBeat_LEDPin = 13;        //
int strobe_potPin = A1;           //
int val_allOnPin = 0;
int val_strobePin = 0;
int val_LEDBar_10frontPin = 0;
int val_LEDBar_rearPin = 0;
int val_LEDBar_highbeamSigPin = 0;
int val_LEDBar_rearSigPin = 0;
int val_strobe_potPin = 0;
int randNumber;
int last_allOnPin = LOW;
int last_strobePin = LOW;
int last_LEDBar_10frontPin = LOW;
int last_LEDBar_rearPin = LOW;
int last_LEDBar_highbeamSigPin = LOW;
int last_LEDBar_rearSigPin = LOW;
void setup() {
  // initialize PINS for INPUT
  pinMode(allOnPin, INPUT);
  pinMode(strobePin, INPUT);
  pinMode(LEDBar_10frontPin, INPUT);
  pinMode(LEDBar_rearPin, INPUT);
  pinMode(LEDBar_highbeamSigPin, INPUT);
  pinMode(LEDBar_rearSigPin, INPUT);
  pinMode(strobe_potPin, INPUT);
  
  // initialize PINS for OUTPUT
  pinMode(LEDbarF1_outPin, OUTPUT);
  pinMode(LEDbarF2_outPin, OUTPUT);
  pinMode(LEDbarF3_outPin, OUTPUT);
  pinMode(LEDbarR1_outPin, OUTPUT);
  pinMode(HeartBeat_LEDPin, OUTPUT);
}
void heartbeat() {
    //Perform a heartbeat indication on LED (Buildin Pin 13)
  digitalWrite(HeartBeat_LEDPin, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(500);                             // wait for half a second
  digitalWrite(HeartBeat_LEDPin, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                            // wait for a second
}
void strobe() {
    //Strobe function code
  randNumber = random(8, 12);			  // select random output for strobe
  digitalWrite(randNumber, HIGH);
  delay(val_strobe_potPin);               // wait for however potentiometer value is
  digitalWrite(randNumber, LOW);
  delay(val_strobe_potPin);               // wait for however potentiometer value is
}
void loop() {
  // Read switch states
  val_allOnPin = digitalRead(allOnPin);
  val_strobePin = digitalRead(strobePin);
  val_LEDBar_10frontPin = digitalRead(LEDBar_10frontPin);
  val_LEDBar_rearPin = digitalRead(LEDBar_rearPin);
  val_LEDBar_highbeamSigPin = digitalRead(LEDBar_highbeamSigPin);
  val_LEDBar_rearSigPin = digitalRead(LEDBar_rearSigPin);
  val_strobe_potPin = map(analogRead (strobe_potPin), 0, 1023, 10, 1000);
  //heartbeat();      //heartbeat LED function
  if (val_strobePin == HIGH & last_strobePin == LOW) {
    digitalWrite(LEDbarR1_outPin, LOW);
    digitalWrite(LEDbarF1_outPin, LOW);
    digitalWrite(LEDbarF2_outPin, LOW);
    digitalWrite(LEDbarF3_outPin, LOW);
    last_strobePin = HIGH;
  }
  if (val_strobePin == LOW & last_strobePin == HIGH) {
    last_strobePin = LOW;
  }
  
  if (val_strobePin == HIGH) {
  //Code to start strobe function
  strobe();
  return;
  }
  //Rear light function
  if (val_LEDBar_rearSigPin == HIGH) {
    //code to start rear light function
    digitalWrite(LEDbarR1_outPin, HIGH);
    last_LEDBar_rearSigPin = HIGH;
  }
  if (val_LEDBar_rearSigPin == LOW & last_LEDBar_rearSigPin == HIGH) {
    digitalWrite(LEDbarR1_outPin, LOW);
    last_LEDBar_rearSigPin = LOW;
  }
  //Rear light function
  if (val_LEDBar_rearPin == HIGH) {
    //code to start rear light function
    digitalWrite(LEDbarR1_outPin, HIGH);
    last_LEDBar_rearPin = HIGH;
  }
  if (val_LEDBar_rearPin == LOW & last_LEDBar_rearPin == HIGH) {
    digitalWrite(LEDbarR1_outPin, LOW);
    last_LEDBar_rearPin = LOW;
  }  
  //High beam function
  if (val_LEDBar_highbeamSigPin == HIGH) {
    //code to start high beam function
    digitalWrite(LEDbarF1_outPin, HIGH);
    digitalWrite(LEDbarF2_outPin, HIGH);
    digitalWrite(LEDbarF3_outPin, HIGH);
    last_LEDBar_highbeamSigPin = HIGH;
  }
   
    if (val_LEDBar_highbeamSigPin == LOW & last_LEDBar_highbeamSigPin == HIGH) {
    digitalWrite(LEDbarF1_outPin, LOW);
    digitalWrite(LEDbarF2_outPin, LOW);
    digitalWrite(LEDbarF3_outPin, LOW);
    last_LEDBar_highbeamSigPin = LOW;
  }
  if (val_allOnPin == HIGH) {
  //Code to start allOn function
    digitalWrite(LEDbarR1_outPin, HIGH);
    digitalWrite(LEDbarF1_outPin, HIGH);
    digitalWrite(LEDbarF2_outPin, HIGH);
    digitalWrite(LEDbarF3_outPin, HIGH);
    last_allOnPin = HIGH;
  }
  
  if (val_allOnPin == LOW & last_allOnPin == HIGH) {
    digitalWrite(LEDbarR1_outPin, LOW);
    digitalWrite(LEDbarF1_outPin, LOW);
    digitalWrite(LEDbarF2_outPin, LOW);
    digitalWrite(LEDbarF3_outPin, LOW);
    last_allOnPin = LOW;
  }
  if (val_LEDBar_10frontPin == HIGH) {
  //Code to start allOn function
    digitalWrite(LEDbarF1_outPin, 30);
    last_LEDBar_10frontPin = HIGH;
  } 
  
  if (val_LEDBar_10frontPin == LOW & last_LEDBar_10frontPin == HIGH) {
    digitalWrite(LEDbarF1_outPin, LOW);
    last_LEDBar_10frontPin = LOW;
  }
}
		
		Finished product
		
		If you have any questions about this topic, please contact me
If this was interesting for you, please consider a donation via PayPal here