При нажатии на кнопку UP или Down не переключает еффект и при нажатии на статический цвет ничего не происходит. Как сделать отмену режима еффектов. В мониторе после входа в режим ефф. данные с пульта прекращают считиваться
#include <IRremote.hpp>
#include "FastLED.h"
#define RECEIVE_PIN 2
#define LEDPIN 13
#define LED_TYPE NEOPIXEL
#define NUM_LEDS 256
#define MAXBRG 250
#define MINBRG 15
#define EFFCOUNT 5
CRGB leds[NUM_LEDS];
CRGB endclr;
CRGB midclr;
int brg = 130;
bool eff = false;
int numEff = 0;
void setup() {
Serial.begin(115200);
IrReceiver.begin(RECEIVE_PIN);
FastLED.addLeds<LED_TYPE, LEDPIN>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
FastLED.setBrightness(brg);
fill_solid(leds, NUM_LEDS, CRGB::White);
FastLED.show();
}
void loop() {
if (IrReceiver.decode()) {
uint8_t gHue = 0;
FastLED.delay(1000 / 120);
EVERY_N_MILLISECONDS( 20 ) {
gHue++;
}
if (IrReceiver.decodedIRData.protocol==8) {
byte Command;
Command = IrReceiver.decodedIRData.command % 256;
IrReceiver.printIRResultShort(&Serial);
switch (Command) {
case 0x18 : {
// код для выполнения +brg
brg = brg + 5;
if (brg > MAXBRG) {
brg = MAXBRG;
}
FastLED.setBrightness(brg);
FastLED.show();
break;
}
case 0x52: {
// код для выполнения -brg
brg = brg - 5;
if (brg < MINBRG) {
brg = MINBRG;
}
FastLED.setBrightness(brg);
FastLED.show();
break;
}
case 0x19: {
// код для выполнения 0
eff = false;
fill_solid(leds, NUM_LEDS, CRGB::White);
FastLED.show();
break;
}
case 0x45: {
eff = false;
// код для выполнения 1
fill_solid(leds, NUM_LEDS, CRGB::Red);
FastLED.show();
break;
}
case 0x46: {
eff = false;
// код для выполнения 2
fill_solid(leds, NUM_LEDS, CRGB::Blue);
FastLED.show();
break;
}
case 0x47: {
eff = false;
// код для выполнения 3
fill_solid(leds, NUM_LEDS, CRGB::Green);
FastLED.show();
break;
}
case 0x44: {
eff = false;
// код для выполнения 4
fill_solid(leds, NUM_LEDS, CRGB::Yellow);
FastLED.show();
break;
}
case 0x40: {
eff = false;
// код для выполнения 5
fill_solid(leds, NUM_LEDS, CRGB::Purple);
FastLED.show();
break;
}
case 0x43: {
eff = false;
// код для выполнения 6
fill_solid(leds, NUM_LEDS, 0xBBCC00);
FastLED.show();
break;
}
case 0x7: {
eff = false;
// код для выполнения 7
fill_solid(leds, NUM_LEDS, 0x00BBCC);
FastLED.show();
break;
}
case 0x15: {
eff = false;
// код для выполнения 8
fill_solid(leds, NUM_LEDS, 0xCC00BB);
FastLED.show();
break;
}
case 0x1C: {
eff = false;
// код для выполнения 9
fill_solid(leds, NUM_LEDS, CRGB::Black);
FastLED.show();
break;
}
case 0xD: {
// код для выполнения CH- (#) rainbow
fill_rainbow( leds, NUM_LEDS, 64, 1);
FastLED.show();
break;
}
case 0x16: {
// код для выполнения CH+ (*) вход в режим еффектов
eff = true;
delay(150);
break;
}
case 0x5A: {
// код для выполнения >> (UP) номер еффекта +1
if (eff) {
numEff++;
}
if (numEff > EFFCOUNT) {
numEff = 0;
}
delay(150);
break;
}
case 0x8: {
// код для выполнения << (DOMW) номер ефекта -1
if (eff) {
numEff--;
}
if (numEff < 0) {
numEff = EFFCOUNT;
}
delay(150);
break;
}
default: {
// код для выполнения
}
}
}
IrReceiver.resume();
}
// Serial.println(numEff, DEC);
if (eff) {
switch (numEff) {
case 0: { //effect 0
/* fadeToBlackBy( leds, NUM_LEDS, 130);
int pos = random16(NUM_LEDS);
leds[pos] = CRGB::Green;
FastLED.show();*/
break;
}
case 1: { // effect 1
uint8_t speed = beatsin8(8, 0, 255);
endclr = blend(CRGB::Yellow, CRGB::Blue, speed);
midclr = blend(CRGB::Blue, CRGB::Yellow, speed);
fill_gradient_RGB(leds, 0, endclr, NUM_LEDS / 2, midclr);
fill_gradient_RGB(leds, NUM_LEDS / 2 + 1, midclr, NUM_LEDS, endclr);
FastLED.show();
break;
}
case 2: { // effect 2
Strobe(0xff, 0xff, 0xff, 10, 50, 1000);
break;
}
case 3: {
// effect 3
setAll(0, 0, 0);
addGlitter(60);
FastLED.show();
break;
}
case 4: { // effect 4
TwinkleRandom(20, 100, false);
break;
}
case 5: { // effect 5
SnowSparkle(0x10, 0x10, 0x10, 20, random(100,1000));
break;
}
default: {
// код для выполнения}
}
}
}
}
// Apply LED color changes
void showStrip() {
if (IrReceiver.isIdle()) {
FastLED.show();
}
}
// Set a LED color (not yet visible)
void setPixel(int Pixel, byte red, byte green, byte blue) {
// FastLED
leds[Pixel].r = red;
leds[Pixel].g = green;
leds[Pixel].b = blue;
}
// Set all LEDs to a given color and apply it (visible)
void setAll(byte red, byte green, byte blue) {
for (int i = 0; i < NUM_LEDS; i++ ) {
setPixel(i, red, green, blue);
}
showStrip();
}
//<——————————————————————OTHER FUNCTIONS————————————————————>
void TwinkleRandom(int Count, int SpeedDelay, boolean OnlyOne) {
setAll(0,0,0);
for (int i=0; i<Count; i++) {
setPixel(random(NUM_LEDS),random(0,255),random(0,255),random(0,255));
showStrip();
delay(SpeedDelay);
if(OnlyOne) {
setAll(0,0,0);
}
}
delay(SpeedDelay);
}
void SnowSparkle(byte red, byte green, byte blue, int SparkleDelay, int SpeedDelay) {
setAll(red,green,blue);
int Pixel = random(NUM_LEDS);
setPixel(Pixel,0xff,0xff,0xff);
showStrip();
delay(SparkleDelay);
setPixel(Pixel,red,green,blue);
showStrip();
delay(SpeedDelay);
}
void Strobe(byte red, byte green, byte blue, int StrobeCount, int FlashDelay, int EndPause) {
for (int j = 0; j < StrobeCount; j++) {
setAll(red, green, blue);
showStrip();
delay(FlashDelay);
setAll(0, 0, 0);
showStrip();
delay(FlashDelay);
}
}
void addGlitter( fract8 chanceOfGlitter)
{ if ( random8() < chanceOfGlitter) {
leds[ random16(NUM_LEDS) ] += CRGB::White;
}
}