Unfortunately, I cant post the project code because it exceeds the character limit. However Ill post the animation example code down below. In theory I understand how a FSM would work, but in practice along with the use of interrupts, I'm completely lost. Are interrupts only disabled when the leds change? If so could I use two arduinos together to receive and send the ir command to the main board and have the serial message "wait" until the interrupts are established again to change the animation?
//RGBW LOOP
#include <Adafruit_NeoPixel.h>
#define PIN 11
#define NUM_LEDS 422
// Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRBW + NEO_KHZ800);
void setup() {
strip.begin();
strip.show(); // Initialize all pixels to 'off'
}
// *** REPLACE FROM HERE ***
void loop() {
RGBLoop();
}
void RGBLoop() {
for (int j = 0; j < 4; j++ ) {
// Fade IN
for (int k = 0; k < 256; k++) {
switch (j) {
case 0: setAll(k, 0, 0, 0); break;
case 1: setAll(0, k, 0, 0); break;
case 2: setAll(0, 0, k, 0); break;
case 3: setAll(0, 0, 0, k); break;
}
showStrip();
delay(0.1);
}
// Fade OUT
for (int k = 255; k >= 0; k--) {
switch (j) {
case 0: setAll(k, 0, 0, 0); break;
case 1: setAll(0, k, 0, 0); break;
case 2: setAll(0, 0, k, 0); break;
case 3: setAll(0, 0, 0, k); break;
}
showStrip();
delay(0.1);
}
}
}
// *** REPLACE TO HERE ***
void showStrip() {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.show();
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
FastLED.show();
#endif
}
void setPixel(int Pixel, byte red, byte green, byte blue, byte white) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.setPixelColor(Pixel, strip.Color(red, green, blue, white));
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
leds[Pixel].r = red;
leds[Pixel].g = green;
leds[Pixel].b = blue;
leds[Pixel].w = white;
#endif
}
void setAll(byte red, byte green, byte blue, byte white) {
for (int i = 0; i < NUM_LEDS; i++ ) {
setPixel(i, red, green, blue, white);
}
showStrip();
}