/* FlashLedTest.ino - Flash LED Test program. */ #include "FlashLed.h" // Create preprocessor definitions for the connection pins. #define GREEN_PIN 9 #define YELLOW_PIN 10 #define RED_PIN 11 // Create FlashLed objects: green, yellow, and red. FlashLed green; FlashLed yellow; FlashLed red; int phase = 0; unsigned long timer = 0; int interval = 0; bool fadeEnable = true; void setup() { green.begin(GREEN_PIN); yellow.begin(YELLOW_PIN); red.begin(RED_PIN); green.setMax(100); delay(10); } void loop() { // update the LEDs green.update(); yellow.update(); red.update(); // check timer unsigned long now = millis(); if (timer != 0) { if (now - timer >= interval) { timer = 0; ++phase; } } else { timer = now; nextPhase(); } } /* nextPhase - Start Next Phase of Test void nextPhase () Begins the next test phase. The sequence runs as follows: 1. Green on for 2 seconds. 2. Green off, yellow on for 2 seconds. 3. Yellow off, red on for 2 seconds. 4. Red off, green flash for 4 seconds. 5. Green off, yellow flash for 4 seconds. 6. Yellow off, red flash for 4 seconds. 7. Red off, faster flash time, green flash for 3 seconds. 8. Yellow flash for 3 seconds. 9. Red flash for 3 seconds. 10. Green off for 3 seconds. 11. Yellow off for 3 seconds. 12. Red off for 3 seconds. 13. Set fade longer than flash time, green flash 3 times. 14. Yellow flash 3 times in 4 seconds. 15. Red flash 3 times in 4 seconds. 16. Turn on all LEDs 2 seconds. 17. Turn off all LEDs 2 seconds. This sequence repeats with fading disabled every other time. */ void nextPhase () { if (phase == 0) { // green on for 2 seconds allowFading(fadeEnable); changeTime(1000, 1200); changeFade(500, 500); green.on(); interval = 2000; } else if (phase == 1) { // green off, yellow on for 2 seconds green.off(); yellow.on(); } else if (phase == 2) { // yellow off, red on for 2 seconds yellow.off(); red.on(); } else if (phase == 3) { // red off, green flash for 4 seconds red.off(); green.flash(); interval = 4000; } else if (phase == 4) { // green off, yellow flash for 4 seconds green.off(); yellow.flash(); } else if (phase == 5) { // yellow off, red flash for 4 seconds yellow.off(); red.flash(); } else if (phase == 6) { // red off, faster flash green for 3 red.off(); changeTime(200, 900); green.flash(); interval = 3000; } else if (phase == 7) { // yellow flash for 3 yellow.flash(); } else if (phase == 8) { // red flash for 3 red.flash(); } else if (phase == 9) { // green off for 3 green.off(); } else if (phase == 10) { // yellow off for 3 yellow.off(); } else if (phase == 11) { // red off for 3 red.off(); } else if (phase == 12) { // green flash 3 times in 4 seconds changeTime(500, 500); // fade longer than flash changeFade(1000, 1000); green.flash(3); interval = 4000; } else if (phase == 13) { // yellow flash 3 times in 4 yellow.flash(3); } else if (phase == 14) { // red flash 3 times in 4 red.flash(3); } else if (phase == 15) { // all on for 2 seconds green.on(); yellow.on(); red.on(); interval = 2000; } else if (phase == 16) { // all off for 2 seconds green.off(); yellow.off(); red.off(); } else { // start over fadeEnable = ! fadeEnable; // change fading enabled timer = 0; phase = 0; } } void allowFading (bool enable) { green.setFading(enable); yellow.setFading(enable); red.setFading(enable); } void changeTime (int on, int off) { green.setOnTime(on); green.setOffTime(off); yellow.setOnTime(on); yellow.setOffTime(off); red.setOnTime(on); red.setOffTime(off); } void changeFade (int up, int down) { green.setUpTime(up); green.setDownTime(down); yellow.setUpTime(up); yellow.setDownTime(down); red.setUpTime(up); red.setDownTime(down); }