|
@@ -1,194 +0,0 @@
|
|
|
-#include "Arduino.h"
|
|
|
-#include "Adafruit_NeoPixel.h"
|
|
|
-#include "BackgroundRingClass.h"
|
|
|
-#include "WS2812_Definitions.h"
|
|
|
-
|
|
|
-BackgroundRingClass::BackgroundRingClass(int led_count, int pin) : Adafruit_NeoPixel(led_count+1, pin, NEO_GRB + NEO_KHZ800) {
|
|
|
- this->led_count = led_count;
|
|
|
- this->action = Idle;
|
|
|
- this->begin();
|
|
|
-}
|
|
|
-
|
|
|
-void BackgroundRingClass::tick() {
|
|
|
- switch(this->action) {
|
|
|
- case Idle: this->tick_idle(); break;
|
|
|
- case Solid: this->tick_solid(); break;
|
|
|
- case Pulse: this->tick_pulse(); break;
|
|
|
- case Spin: this->tick_spin(); break;
|
|
|
- case Flip: this->tick_flip(); break;
|
|
|
- case Slowroll: this->tick_slowroll(); break;
|
|
|
- default: this->action = Idle;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/* Ring Functions */
|
|
|
-void BackgroundRingClass::setColor(unsigned long color, uint8_t brightness, bool show) {
|
|
|
- this->setBrightness(brightness);
|
|
|
- for(int i=0; i < this->led_count; i++) {
|
|
|
- this->setPixelColor(i, color);
|
|
|
- }
|
|
|
- if(show) {
|
|
|
- this->show();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-void BackgroundRingClass::setRepeating(unsigned long* colors, int elements, int rotation) {
|
|
|
- this->setBrightness(50);
|
|
|
- int curcolor = 0;
|
|
|
- for(int i = 0; i < this->led_count; i++) {
|
|
|
- this->setPixelColor(i, colors[(i+rotation) % elements]);
|
|
|
- }
|
|
|
- this->show();
|
|
|
-}
|
|
|
-
|
|
|
-///////////////////////// Idle
|
|
|
-void BackgroundRingClass::init_idle() {
|
|
|
- this->action = Idle;
|
|
|
- this->setColor(BLACK, 255, true);
|
|
|
-}
|
|
|
-
|
|
|
-void BackgroundRingClass::tick_idle() {
|
|
|
- // noop. Here for consistency
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-///////////////////////// Solid
|
|
|
-void BackgroundRingClass::init_solid(unsigned long color, uint8_t brightness) {
|
|
|
- this->action = Solid;
|
|
|
- this->setBrightness(brightness);
|
|
|
- this->setColor(color);
|
|
|
- this->show();
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-void BackgroundRingClass::tick_solid() {
|
|
|
- // noop. Here for consistency
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-///////////////////////// Pulse
|
|
|
-void BackgroundRingClass::init_pulse(unsigned long color, uint8_t maxbrightness, unsigned long ms) {
|
|
|
- Serial.println("Initializing pulse");
|
|
|
- this->action = Pulse;
|
|
|
- this->pulseinfo.color = color;
|
|
|
- this->pulseinfo.increasing = true;
|
|
|
- this->pulseinfo.starttime = micros();
|
|
|
- this->pulseinfo.steptime = (ms * 1000) / ((2 * (unsigned long)maxbrightness) - 1);
|
|
|
- this->pulseinfo.maxbrightness = maxbrightness;;
|
|
|
- this->pulseinfo.curbrightness = 1;
|
|
|
-
|
|
|
- this->setColor(this->pulseinfo.color, brightness, true); // dimmest setting
|
|
|
-}
|
|
|
-
|
|
|
-void BackgroundRingClass::tick_pulse() {
|
|
|
- if((micros() - this->pulseinfo.starttime) < this->pulseinfo.steptime) {
|
|
|
- return;
|
|
|
- }
|
|
|
- this->pulseinfo.starttime = micros();
|
|
|
- if(this->pulseinfo.increasing && this->pulseinfo.curbrightness == this->pulseinfo.maxbrightness) {
|
|
|
- this->pulseinfo.increasing = false;
|
|
|
- }
|
|
|
- if(this->pulseinfo.increasing) {
|
|
|
- this->pulseinfo.curbrightness++;
|
|
|
- } else {
|
|
|
- this->pulseinfo.curbrightness--;
|
|
|
- }
|
|
|
- if(this->pulseinfo.curbrightness == 0) {
|
|
|
- // We are done
|
|
|
- this->init_idle();
|
|
|
- } else {
|
|
|
- //Serial.print("Setting Brightness: "); Serial.println(this->pulseinfo.curbrightness);
|
|
|
- this->setColor(this->pulseinfo.color, this->pulseinfo.curbrightness, true);
|
|
|
- this->show();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-///////////////////////// Spin
|
|
|
-void BackgroundRingClass::init_spin(unsigned long color1, unsigned long color2, unsigned long ms, unsigned long tickdelay) {
|
|
|
- this->action = Spin;
|
|
|
- this->spininfo.color1 = color1;
|
|
|
- this->spininfo.color2 = color2;
|
|
|
- this->spininfo.ms = ms * 1000;
|
|
|
- this->spininfo.tickdelay = tickdelay * 1000;
|
|
|
- this->spininfo.starttime = micros();
|
|
|
- this->spininfo.lasttick = micros() - this->spininfo.tickdelay;
|
|
|
- this->spininfo.rotation = 0;
|
|
|
-}
|
|
|
-
|
|
|
-void BackgroundRingClass::tick_spin() {
|
|
|
- if(micros() - this->spininfo.starttime > this->spininfo.ms) {
|
|
|
- // we're done
|
|
|
- Serial.println(micros() - this->spininfo.starttime);
|
|
|
- this->init_idle();
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if(micros() - this->spininfo.lasttick > this->spininfo.tickdelay) {
|
|
|
- // Time to spin
|
|
|
- this->spininfo.lasttick = micros();
|
|
|
- this->spininfo.rotation = (this->spininfo.rotation + 1) % 3;
|
|
|
- //unsigned long tickcolors[] = { this->spininfo.color1, this->spininfo.color1, this->spininfo.color1, this->spininfo.color2 };
|
|
|
- //unsigned long tickcolors[] = { BLACK, this->spininfo.color1, this->spininfo.color2 };
|
|
|
- unsigned long tickcolors[] = { BLACK, this->spininfo.color1, this->spininfo.color1, this->spininfo.color2 };
|
|
|
- this->setRepeating(tickcolors, 4, this->spininfo.rotation);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-///////////////////////// Flip
|
|
|
-void BackgroundRingClass::init_flip(unsigned long color1, unsigned long color2, unsigned long ms, unsigned long tickdelay) {
|
|
|
- this->action = Flip;
|
|
|
- this->flipinfo.color1 = color1;
|
|
|
- this->flipinfo.color2 = color2;
|
|
|
- this->flipinfo.ms = ms * 1000;
|
|
|
- this->flipinfo.tickdelay = tickdelay * 1000;
|
|
|
- this->flipinfo.starttime = micros();
|
|
|
- this->flipinfo.lasttick = micros() - this->flipinfo.tickdelay;
|
|
|
- this->flipinfo.flipper = false;
|
|
|
-}
|
|
|
-
|
|
|
-void BackgroundRingClass::tick_flip() {
|
|
|
- if(micros() - this->flipinfo.starttime > this->flipinfo.ms) {
|
|
|
- // we're done
|
|
|
- Serial.println(micros() - this->flipinfo.starttime);
|
|
|
- this->init_idle();
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if(micros() - this->flipinfo.lasttick > this->flipinfo.tickdelay) {
|
|
|
- // Time to flip
|
|
|
- this->flipinfo.lasttick = micros();
|
|
|
- unsigned long tickcolors[] = { this->flipinfo.color1, this->flipinfo.color2 };
|
|
|
- this->setRepeating(tickcolors, 2, (this->flipinfo.flipper ? 0 : 1));
|
|
|
- this->flipinfo.flipper = not(this->flipinfo.flipper);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-///////////////////////// Slowroll
|
|
|
-void BackgroundRingClass::init_slowroll(unsigned long color1, unsigned long color2, unsigned long ms, unsigned long tickdelay) {
|
|
|
- this->action = Slowroll;
|
|
|
- this->slowrollinfo.color1 = color1;
|
|
|
- this->slowrollinfo.color2 = color2;
|
|
|
- this->slowrollinfo.ms = ms * 1000;
|
|
|
- this->slowrollinfo.tickdelay = tickdelay * 1000;
|
|
|
- this->slowrollinfo.starttime = micros();
|
|
|
- this->slowrollinfo.lasttick = micros() - this->slowrollinfo.tickdelay;
|
|
|
- this->slowrollinfo.flipper = false;
|
|
|
-}
|
|
|
-
|
|
|
-void BackgroundRingClass::tick_slowroll() {
|
|
|
- if(micros() - this->slowrollinfo.starttime > this->slowrollinfo.ms) {
|
|
|
- // we're done
|
|
|
- Serial.println(micros() - this->slowrollinfo.starttime);
|
|
|
- this->init_idle();
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if(micros() - this->slowrollinfo.lasttick > this->slowrollinfo.tickdelay) {
|
|
|
- // Time to slowroll
|
|
|
- this->slowrollinfo.lasttick = micros();
|
|
|
- unsigned long tickcolors[] = { this->slowrollinfo.color1, this->slowrollinfo.color2, BLACK };
|
|
|
- this->setRepeating(tickcolors, 3, (this->slowrollinfo.flipper ? 0 : 2));
|
|
|
- this->slowrollinfo.flipper = not(this->slowrollinfo.flipper);
|
|
|
- }
|
|
|
-}
|