Ви не увійшли.
Сторінки 1
Всім привіт, допоможіть виправити код, програма зупиняється на першому ефекті який було включено з пульта так і зависає, не йде подальша обробка запитів з пульта, і неможливо переключити режим. Пробував і бібліотеку IRremote.
#include <FastLED.h>
#include <NecDecoder.h>
NecDecoder ir;
#define IR_1 0xA2
#define IR_2 0x62
#define IR_3 0xE2
#define IR_4 0x22
#define IR_5 0x2
#define IR_6 0xC2
#define IR_7 0xE0
#define IR_8 0xA8
#define IR_9 0x90
#define IR_STAR 0x68
#define IR_0 0x98
#define IR_HASH 0xB0
#define IR_UP 0x18
#define IR_LEFT 0x10
#define IR_OK 0x38
#define IR_RIGHT 0x5A
#define IR_DOWN 0x4A
#define NUM_LEDS 144 // Number of LEDs in your strip
#define LED_PIN 12 // Pin to which the data line is connected
#define LED_TYPE WS2812B // LED type
#define BRIGHTNESS 255 // Maximum brightness value
#define CYCLE_DELAY 50 // Delay between cycles
#define MAX_SIMULTANEOUS_LEDS 20 // Maximum number of LEDs turned on simultaneously
CRGB leds[NUM_LEDS];
enum Modes { RANDOM_LEDS, POLICE_FLASHING, WHITE_LIGHT, STATIC };
byte mode = RANDOM_LEDS;
unsigned long int prev_code;
void setup() {
Serial.begin(9600);
attachInterrupt(0, irIsr, FALLING);
FastLED.addLeds<LED_TYPE, LED_PIN, GRB>(leds, NUM_LEDS);
FastLED.setBrightness(BRIGHTNESS);
randomSeed(analogRead(A0)); // Seed the random number generator with an analog reading
}
void irIsr() {
ir.tick();
}
void loop() {
if (ir.available()) {
// вывести команду (8 бит)
Serial.print("0x");
int command = ir.readCommand();
Serial.println(command, HEX);
handleIRCommand(command);
}
runCurrentEffect();
}
void handleIRCommand(unsigned long irValue) {
if (irValue == IR_1) {
mode = RANDOM_LEDS;
} else if (irValue == IR_2) {
mode = POLICE_FLASHING;
}
else if (irValue == IR_3) {
mode = WHITE_LIGHT;
}
}
void runCurrentEffect() {
FastLED.clear();
switch (mode) {
case RANDOM_LEDS:
randomLEDs();
break;
case POLICE_FLASHING:
policeFlashing();
break;
case WHITE_LIGHT:
whiteLightTicTac();
break;
case STATIC:
staticEffect();
break;
}
}
Сторінки 1