|
| 1 | +#include "RgbLedState.h" |
| 2 | + |
| 3 | +// Create the neopixel with the built in definitions NUM_NEOPIXEL and PIN_NEOPIXEL |
| 4 | +Adafruit_NeoPixel neoPixel = Adafruit_NeoPixel(NUM_NEOPIXEL, PIN_NEOPIXEL, NEO_GRB + NEO_KHZ800); |
| 5 | +Led RgbLedState::led; |
| 6 | + |
| 7 | +///////////////// |
| 8 | +// CONSTRUCTOR // |
| 9 | +///////////////// |
| 10 | + |
| 11 | +RgbLedState::RgbLedState() {} |
| 12 | + |
| 13 | +////////// |
| 14 | +// INIT // |
| 15 | +////////// |
| 16 | + |
| 17 | +void RgbLedState::init() { |
| 18 | + led.red = 0; |
| 19 | + led.green = 255; |
| 20 | + led.blue = 0; |
| 21 | + led.brightness = 255; // max |
| 22 | + led.fadeAmount = 3; // step |
| 23 | + led.blinkSpeed = 60; // in ms |
| 24 | + led.pulseSpeed = 6; // in ms |
| 25 | + led.lastUpdate = 1410065407; // max long |
| 26 | + led.state = LED_ON; |
| 27 | + |
| 28 | + neoPixel.begin(); |
| 29 | + neoPixel.setPixelColor(0, neoPixel.Color(led.red, led.green, led.blue)); |
| 30 | + neoPixel.setBrightness(led.brightness); |
| 31 | + neoPixel.show(); |
| 32 | +} |
| 33 | + |
| 34 | +////////////////// |
| 35 | +// UPDATE STATE // |
| 36 | +////////////////// |
| 37 | + |
| 38 | +void RgbLedState::setOn() { |
| 39 | + if (led.state != LED_ON) { |
| 40 | + led.state = LED_ON; |
| 41 | + led.brightness = 255; |
| 42 | + } |
| 43 | +} |
| 44 | + |
| 45 | +void RgbLedState::setOff() { |
| 46 | + if (led.state != LED_OFF) { |
| 47 | + led.state = LED_OFF; |
| 48 | + led.brightness = 0; |
| 49 | + } |
| 50 | +} |
| 51 | + |
| 52 | +void RgbLedState::setPulsing() { |
| 53 | + if (led.state != LED_PULSING) { |
| 54 | + led.brightness = 0; |
| 55 | + led.fadeAmount = 3; |
| 56 | + led.state = LED_PULSING; |
| 57 | + } |
| 58 | +} |
| 59 | + |
| 60 | +void RgbLedState::setBlinking() { |
| 61 | + if (led.state != LED_BLINKING) { |
| 62 | + led.state = LED_BLINKING; |
| 63 | + } |
| 64 | +} |
| 65 | + |
| 66 | +void RgbLedState::setColor(int colorIndex) { |
| 67 | + if (colorIndex < 0 || colorIndex >= NUM_COLORS) { |
| 68 | + return; |
| 69 | + } |
| 70 | + led.red = colors[colorIndex][0]; |
| 71 | + led.green = colors[colorIndex][1]; |
| 72 | + led.blue = colors[colorIndex][2]; |
| 73 | +} |
| 74 | + |
| 75 | + |
| 76 | +////////// |
| 77 | +// LOOP // |
| 78 | +////////// |
| 79 | + |
| 80 | +void RgbLedState::loop() { |
| 81 | + switch (led.state) { |
| 82 | + case LED_OFF: { |
| 83 | + led.brightness = 0; |
| 84 | + break; |
| 85 | + } |
| 86 | + case LED_BLINKING: { |
| 87 | + if (millis() - led.lastUpdate > led.blinkSpeed) { |
| 88 | + led.brightness = (led.brightness == 0) ? 255 : 0; |
| 89 | + led.lastUpdate = millis(); |
| 90 | + } |
| 91 | + break; |
| 92 | + } |
| 93 | + case LED_PULSING: { |
| 94 | + if (millis() - led.lastUpdate > led.pulseSpeed) { |
| 95 | + led.brightness += led.fadeAmount; |
| 96 | + // reverse the direction of the fading at the ends of the fade |
| 97 | + if (led.brightness <= 0 || led.brightness >= 255) { |
| 98 | + led.fadeAmount = -led.fadeAmount; |
| 99 | + } |
| 100 | + led.lastUpdate = millis(); |
| 101 | + } |
| 102 | + break; |
| 103 | + } |
| 104 | + default: { //case LED_ON: |
| 105 | + led.brightness = 255; |
| 106 | + break; |
| 107 | + } |
| 108 | + } |
| 109 | + neoPixel.setPixelColor(0, neoPixel.Color(led.red * led.brightness / 255, led.green * led.brightness / 255, led.blue * led.brightness / 255)); |
| 110 | + neoPixel.show(); |
| 111 | +} |
0 commit comments