Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <FastLED.h>
- #define NUM_LEDS 3
- #define DATA_PIN PB2
- // BUTTON PINS
- #define AUTOMODEPIN PB1
- #define MANUALMODEPIN PB0
- // LED PIN
- #define LED_PIN PB5
- // LED COLOR
- #define LED_COLOR_GREEN 0
- #define LED_COLOR_ORANGE 1
- #define LED_COLOR_RED 2
- // LED STATE
- #define LEDSTATE_GREEN 0
- #define LEDSTATE_ORANGE 1
- #define LEDSTATE_RED 2
- #define LEDSTATE_RED_ORANGE 3
- // system state
- #define SYSTEMSTATE_MANUAL 0
- #define SYSTEMSTATE_AUTO 1
- // Define the array of leds
- CRGB leds[NUM_LEDS];
- //colord per led
- uint32_t colorsIDX[] = {CRGB::Green, CRGB::Orange, CRGB::Red};
- // led state
- byte ledState;
- // system state
- byte systemState;
- unsigned long lastLEDStateChange;
- int waitPeriod[4] = {7500,1000,5000,500};
- void setup() {
- FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
- pinMode(AUTOMODEPIN, INPUT_PULLUP);
- pinMode(MANUALMODEPIN, INPUT_PULLUP);
- pinMode(LED_PIN, OUTPUT);
- // start led state
- systemState = SYSTEMSTATE_AUTO;
- setLEDState(0);
- }
- void loop() {
- if (!digitalRead(MANUALMODEPIN)) {
- setLEDState((ledState + 1) % 4);
- systemState = SYSTEMSTATE_MANUAL;
- // quick and dirty debounce
- delay(500);
- } //end if
- if (!digitalRead(AUTOMODEPIN)) {
- systemState = SYSTEMSTATE_AUTO;
- // quick and dirty debounce
- digitalWrite(LED_PIN, HIGH);
- delay(500);
- digitalWrite(LED_PIN, LOW);
- } //end if
- // if we are on auto
- if (systemState == SYSTEMSTATE_AUTO) {
- //check time pass ... we do it with int the other if - not to do the math all the time
- if (lastLEDStateChange + waitPeriod[ledState] < millis()) {
- setLEDState((ledState + 1) % 4); // move to nect led state
- } //end if
- }//end if
- } //end loop
- void setLEDState(byte newState) {
- switch (newState) {
- case LEDSTATE_GREEN:
- leds[LED_COLOR_RED] = CRGB::Black;
- leds[LED_COLOR_ORANGE] = CRGB::Black;
- leds[LED_COLOR_GREEN] = colorsIDX[LED_COLOR_GREEN];
- break;
- case LEDSTATE_ORANGE:
- leds[LED_COLOR_RED] = CRGB::Black;
- leds[LED_COLOR_ORANGE] = colorsIDX[LED_COLOR_ORANGE];
- leds[LED_COLOR_GREEN] = CRGB::Black;
- break;
- case LEDSTATE_RED:
- leds[LED_COLOR_RED] = colorsIDX[LED_COLOR_RED];
- leds[LED_COLOR_ORANGE] = CRGB::Black;
- leds[LED_COLOR_GREEN] = CRGB::Black;
- break;
- case LEDSTATE_RED_ORANGE:
- leds[LED_COLOR_RED] = colorsIDX[LED_COLOR_RED];
- leds[LED_COLOR_ORANGE] = colorsIDX[LED_COLOR_ORANGE];
- leds[LED_COLOR_GREEN] = CRGB::Black;
- break;
- } //end switch
- // set to current
- ledState = newState;
- //set last millis chnage
- lastLEDStateChange = millis();
- // show
- FastLED.show();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement