Так ладно. Вопрос в лоб. То что стоит после условия “if(reciver.decode(&results))”, вот то все и мешает?? Этот вопрос уже не о прерываниях.
/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/*-----------------PROGRAMM_SETTING-------------------------------------------------------------------------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/*--IR_SETTINGS---------->*/
#define IR_PIN A1
/*--STRIP_SETTINGS------->*/
#define STRIP_PIN 6
#define STRIP_LED_NUM 25
/*--STRIP_INITIAL-------->*/
#define STRIP_BIRGHT_STEP 15
#define MAX_BRIGHT_VALUE 255
#define MIN_BRIGHT_VALUE 0
/*--IR_BUTTONS_SETTINGS-->*/
#define COMMON_BRIGHTNESS_UP 16769055
#define COMMON_BRIGHTNESS_DOWN 16736415
#define LEDS_BRIGHTNESS_UP 16752735
#define LEDS_BRIGHTNESS_DOWN 16720095
#define RED_SETTING_BUTTON 16748655
#define GREEN_SETTING_BUTTON 16716015
#define BLUE_SETTING_BUTTON 16732335
#define WHITE_SETTING_BUTTON 16764975
#define RED_B 16756815
#define GREEN_B 16724175
#define BLUE_B 16740495
#define L_ORANGE_B 16754775
#define L_TURQUISE_B 16722135
#define D_VIOLET_B 16738455
#define ORANGE_B 16750695
#define TURQUISE_B 16718055
#define VIOLET_B 16734375
#define YELLLOW_B 16746615
#define D_TURQUISE_B 16713975
#define L_VIOLET_B 16730295
/*BUTTON_FOR_EFFECTS*/
#define RAINBOW_B 16762935
/*--COLORS_ARRAY----------------------------------------------->*/
uint8_t COLORS[12][3]
{
{255, 0, 0}, /* 1x1 - RED */
{0, 255, 0}, /* 1x2 - GREEN */
{0, 0, 255}, /* 1x3 - BLUE */
{255, 30, 0}, /* 2x1 - LIGHT_ORANGE */
{0, 255, 255}, /* 2x2 - IGHT_TURQUISE */
{45, 0, 35}, /* 2x3 - DARK_VIOLET */
{255, 45, 0}, /* 3x1 - ORANGE_BUTTON */
{0, 105, 135}, /* 3x2 - TURQUISE_BUTTON */
{90, 0, 75}, /* 3x3 - VIOLET_BUTTON */
{200, 90, 0}, /* 4x1 - YELLOW_BUTTON */
{0, 0, 165}, /* 4x2 - DARK_TURQUISE_BUTTON */
{255, 0, 75} /* 4x3 - LIGHT_VIOLET_BUTTON */
};
/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/*-----------------MAIN-CODE--------------------------------------------------------------------------------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/*LIBRARIES----------------------------------------------------->*/
#include "Adafruit_NeoPixel.h"
#include <IRremote.h>
/*INITIALIZATION------------------------------------------------>*/
Adafruit_NeoPixel strip(STRIP_LED_NUM, STRIP_PIN, NEO_GRB + NEO_KHZ800); /*--STRIP--->*/
IRrecv reciver(IR_PIN); /*---------------------------------------------------REMOTE-->*/
decode_results results; /*---------------------------------------------------REMOTE-->*/
/*VARIABLES----------------------------------------------------->*/
/*STRIP--------->*/
uint8_t bright, redBright, greenBright, blueBright, whiteBright;
uint8_t commonBrightCounter;
bool stripMode;
/*MODES--------->*/
/*RGBW------->*/
bool RGBW_MODES[] =
{ 0, 0, 0, 0 };
bool brightSettingMode = true;
/*COLORS----->*/
bool COLOR_MODE[] =
{
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0
};
/*EFFECTS---->*/
bool EFFECTS_MODES[] =
{ 0, 0, 0, 0 };
/*RAINBOW-->*/
uint8_t rainbowModeSwitcher;
bool rainbowLoopMode;
uint8_t rainbowTimeCounter = 0;
uint16_t rainbowTimeStep = 16;
unsigned long rainbowLastTime;
uint8_t rainbowModesCounter;
/*---------------------------SETUP-----------------------------------------------------------*/
void setup() {
/*SERIAL------------------>*/
Serial.begin(9600);
/*IR_RECIVER-------------->*/
reciver.enableIRIn();
/*STRIP------------------->*/
strip.begin();
strip.setBrightness(0);
strip.show();
}
/*---------------------------LOOP------------------------------------------------------------*/
void loop() {
if(reciver.decode(&results)){ Serial.println(results.value);
if(results.value == COMMON_BRIGHTNESS_UP or results.value == COMMON_BRIGHTNESS_DOWN){
if(results.value == COMMON_BRIGHTNESS_UP){
if(commonBrightCounter >= 0 and commonBrightCounter < 5){ commonBrightCounter++; }
else{ commonBrightCounter = 0; }
}
else{
if(commonBrightCounter <= 5 and commonBrightCounter > 0){ commonBrightCounter--; }
else{ commonBrightCounter = 5; }
}
switch(commonBrightCounter){
case 0: stripMode = false; COMMON_MODES_RESET(); break;
case 1: strip.setBrightness(51); stripMode = true; break;
case 2: strip.setBrightness(102); stripMode = true; break;
case 3: strip.setBrightness(153); stripMode = true; break;
case 4: strip.setBrightness(204); stripMode = true; break;
case 5: strip.setBrightness(255); stripMode = true; break;
}
}
if(stripMode == true){
/*BRIGHT_SETTING------------------------------------------------>*/
if(results.value == LEDS_BRIGHTNESS_UP or results.value == LEDS_BRIGHTNESS_DOWN){
if(brightSettingMode == true){
if(results.value == LEDS_BRIGHTNESS_UP){
if(bright >= 0 and bright <= MAX_BRIGHT_VALUE - STRIP_BIRGHT_STEP){
bright += STRIP_BIRGHT_STEP;
}
}
else{
if(bright <= 255 and bright >= MIN_BRIGHT_VALUE + STRIP_BIRGHT_STEP){
bright -= STRIP_BIRGHT_STEP;
}
}
}
else{
if(results.value == LEDS_BRIGHTNESS_UP){
if(rainbowTimeCounter >= 0 and rainbowTimeCounter < 7){
rainbowTimeCounter++;
}
}
else{
if(rainbowTimeCounter <= 7 and rainbowTimeCounter >= 1){
rainbowTimeCounter--;
}
}
switch(rainbowTimeCounter){
case 0: rainbowTimeStep = 16; break;
case 1: rainbowTimeStep = 32; break;
case 2: rainbowTimeStep = 64; break;
case 3: rainbowTimeStep = 128; break;
case 4: rainbowTimeStep = 256; break;
case 5: rainbowTimeStep = 512; break;
case 6: rainbowTimeStep = 1024; break;
case 7: rainbowTimeStep = 0; rainbowTimeCounter = 0; break;
}
}
Serial.println(rainbowTimeCounter);
}
/*RGBW-SETTING-------------------------------------------------->*/
switch(results.value){
case RED_SETTING_BUTTON:
COMMON_MODES_RESET(); RGBW_mode_setter(1, 0, 0, 0);
bright = redBright;
break;
case GREEN_SETTING_BUTTON:
COMMON_MODES_RESET(); RGBW_mode_setter(0, 1, 0, 0);
bright = greenBright;
break;
case BLUE_SETTING_BUTTON:
COMMON_MODES_RESET(); RGBW_mode_setter(0, 0, 1, 0);
bright = blueBright;
break;
case WHITE_SETTING_BUTTON:
COMMON_MODES_RESET(); RGBW_mode_setter(0, 0, 0, 1);
bright = whiteBright;
break;
}
if(RGBW_MODES[0] or RGBW_MODES[1] or RGBW_MODES[2] or RGBW_MODES[3]){ brightSettingMode = true;
if(RGBW_MODES[0]){ redBright = bright;
strip.fill(strip.Color(redBright, greenBright, blueBright), 0, STRIP_LED_NUM);
}
else if(RGBW_MODES[1]){ greenBright = bright;
strip.fill(strip.Color(redBright, greenBright, blueBright), 0, STRIP_LED_NUM);
}
else if(RGBW_MODES[2]){ blueBright = bright;
strip.fill(strip.Color(redBright, greenBright, blueBright), 0, STRIP_LED_NUM);
}
else if(RGBW_MODES[3]){ whiteBright = bright;
strip.fill(strip.Color(whiteBright, whiteBright/1.2, whiteBright), 0, STRIP_LED_NUM);
}
}
/*COLOR-SETTING------------------------------------------------->*/
/*ROW_0-------------------------->*/
switch (results.value) {
case RED_B:
COLORS_mode_setter(!COLOR_MODE[0], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); RGBW_mode_setter(0, 0, 0, 0); EFFECTS_mode_setter(0, 0, 0, 0);
if(COLOR_MODE[0] == true){
RGBW_bright_setter(COLORS[0][0], COLORS[0][1], COLORS[0][2], 0);
stripFill(redBright, greenBright, blueBright);
}
else{ stripFill(0, 0, 0); }
break;
case GREEN_B:
COLORS_mode_setter(0, !COLOR_MODE[1], 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); RGBW_mode_setter(0, 0, 0, 0); EFFECTS_mode_setter(0, 0, 0, 0);
if(COLOR_MODE[1] == true){
RGBW_bright_setter(COLORS[1][0], COLORS[1][1], COLORS[1][2], 0);
stripFill(redBright, greenBright, blueBright);
}
else{ stripFill(0, 0, 0); }
break;
case BLUE_B:
COLORS_mode_setter(0, 0, !COLOR_MODE[2], 0, 0, 0, 0, 0, 0, 0, 0, 0); RGBW_mode_setter(0, 0, 0, 0); EFFECTS_mode_setter(0, 0, 0, 0);
if(COLOR_MODE[2] == true){
RGBW_bright_setter(COLORS[2][0], COLORS[2][1], COLORS[2][2], 0);
stripFill(redBright, greenBright, blueBright);
}
else{ stripFill(0, 0, 0); }
break;
/*ROW_1-------------------------->*/
case L_ORANGE_B:
COLORS_mode_setter(0, 0, 0, !COLOR_MODE[3], 0, 0, 0, 0, 0, 0, 0, 0); RGBW_mode_setter(0, 0, 0, 0); EFFECTS_mode_setter(0, 0, 0, 0);
if(COLOR_MODE[3] == true){
RGBW_bright_setter(COLORS[3][0], COLORS[3][1], COLORS[3][2], 0);
stripFill(redBright, greenBright, blueBright);
}
else{ stripFill(0, 0, 0); }
break;
case L_TURQUISE_B:
COLORS_mode_setter(0, 0, 0, 0, !COLOR_MODE[4], 0, 0, 0, 0, 0, 0, 0); RGBW_mode_setter(0, 0, 0, 0); EFFECTS_mode_setter(0, 0, 0, 0);
if(COLOR_MODE[4] == true){
RGBW_bright_setter(COLORS[4][0], COLORS[4][1], COLORS[4][2], 0);
stripFill(redBright, greenBright, blueBright);
}
else{ stripFill(0, 0, 0); }
break;
case D_VIOLET_B:
COLORS_mode_setter(0, 0, 0, 0, 0, !COLOR_MODE[5], 0, 0, 0, 0, 0, 0); RGBW_mode_setter(0, 0, 0, 0); EFFECTS_mode_setter(0, 0, 0, 0);
if(COLOR_MODE[5] == true){
RGBW_bright_setter(COLORS[5][0], COLORS[5][1], COLORS[5][2], 0);
stripFill(redBright, greenBright, blueBright);
}
else{ stripFill(0, 0, 0); }
break;
/*ROW_2-------------------------->*/
case ORANGE_B:
COLORS_mode_setter(0, 0, 0, 0, 0, 0, !COLOR_MODE[6], 0, 0, 0, 0, 0); RGBW_mode_setter(0, 0, 0, 0); EFFECTS_mode_setter(0, 0, 0, 0);
if(COLOR_MODE[6] == true){
RGBW_bright_setter(COLORS[6][0], COLORS[6][1], COLORS[6][2], 0);
stripFill(redBright, greenBright, blueBright);
}
else{ stripFill(0, 0, 0); }
break;
case TURQUISE_B:
COLORS_mode_setter(0, 0, 0, 0, 0, 0, 0, !COLOR_MODE[7], 0, 0, 0, 0); RGBW_mode_setter(0, 0, 0, 0); EFFECTS_mode_setter(0, 0, 0, 0);
if(COLOR_MODE[7] == true){
RGBW_bright_setter(COLORS[7][0], COLORS[7][1], COLORS[7][2], 0);
stripFill(redBright, greenBright, blueBright);
}
else{ stripFill(0, 0, 0); }
break;
case VIOLET_B:
COLORS_mode_setter(0, 0, 0, 0, 0, 0, 0, 0, !COLOR_MODE[8], 0, 0, 0); RGBW_mode_setter(0, 0, 0, 0); EFFECTS_mode_setter(0, 0, 0, 0);
if(COLOR_MODE[8] == true){
RGBW_bright_setter(COLORS[8][0], COLORS[8][1], COLORS[8][2], 0);
stripFill(redBright, greenBright, blueBright);
}
else{ stripFill(0, 0, 0); }
break;
/*ROW_3-------------------------->*/
case YELLLOW_B:
COLORS_mode_setter(0, 0, 0, 0, 0, 0, 0, 0, 0, !COLOR_MODE[9], 0, 0); RGBW_mode_setter(0, 0, 0, 0); EFFECTS_mode_setter(0, 0, 0, 0);
if(COLOR_MODE[9] == true){
RGBW_bright_setter(COLORS[9][0], COLORS[9][1], COLORS[9][2], 0);
stripFill(redBright, greenBright, blueBright);
}
else{ stripFill(0, 0, 0); }
break;
case D_TURQUISE_B:
COLORS_mode_setter(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, !COLOR_MODE[10], 0); RGBW_mode_setter(0, 0, 0, 0); EFFECTS_mode_setter(0, 0, 0, 0);
if(COLOR_MODE[10] == true){
RGBW_bright_setter(COLORS[10][0], COLORS[10][1], COLORS[10][2], 0);
stripFill(redBright, greenBright, blueBright);
}
else{ stripFill(0, 0, 0); }
break;
case L_VIOLET_B:
COLORS_mode_setter(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, !COLOR_MODE[11]); RGBW_mode_setter(0, 0, 0, 0); EFFECTS_mode_setter(0, 0, 0, 0);
if(COLOR_MODE[11] == true){
RGBW_bright_setter(COLORS[11][0], COLORS[11][1], COLORS[11][2], 0);
stripFill(redBright, greenBright, blueBright);
}
else{ stripFill(0, 0, 0); }
break;
}
/*RAINBOW_SETTING----------------------------------------------->*/
switch(results.value){
case RAINBOW_B: brightSettingMode = false;
COMMON_MODES_RESET(); EFFECTS_mode_setter(1, 0, 0, 0);
if(rainbowModeSwitcher >= 0 and rainbowModeSwitcher < 2){ rainbowModeSwitcher++; }
else { rainbowModeSwitcher = 0; }
switch(rainbowModeSwitcher){
case 0: rainbowLoopMode = false; stripFill(0, 0, 0); break;
case 1: rainbowLoopMode = true; break;
case 2: rainbowLoopMode = false; stripFill(redBright, greenBright, blueBright); break;
}
break;
}
}
else{
strip.fill(strip.Color(0, 0, 0), 0, STRIP_LED_NUM);
}
strip.show();
reciver.resume();
}
if(millis() - rainbowLastTime >= rainbowTimeStep){ rainbowLastTime = millis();
if(rainbowLoopMode == true){
if(rainbowModesCounter == 0){
if(redBright >= 0 and redBright < 255){
redBright++;
if(redBright == 255){ rainbowModesCounter = 1; }
}
}
else if(rainbowModesCounter == 1){
if(redBright <= 255 and redBright > 0){ redBright--; }
if(greenBright >= 0 and greenBright < 255){ greenBright++; }
if(redBright == 0 and greenBright == 255){ rainbowModesCounter = 2; }
}
else if(rainbowModesCounter == 2){
if(greenBright <= 255 and greenBright > 0){ greenBright--; }
if(blueBright >= 0 and blueBright < 255){ blueBright++; }
if(greenBright == 0 and blueBright == 255){ rainbowModesCounter = 3; }
}
else if(rainbowModesCounter == 3){
if(blueBright <= 255 and blueBright > 0){ blueBright--; }
if(redBright >= 0 and redBright < 255){ redBright++; }
if(blueBright == 0 and redBright == 255){ rainbowModesCounter = 1; }
}
stripFill(redBright, greenBright, blueBright);
strip.show();
}
}
}
/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/*-----------------FUNCTIONS--------------------------------------------------------------------------------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------*/
/*RGBW_FUNCTIONS-------------------------------------------------->*/
void RGBW_mode_setter(bool redMode,
bool greenMode,
bool blueMode,
bool whiteMode ){
RGBW_MODES[0] = redMode;
RGBW_MODES[1] = greenMode;
RGBW_MODES[2] = blueMode;
RGBW_MODES[3] = whiteMode;
}
void RGBW_bright_setter(uint8_t red,
uint8_t green,
uint8_t blue,
uint8_t white ){
redBright = red;
greenBright = green;
blueBright = blue;
whiteBright = white;
}
/*COLORS_FUNCTION------------------------------------------------->*/
void COLORS_mode_setter(bool col0, bool col1, bool col2,
bool col3, bool col4, bool col5,
bool col6, bool col7, bool col8,
bool col9, bool col10, bool col11 ){
COLOR_MODE[0] = col0;
COLOR_MODE[1] = col1;
COLOR_MODE[2] = col2;
COLOR_MODE[3] = col3;
COLOR_MODE[4] = col4;
COLOR_MODE[5] = col5;
COLOR_MODE[6] = col6;
COLOR_MODE[7] = col7;
COLOR_MODE[8] = col8;
COLOR_MODE[9] = col9;
COLOR_MODE[10] = col10;
COLOR_MODE[11] = col11;
}
/*EFFECTS_FUNCTION------------------------------------------------>*/
void EFFECTS_mode_setter(bool eff0,
bool eff1,
bool eff2,
bool eff3 ){
if(eff0 == false){ EFFECTS_MODES[0] = 0; rainbowLoopMode = false; rainbowModeSwitcher = 0; }
else{ EFFECTS_MODES[0] = eff0; }
EFFECTS_MODES[1] = eff1;
EFFECTS_MODES[2] = eff2;
EFFECTS_MODES[3] = eff3;
}
/*COMMON_RESET---------------------------------------------------->*/
void COMMON_MODES_RESET(){
for(uint8_t index = 0; index <= 3; index++){
RGBW_MODES[index] = 0;
}
for(uint8_t index = 0; index <= 11; index++){
COLOR_MODE[index] = 0;
}
for(uint8_t index = 0; index <= 3; index++){
EFFECTS_MODES[index] = 0;
}
}
/*OTHER_FUNCTIONS------------------------------------------------->*/
void stripFill(uint8_t red, uint8_t green, uint8_t blue){
strip.fill(strip.Color(red, green, blue), 0, STRIP_LED_NUM);
}