/** created by garzoli http://www.instructables.com/member/garzoli/ */ const int DELAY = 10; // define pins for LEDs const int REAR_RED_LEFT = 13; const int REAR_RED_RIGHT = 12; const int REAR_RED_MIDDLE = 11; const int YELLOW_LEFT = 10; const int YELLOW_RIGHT = 9; const int FRONT_WHITE_RIGHT = 8; const int FRONT_WHITE_LEFT = 7; const int BLUE_1 = 6; const int BLUE_2 = 5; const int BLUE_3 = 4; const int BLUE_4 = 3; int min = 0; int max = 100; int step = 0; int yellowState = LOW; int yellowDivider = 20; int redState = LOW; int redDivider = 25; void setup() { // set pin modes pinMode(REAR_RED_LEFT, OUTPUT); pinMode(REAR_RED_RIGHT, OUTPUT); pinMode(REAR_RED_MIDDLE, OUTPUT); pinMode(YELLOW_LEFT, OUTPUT); pinMode(YELLOW_RIGHT, OUTPUT); pinMode(FRONT_WHITE_RIGHT, OUTPUT); pinMode(FRONT_WHITE_LEFT, OUTPUT); pinMode(BLUE_1, OUTPUT); pinMode(BLUE_2, OUTPUT); pinMode(BLUE_3, OUTPUT); pinMode(BLUE_4, OUTPUT); // set default pin values digitalWrite(REAR_RED_LEFT, LOW); digitalWrite(REAR_RED_RIGHT, LOW); digitalWrite(REAR_RED_MIDDLE, LOW); digitalWrite(YELLOW_LEFT, LOW); digitalWrite(YELLOW_RIGHT, LOW); digitalWrite(FRONT_WHITE_RIGHT, LOW); digitalWrite(FRONT_WHITE_LEFT, LOW); digitalWrite(BLUE_1, LOW); digitalWrite(BLUE_2, LOW); digitalWrite(BLUE_3, LOW); digitalWrite(BLUE_4, LOW); // init step step = min; } void loop() { ++step; if (step >= max) { step = min; } delay(DELAY); displayYellow(); displayRed(); displayBlue(); displayWhite(); delay(DELAY); } /** flip-flop yellow LEDs */ void displayYellow() { if (step % yellowDivider == 0) { yellowState = !yellowState; Serial.println(step); Serial.println(yellowState); digitalWrite(YELLOW_LEFT, yellowState); digitalWrite(YELLOW_RIGHT, !yellowState); } } /** blinking red light */ void displayRed() { if (step % redDivider == 0) { redState = !redState; digitalWrite(REAR_RED_LEFT, redState); digitalWrite(REAR_RED_RIGHT, redState); digitalWrite(REAR_RED_MIDDLE, !redState); } } /** running light effect */ void displayBlue() { digitalWrite(BLUE_1, LOW); digitalWrite(BLUE_2, LOW); digitalWrite(BLUE_3, LOW); digitalWrite(BLUE_4, LOW); switch (step) { case 10: case 50: digitalWrite(BLUE_1, HIGH); break; case 20: case 60: digitalWrite(BLUE_2, HIGH); break; case 30: case 70: digitalWrite(BLUE_3, HIGH); break; case 40: case 80: digitalWrite(BLUE_4, HIGH); break; } } /** vibrating white light */ void displayWhite() { if (step % 2 == 0) { digitalWrite(FRONT_WHITE_RIGHT, HIGH); digitalWrite(FRONT_WHITE_LEFT, HIGH); } else { digitalWrite(FRONT_WHITE_RIGHT, LOW); digitalWrite(FRONT_WHITE_LEFT, LOW); } }