• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Гирлянда на NodeMCU ESP8266 V3 CH340G + Jinx

OLD

New member
Доброго всем дня Собираю гирлянду на окно, использую плату NodeMCU ESP8266 V3 CH340G, светодиоды WS2812B, также использую вот этот скетч. У меня возникла проблема в том что я создав файл эффектов в прог. Jinx. Загружаю его в модуль на матрице выскакивает какой то хаос , нарисовал не подвижную полосу, по матрице плывет какая то зиг заг сетка, хотя эффект создан не подвижная полоса. Может кто подскажет где можно по рытся ткните носом, я не спец в программировании, но постараюсь разобраться.
Код:
#include <FS.h>
#include <FastLED.h>
#include <SPI.h>

#define NUM_LEDS 322              // Количество светодиодов

File fxdata;
CRGB leds[NUM_LEDS];

int led_speed = 10;               // Скоррость анимации
int led_brigh = 20;            //  Яркость светодиода //

void setup()
{
  Serial.begin(115200);
  FastLED.setBrightness(led_brigh);       //  Яркость светодиода //
  FastLED.addLeds<WS2812B/*CHIPSET*/, 4/*LED_PIN*/, GRB>(leds, NUM_LEDS); //смотрите документацию для различных светодиодных лент
  for (int y = 0 ; y < NUM_LEDS ; y++)
  {
    leds[y] = CRGB::Black;     // установите все светодиоды на черный цвет во время настройки
  }
  FastLED.show();
  //delay(1000);
  //SPIFFS.begin();
  //SPIFFS.format(); //форматирование файловой системы
  //SPIFFS.end();
}

void loop() {
  SPIFFS.begin();
  Dir dir = SPIFFS.openDir("/files");
  while (dir.next())
  {
    Serial.println(dir.fileName());
    fxdata = SPIFFS.open(dir.fileName(), "r");
    if (fxdata)
    {
      Serial.println("file open ok");
    }
    while (fxdata.available())
    {
      Sortled();
     fxdata.readBytes((char*)leds, NUM_LEDS * 3);
      FastLED.setBrightness(led_brigh);
      FastLED.show();
      delay(1000/ led_speed);        // Скоррость анимации
    }
    fxdata.close();
  }
  SPIFFS.end();
}

int Sortled ()
{
  CRGB templeds[NUM_LEDS];
  const uint8_t XYTable[] =
  {
    16,  17,  50,  51,  84,  85, 118, 119, 152, 153, 186, 187, 220, 221, 254, 255, 288, 289, 322,
    15,  18,  49,  52,  83,  86, 117, 120, 151, 154, 185, 188, 219, 222, 253, 256, 287, 290, 321,
    14,  19,  48,  53,  82,  87, 116, 121, 150, 155, 184, 189, 218, 223, 252, 257, 286, 291, 320,
    13,  20,  47,  54,  81,  88, 115, 122, 149, 156, 183, 190, 217, 224, 251, 258, 285, 292, 319,
    12,  21,  46,  55,  80,  89, 114, 123, 148, 157, 182, 191, 216, 225, 250, 259, 284, 293, 318,
    11,  22,  45,  56,  79,  90, 113, 124, 147, 158, 181, 192, 215, 226, 249, 260, 283, 294, 317,
    10,  23,  44,  57,  78,  91, 112, 125, 146, 159, 180, 193, 214, 227, 248, 261, 282, 295, 316,
     9,  24,  43,  58,  77,  92, 111, 126, 145, 160, 179, 194, 213, 228, 247, 262, 281, 296, 315,
     8,  25,  42,  59,  76,  93, 110, 127, 144, 161, 178, 195, 212, 229, 246, 263, 280, 297, 314,
     7,  26,  41,  60,  75,  94, 109, 128, 143, 162, 177, 196, 211, 230, 245, 264, 279, 298, 313,
     6,  27,  40,  61,  74,  95, 108, 129, 142, 163, 176, 197, 210, 231, 244, 265, 278, 299, 312,
     5,  28,  39,  62,  73,  96, 107, 130, 141, 164, 175, 198, 209, 232, 243, 266, 277, 300, 311,
     4,  29,  38,  63,  72,  97, 106, 131, 140, 165, 174, 199, 208, 233, 242, 267, 276, 301, 310,
     3,  30,  37,  64,  71,  98, 105, 132, 139, 166, 173, 200, 207, 234, 241, 268, 275, 302, 309,
     2,  31,  36,  65,  70,  99, 104, 133, 138, 167, 172, 201, 206, 235, 240, 269, 274, 303, 308,
     1,  32,  35,  66,  69, 100, 103, 134, 137, 168, 171, 202, 205, 236, 239, 270, 273, 304, 307,
     0,  33,  34,  67,  68, 101, 102, 135, 136, 169, 170, 203, 204, 237, 238, 271, 272, 305, 306,
  };


fxdata.readBytes((char*)templeds, NUM_LEDS * 3);
  for (int k = 0; k < NUM_LEDS; k++)
  {
    leds[XYTable[k]] = templeds[k];
  }
}
 

tobotobo

New member
Дорогой друг, поставь в разрыв провода по которому идет управляющий сигнал на матрицу , у тебя это вроде бы пин 4, резистор около 220 Ом, и проблема исчезнет, сам столкнулся с таким поведением.
 

OLD

New member
Спасибо за совет, но проблема уже решена. По своей не опытности я ставил число как и в масиве,
#define NUM_LEDS 322 // Количество светодиодов.
А в масиве счет начинается с нуля, изменил в коде на 323 и всё встало на свои места.
#define NUM_LEDS 323 // Количество светодиодов
 
Сверху Снизу