#1 Програмування Arduino » Потрібна допомога у виправленні коду » 2023-08-13 16:53:50

derix
відповідей: 20

Всім привіт, допоможіть виправити код, програма зупиняється на першому ефекті який було включено з пульта так і зависає, не йде подальша обробка запитів з пульта, і неможливо переключити режим. Пробував і бібліотеку 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;
  }
}

Підвал форуму