Проект Bluetooth матрица и куча эффектов для ws2812b-fx

DrFly

✩✩✩✩✩✩✩
16 Дек 2019
4
0
Решил добавить эффекты в проект Матрицы с проекта для ленты, попытался взять готовые скетчи с файла LED_EFFECT_FUNCTIONS.ino (лента) и вставить в effects.ino(матрица)
заменив отсутствующие переменные готовым числом (и заменив LED_COUNT на NUM_LEDS), добавив при этом номер режима, в custom.ino и в разделе разработчика GyverMatrixOS_v1.12_1.ino
Например:
C++:
void rainbow_fade() {                         //-m2-FADE ALL LEDS THROUGH HSV RAINBOW
  ihue++;
  if (ihue > 255) {
    ihue = 0;
  }
  for (int idex = 0 ; idex < LED_COUNT; idex++ ) {
    leds[idex] = CHSV(ihue, thissat, 255);
  }
  LEDS.show();
  delay(thisdelay);
}
Превратилось в
C++:
void rainbow_fade() {                         //-m2-FADE ALL LEDS THROUGH HSV RAINBOW
modeCode = 28
  ihue++;
  if (ihue > 255) {
    ihue = 0;
  }
  for (int idex = 0 ; idex < NUM_LEDS; idex++ ) {
    leds[idex] = CHSV(ihue, 255, 255);
  }
  LEDS.show();
  delay(200);
}
в custom.ino
C++:
...
case 27: clockRoutine();
      break;
case 28: rainbow_fade();
      break;
в GyverMatrixOS_v1.12_1.ino
C++:
#define IMAGE_MODE 21
#define rainbow_fade 28
И в итоге данный эффект не работает. Подскажите пожалуйста, кто добавлял эффекты к стандартной прошивке матрицы, что я сделал неправильно. Спасибо. И возможно у кого-то уже есть более расширенный набор эффектов под матрицу буду признателен если поделитесь.
 

DrFly

✩✩✩✩✩✩✩
16 Дек 2019
4
0
Добавлю, что дополнительно надо описать в проекте GyverMatrixOS_v1.12_1.ino недостающие переменные, которые есть в данном коде с проекта WS2812_FX_fixed.ino.
Но все равно не работает, а зависает. Даже когда заремаркиваю все эффекты, кроме нового добавленного.
Народ ау, есть все-таки спецы по коду для матрицы Алекса.?
 

Дмитрий Николаевич

✩✩✩✩✩✩✩
29 Ноя 2019
6
2
@DrFly, никакие delay() не допускаются, все паузы делаются или новым таймером или разницей millis() прямо в теле эффекта.
Только что проверил на старой версии ОС, все работает. Не забывайте вначале эффекта делать настроечный блок. Он выполнится ОДИН раз при первом вхождении в функцию. (ihue заменил на hue, потому что было воистину влом добавлять новую переменную).
C++:
void rainbow_fade() {                         //-m2-FADE ALL LEDS THROUGH HSV RAINBOW
  if (loadingFlag) {  // Настроечный блок. Тут можно подготавливать переменные, рисовать что-то ДО старта эффекта и пр.
    modeCode = 48; // Номер режима, замените на свой
    loadingFlag = false;
    FastLED.clear();  // очистить
  }
  hue++;
  if (hue > 255) {
    hue = 0;
  }
  for (int idex = 0 ; idex < NUM_LEDS; idex++ ) {
    leds[idex] = CHSV(hue, 255, 255);
  }
}
в custom.ino, пока экспериментируете, лучше делать ТАК. И не ждать пока до вашего эффекта дойдёт очередь.
C++:
void customModes() {
  switch (thisMode) {
    
    case 0: rainbow_fade(); //lavaNoise();  //Cool  
      break;
    case 1: ...
 
Последнее редактирование:
  • Лойс +1
Реакции: DrFly