Помогите чайнику...
Вот код лампы на ARGB управляю через IR пульт.
Как только выполняю функцию SvetFire(); по прерыванию не могу сменить переменную comm
В чем моя ошибка ?
Вот код лампы на ARGB управляю через IR пульт.
Как только выполняю функцию SvetFire(); по прерыванию не могу сменить переменную comm
В чем моя ошибка ?
C++:
#include <NecDecoder.h>
NecDecoder ir;
volatile int comm;
#include "FastLED.h"
#include <FastLEDsupport.h> // нужна для шума
#define PIN 13
#define WIDTH 11 // Светодиодов в кольце
#define HEIGHT 27 // Колец в лампе
#define NUM_LEDS 300 //300
CRGB leds[NUM_LEDS];
byte counter;
boolean Svet = false;
int br = 128;
int HE = 40;
byte baza = 0; // изменение оттенка LED
void setup() {
Serial.begin(115200);
attachInterrupt(0, irIsr, FALLING);
pinMode(PIN, OUTPUT);
FastLED.addLeds<WS2811, PIN, RGB>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
FastLED.setBrightness(255);
for (int i = 0; i < NUM_LEDS; i++) {
leds[i].setHue(HE);
}
FastLED.setBrightness(0);
FastLED.show();
}
// Функция вызываемая прерыванием
// в прерывании вызываем tick()
void irIsr() {
ir.tick();
if (ir.available()) {
comm = ir.readCommand();
Serial.println(comm);
}
}
void loop() { // ЦИКЛ по comm
// Serial.println(comm);
switch (comm) {
case 162: // (1)
SvetRED();
break;
case 98: // (2)
if (Svet) SvetGREEN();
break;
case 226: // (3)
if (Svet) SvetBLUE();
break;
case 34: // (4)
if (Svet) SvetYELLOW();
break;
case 2: // (5)
if (Svet) SvetWHITE();
break;
case 194: // (6)
if (Svet) SvetPURPUR();
break;
case 224: // (7)
SvetFire();
break;
case 168: // (8)
SvetFire2();
break;
case 144: // (9)
if (Svet) SvetKONFETI();
break;
case 104: // (*)
SvetYaMinus();
comm = 0;
break;
case 152: // (0)
if (Svet) SvetYaAvr();
break;
case 176: // (#)
SvetYaPlus();
SvetBLINK();
comm = 0;
break;
case 24: // (up) увеличить яркость
br = FastLED.getBrightness();
br += 4;
FastLED.setBrightness(br);
FastLED.show();
comm = 0;
break;
case 16: // (left)
if (Svet) SvetColMINUS();
comm = 0;
break;
case 56: // (Ok) Включение и выключение света
if (Svet) {
SvetOFF();
} else {
HE = 64;
SvetON();
}
Svet = !Svet;
comm = 0;
break;
case 90: // (rigth)
if (Svet) SvetColPLUS();
comm = 0;
break;
case 74: // (doun) уменьшить яркость
br = FastLED.getBrightness();
br -= 4;
FastLED.setBrightness(br);
FastLED.show();
comm = 0;
break;
}
}
/////////////////////////////////////////////////////////////////////////////////////////////
void SvetFire2() {
FastLED.setBrightness(255);
for (int ii = 0; ii < NUM_LEDS; ii++) {
leds[ii] = CRGB(0, 0, 0);
//Serial.println(ii);
}
FastLED.show();
// Заполняем нижнее кольцо
for (int y = 0; y < 256; y++) {
for (int x = 0; x < 300; x++) { //WIDTH
//FastLED.setBrightness(random(40,65)); //Общая яркость
//leds[i] = CHSV(random(10, 37), random(200, 255), random(40, 250));
leds[x] = CHSV(inoise8(x * 50, y * 50, y * 50), 255, 255);
// Serial.print(x);
// Serial.print(" ");
// Serial.println(inoise8(x * 20));
if (comm != 168) break;
}
FastLED.show();
}
//Поднимаем кольца вверх
for (int i = 1; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
leds[i * WIDTH + j] = leds[(i - 1) * WIDTH + j];
leds[i * WIDTH + j] -= CRGB(8, 8, 8);
}
FastLED.show();
}
delay(50);
FastLED.show();
}
void SvetFire() {
FastLED.setBrightness(128);
// Заполняем нижнее кольцо
for (int i = 0; i < WIDTH; i++) {
//FastLED.setBrightness(random(40,65)); //Общая яркость
leds[i] = CHSV(random(10, 37), random(200, 255), random(40, 250));
}
FastLED.show();
// Поднимаем кольца вверх
for (int i = 1; i < HEIGHT; i++) {
for (int j = 0; j < WIDTH; j++) {
leds[i * WIDTH + j] = leds[(i - 1) * WIDTH + j];
leds[i * WIDTH + j] -= CRGB(8, 8, 8);
}
FastLED.show();
}
delay(50);
comm = 0;
// FastLED.show();
}
// убавить яркость до 1
void SvetYaMinus() {
for (int i = br; i >= 4; i--) {
FastLED.setBrightness(i);
FastLED.show();
}
br = 4;
}
// увеличить яркость до 255
void SvetYaPlus() {
for (int i = br; i < 256; i++) {
FastLED.setBrightness(i);
FastLED.show();
//delay(40);
}
br = 255;
}
// Яркость по средине
void SvetYaAvr() {
if (br < 128) {
for (int i = br; i < 128; i++) {
FastLED.setBrightness(i);
FastLED.show();
}
} else {
for (int i = br; i >= 128; i--) {
FastLED.setBrightness(i);
FastLED.show();
}
}
br = 128;
}
//*** ON Включение света
void SvetON() {
SvetYELLOW();
for (int i = 0; i < br; i++) {
FastLED.setBrightness(i);
FastLED.show();
//delay(50);
}
//SvetBLINK();
}
// OFF Выключение света
void SvetOFF() {
for (int i = br; i >= 0; i--) {
FastLED.setBrightness(i);
FastLED.show();
}
HE = 40;
br = 128;
baza = 0;
}
// Моргнуть яркостью
void SvetBLINK() {
FastLED.setBrightness(br - br / 4);
FastLED.show();
delay(100);
FastLED.setBrightness(br);
FastLED.show();
}
// ФОКУС
void SvetFOCUS() {
for (int ii = 0; ii < NUM_LEDS; ii++) {
fadeToBlackBy(leds, NUM_LEDS, 2);
for (int i = 0; i < 8; i++) {
leds[beatsin16(i + 7, 0, NUM_LEDS - 1)] |= CHSV(baza += 16, 200, 255);
}
}
FastLED.setBrightness(br);
FastLED.show();
//delay(20);
}
// ЦИКЛОН
void SvetCICLON() {
for (int i = 0; i < NUM_LEDS; i++) {
leds[i].nscale8(250);
}
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = CHSV(baza++, 255, 255);
FastLED.setBrightness(br);
FastLED.show();
//delay(20);
}
}
// Радуга
void SvetRADUGA() {
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = CHSV(baza + i * 5, 255, 255);
}
baza++;
FastLED.setBrightness(br);
FastLED.show();
}
// Конфети
void SvetKONFETI() {
for (int i = 0; i < NUM_LEDS; i++) {
for (int j = 0; j < 4; j++) {
fadeToBlackBy(leds, NUM_LEDS, 2);
int pos = random16(NUM_LEDS);
leds[pos] += CHSV(baza++ + random8(64), 200, 255);
FastLED.setBrightness(br);
FastLED.show();
}
}
}
// Раскраска RGB очередность
void SvetRGB() {
for (int i = 0; i < NUM_LEDS / 3; i++) {
leds[i * 3].setHue(1);
leds[i * 3 + 1].setHue(95);
leds[i * 3 + 2].setHue(160);
}
FastLED.show();
comm = 0;
}
// Красный цвет
void SvetRED() {
for (int i = 0; i < NUM_LEDS; i++) {
HE = 1;
leds[i].setHue(HE);
}
FastLED.show();
comm = 0;
}
// БЕЛЫЙ цвет
void SvetWHITE() {
for (int i = 0; i < NUM_LEDS; i++) {
leds[i] = CRGB::White;
FastLED.setBrightness(br);
}
FastLED.show();
comm = 0;
}
// Зеленый свет
void SvetGREEN() {
for (int i = 0; i < NUM_LEDS; i++) {
HE = 95;
leds[i].setHue(HE);
}
FastLED.show();
comm = 0;
}
// Синий цвет
void SvetBLUE() {
for (int i = 0; i < NUM_LEDS; i++) {
HE = 160;
leds[i].setHue(HE);
}
FastLED.show();
comm = 0;
}
// Желтый цвет
void SvetYELLOW() {
HE = 40;
for (int i = 0; i < NUM_LEDS; i++) {
leds[i].setHue(HE);
}
FastLED.show();
comm = 0;
} // Пурпурный цвет
void SvetPURPUR() {
HE = 232;
for (int i = 0; i < NUM_LEDS; i++) {
leds[i].setHue(HE);
}
FastLED.show();
comm = 0;
}
// Цвет НUЕ увеличить
void SvetColPLUS() {
br = FastLED.getBrightness();
HE += 4;
for (int i = 0; i < NUM_LEDS; i++) { // Прибавить цвет
leds[i].setHue(HE);
}
FastLED.setBrightness(br);
FastLED.show();
}
// Цвет НUЕ уменьшить
void SvetColMINUS() {
br = FastLED.getBrightness();
HE -= 4;
for (int i = 0; i < NUM_LEDS; i++) { // Убавить цвет
leds[i].setHue(HE);
}
FastLED.setBrightness(br);
FastLED.show();
}