Переводим скетч с FastLED на microLED

Алексей22
Offline
Зарегистрирован: 24.02.2020

 Доброго дня. Купил 300 светодиодов, АрдуиноНАНО, картридер для микроSD под ардуинку. Спаял матрицу 17х17, собрал все в кучу загружаю скетч и что вижу. Не работает, пишет не хватает памяти. Решил попробовать перевести скетч  с FastLED на microLED  под такую ​​матрицу, АрдуиноНАНО + SD. Но где то накосячил? Эффекты, записанные в матрице. Что-то, что можно найти на время, чтобы посмотреть.




#include <FastLED.h>
#include <SPI.h>
#include <SD.h>

#define NUM_LEDS 170 // Номер светодиода
#define DATA_PIN 6 // Ваш вывод данных Arduino
#define CHIPSET WS2811 // тип вашего светодиодного чипа
#define CMD_NEW_DATA 1
#define BAUD_RATE 500000 // если используется Glediator через последовательный порт
символ без знака x = 10; // матрица х размер
символ без знака y = 17; // размер матрицы y

#define COLOR_ORDER GRB
#define BRIGHTNESS 5

int count_files = 15; // Количество файлов

Файл fxdata;
Светодиоды CRGB [NUM_LEDS];

int val;
настройка void ()
{
  FastLED.addLeds <CHIPSET, DATA_PIN, COLOR_ORDER> (светодиоды, NUM_LEDS) .setCorrection (TypicalLEDStrip);
  FastLED.setBrightness (ЯРКОСТЬ);
  
 Serial.begin (BAUD_RATE); // при использовании Glediator через usb
  Serial.begin (115200);

  для (int y = 0; y <NUM_LEDS; y ++)
  {
    светодиоды [y] = CRGB :: Black; // установить все светодиоды
  }
  FastLED.show ();

  pinMode (10, ВЫХОД); // Вывод CS / SS как выход для работы библиотеки SD.
  digitalWrite (10, HIGH); // Обходной путь для ошибки SDCard ...

  if (! SD.begin (4))
  {
    Serial.println («Сбой инициализации SDCARD!»);
    возвращение;
  }
  Serial.println («инициализация SDCard выполнена.»);

  // тестовый файл открыт
  fxdata = SD.open ("1.out"); // только для чтения
  if (fxdata)
  {
    Serial.println ("файл открыт в порядке");
    fxdata.close ();
  }
}

int serialGlediator ()
{
  while (! Serial.available ()) {}
  return Serial.read ();
}

void loop ()
{

for (val = 1; val <= count_files; val ++)
{ 


  fxdata = SD.open (String (val) + ". out"); // только для чтения
  if (fxdata)
    {
      Serial.println ("файл открыт в порядке");
    }

  while (fxdata.available ())
  {
    fxdata.readBytes ((char *) светодиоды, NUM_LEDS * 3);
    ledSort (4); // 1-4 возможно, разместить позицию вашего первого светодиода. Измените число: 1 = TL (вверху слева), 2 = TR (вверху справа), 3 = BL (внизу слева), 4 = BR (внизу справа)
     FastLED.show ();
    задержка (50); // установить скорость анимации. 20 - около 500 кбод
  }

  // закрываем файл
  fxdata.close ();
}
}
int ledSort (int modus) {// 1 = TL, 2 = TR, 3 = BL, 4 = BR, эта функция переставит массив светодиодов ;-)
    CRGB tmp [x];
    if (modus == 3 || modus == 4) {

	для (int i = 0; i <(y / 2); i ++) {
	    для (int j = 0; j <x; j ++) {
		tmp [j] = leds [i * x + j];
		leds [i * x] = leds [(y - i - 1) * x];
		светодиоды [(y - i - 1) * x] = tmp [j];
	     }
        }
     }

// if (modus == 1 || modus == 3) {
// for (int i = 1; i <y; i = i + 2) {
// for (int j = x; j> 0; j--) {
// tmp [(x - j)] = leds [i * x + j - 1];
//}
// for (int j = 0; j <x; j ++) {
// leds [i * x + j] = tmp [j];
//}
//}
//
//}


     if (modus == 2 | modus == 4) {
      для (int i = 0; i <y; i = i + 2) {
       для (int j = x; j> 0; j--) {
        tmp [(x - j)] = светодиоды [i * x + j - 1];
          }
           для (int j = 0; j <x; j ++) {
	    светодиоды [i * x + j] = tmp [j];
	    }
       }

      }
     возврат 1;
  
}

 

КОД№ 2

#define REPLACE_FASTLED // пункт 0
#define COLOR_DEBTH 2 // пункт 1

#include <microLED.h> // пункт 3
// # include <FastLED.h>
#include <SPI.h>
#include <SD.h>

#define NUM_LEDS 100 // Номер светодиода
#define DATA_PIN 6 // Ваш вывод данных Arduino
#define CHIPSET WS2811 // тип вашего светодиодного чипа
#define CMD_NEW_DATA 1
#define BAUD_RATE 500000 // если используется Glediator через последовательный порт
unsigned char x = 10; // matrix x size
unsigned char y = 10; // matrix y size

#define COLOR_ORDER GRB
#define BRIGHTNESS  5

int count_files = 15;                                        // Количество файлов

File fxdata;
//CRGB leds[NUM_LEDS];
LEDdata leds[NUM_LEDS];// пункт 4

microLED strip(leds, NUM_LEDS, DATA_PIN);  // пункт 5
#define FastLED strip   // пункт 6


int val;
void setup()
{
  //FastLED.addLeds<CHIPSET, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  FastLED.setBrightness(BRIGHTNESS);
 
 Serial.begin(BAUD_RATE); // when using Glediator via usb
  Serial.begin(115200);

  for(int y = 0 ; y < NUM_LEDS ; y++)
 {   leds[y] = BLACK; // set all leds to black during setup
  }
  FastLED.show();

  pinMode(10, OUTPUT); // CS/SS pin as output for SD library to work.
  digitalWrite(10, HIGH); // workaround for sdcard failed error...

  if (!SD.begin(4))
  {
    Serial.println("sdcard initialization failed!");
    return;
  }
  Serial.println("sdcard initialization done.");

  // test file open
  fxdata = SD.open("1.out");  // read only
  if (fxdata)
  {
    Serial.println("file open ok");
    fxdata.close();
  }
}

int serialGlediator ()
{
  while (!Serial.available()) {}
  return Serial.read();
}

void loop()
{

for(val = 1; val <= count_files; val++)
{


  fxdata = SD.open(String(val)+".out");  // read only
  if (fxdata)
    {
      Serial.println("file open ok");
    }

  while (fxdata.available())
  {
    fxdata.readBytes((char*)leds, NUM_LEDS*3);
    ledSort(4);  //1-4 possible, set your first LED's position. Change the number: 1=TL(top left),2=TR(top right),3=BL(bottom left),4=BR(bottom right)
     FastLED.show();
    delay(50); // set the speed of the animation. 20 is appx ~ 500k bauds
  }

  // close the file in order to prevent hanging IO or similar throughout time
  fxdata.close();
}
}
int ledSort (int modus) { //1=TL,2=TR,3=BL,4=BR, this function will rearrange the led array ;-)
    LEDdata tmp[x];
    if(modus == 3 || modus == 4) {

    for(int i = 0; i < (y / 2);i++) {
        for(int j = 0; j < x;j++) {
        tmp[j] = leds[i * x + j];
        leds[i * x] = leds[(y - i - 1) * x];
        leds[(y - i - 1) * x] = tmp[j];
         }
        }
     }

//     if(modus == 1 || modus == 3) {
//       for(int i = 1; i < y; i = i + 2) {
//       for(int j = x; j > 0;j--) {
// tmp [(x - j)] = leds [i * x + j - 1];
//}
// for (int j = 0; j <x; j ++) {
// leds [i * x + j] = tmp [j];
//}
//}
//
//}


     if (modus == 2 | modus == 4) {
      для (int i = 0; i <y; i = i + 2) {
       для (int j = x; j> 0; j--) {
        tmp [(x - j)] = светодиоды [i * x + j - 1];
          }
           для (int j = 0; j <x; j ++) {
        светодиоды [i * x + j] = tmp [j];
        }
       }

      }
     возврат 1;
 
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Алексей22 пишет:

Что-то, что можно найти на время, чтобы посмотреть.

У Вас не времени посмотреть собственный код? И Вы искренне считаете. что у кого-то оно есть? Вы - оптимист!

b707
Offline
Зарегистрирован: 26.05.2017

дело не в диодах, а в СД-карте. Библиотека SD.h занимает столько памяти, что на Нано вместе сней в память практически ничего не входит. Либо откажитесь от СД-карточки, либо берите ардуину побольше

Алексей22
Offline
Зарегистрирован: 24.02.2020

170 диодов еще тянет, а мне нужно под 280, по этому и хочется попробовать microLED ,можнт получится?

b707
Offline
Зарегистрирован: 26.05.2017

Алексей22 пишет:

170 диодов еще тянет, а мне нужно под 280, по этому и хочется попробовать microLED ,можнт получится?

ну пробуйте... От форума-то что хотите? - чтобы кто-то попробовал за вас? Как вы себе это представляете - кто-то возьмет 300 диодов, СД-карту, соберет вместе (кстати как - схемы нет) и будет пробовать запустить ваш код? :))) - наверно этому "кому-то" больше заняться нечем в праздник...

Соберите схему, запустите на ней код - и потом пишите, что получилось. Если хорошо, вдумчиво и подробно опишете проблемы - мож кто что и посоветует...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Алексей22 пишет:

мне нужно под 280

Фастлед заводит буфер в три байта на каждый диод. Не знаю, кто заведет меньше. 3*280 = 840. Вот и смотрите хватает у Вас памяти или нет.

Если весь буфер сразу не нужен, а диоды можно считать на лету (там допустимо до 50 микросекунд между диодами, вот за это время и считать) то проще взять свою программу и выводить на ленту то, что нужно и когда нужно вовсе без буфера.

Алексей22
Offline
Зарегистрирован: 24.02.2020

Схема и матрица собраны, и я надеялся, что  может кто посмотрит мой второй код, кто понимает в программировании и ткнет мне где я на косячил, но оказалось не туда попал, извинить, что потревожил ... 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Алексей22 пишет:

я надеялся, что  может кто посмотрит мой второй код, кто понимает в программировании и ткнет мне где я на косячил

Вы что, всерьёз полагали, что кто-то будет смотреть вот эту гугло-переведённую бредятину?

     if (modus == 2 | modus == 4) {
      для (int i = 0; i <y; i = i + 2) {
       для (int j = x; j> 0; j--) {
        tmp [(x - j)] = светодиоды [i * x + j - 1];
          }
           для (int j = 0; j <x; j ++) {
        светодиоды [i * x + j] = tmp [j];
        }
       }

      }
     возврат 1;

Вы оптимист!

sadman41
Offline
Зарегистрирован: 19.10.2016

Как минимум - там операторы по-русски написаны.

Алексей22
Offline
Зарегистрирован: 24.02.2020


#define REPLACE_FASTLED // пункт 0
#define COLOR_DEBTH 2   // пункт 1

#include  <microLED.h>   // пункт 3
//#include <FastLED.h>
#include <SPI.h>
#include <SD.h>

#define NUM_LEDS 170 // LED number
#define DATA_PIN 6    // your data arduino pin
#define CHIPSET WS2811  // your LED chip type
#define CMD_NEW_DATA 1
#define BAUD_RATE 500000  //if using Glediator via serial
unsigned char x = 10; // matrix x size
unsigned char y = 17; // matrix y size

#define COLOR_ORDER GRB
#define BRIGHTNESS  5

int count_files = 15;                                        // Количество файлов

File fxdata;
//CRGB leds[NUM_LEDS];
LEDdata leds[NUM_LEDS];// пункт 4

microLED strip(leds, NUM_LEDS, DATA_PIN);  // пункт 5
#define FastLED strip   // пункт 6


int val;
void setup()
{
  //FastLED.addLeds<CHIPSET, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  FastLED.setBrightness(BRIGHTNESS);
 
 Serial.begin(BAUD_RATE); // when using Glediator via usb
  Serial.begin(115200);

  for(int y = 0 ; y < NUM_LEDS ; y++)
 {   leds[y] = BLACK; // set all leds to black during setup
  }
  FastLED.show();

  pinMode(10, OUTPUT); // CS/SS pin as output for SD library to work.
  digitalWrite(10, HIGH); // workaround for sdcard failed error...

  if (!SD.begin(4))
  {
    Serial.println("sdcard initialization failed!");
    return;
  }
  Serial.println("sdcard initialization done.");

  // test file open
  fxdata = SD.open("1.out");  // read only
  if (fxdata)
  {
    Serial.println("file open ok");
    fxdata.close();
  }
}

int serialGlediator ()
{
  while (!Serial.available()) {}
  return Serial.read();
}

void loop()
{

for(val = 1; val <= count_files; val++)
{


  fxdata = SD.open(String(val)+".out");  // read only
  if (fxdata)
    {
      Serial.println("file open ok");
    }

  while (fxdata.available())
  {
    fxdata.readBytes((char*)leds, NUM_LEDS*3);
    ledSort(4);  //1-4 possible, set your first LED's position. Change the number: 1=TL(top left),2=TR(top right),3=BL(bottom left),4=BR(bottom right)
     FastLED.show();
    delay(50); // set the speed of the animation. 20 is appx ~ 500k bauds
     // FastLED.setBrightness(50);
  }

  // close the file in order to prevent hanging IO or similar throughout time
  fxdata.close();
}
}
int ledSort (int modus) { //1=TL,2=TR,3=BL,4=BR, this function will rearrange the led array ;-)
    LEDdata tmp[x];
    if(modus == 3 || modus == 4) {

    for(int i = 0; i < (y / 2);i++) {
        for(int j = 0; j < x;j++) {
        tmp[j] = leds[i * x + j];
        leds[i * x] = leds[(y - i - 1) * x];
        leds[(y - i - 1) * x] = tmp[j];
         }
        }
     }

//     if(modus == 1 || modus == 3) {
//       for(int i = 1; i < y; i = i + 2) {
//       for(int j = x; j > 0;j--) {
//        tmp[(x - j)] = leds[i * x + j - 1];
//          }
//           for(int j = 0; j < x;j++) {
//        leds[i * x + j] = tmp[j];
//        }
//       }
//
//      }


     if(modus == 2 | modus == 4) {
      for(int i = 0; i < y; i = i + 2) {
       for(int j = x; j > 0;j--) {
        tmp[(x - j)] = leds[i * x + j - 1];
          }
           for(int j = 0; j < x;j++) {
        leds[i * x + j] = tmp[j];
        }
       }

      }
     return 1;
 
}

 

Алексей22
Offline
Зарегистрирован: 24.02.2020

Извиняюсь  не досмотрел. А так пойдет?

b707
Offline
Зарегистрирован: 26.05.2017

Алексей22 пишет:

Извиняюсь  не досмотрел. А так пойдет?

алексей, вы совсем непонятливый? Я вам уже сказал. что таким образом никто этот код всерьез смотреть не станет. Это так не делается. Такие вещи проверяются работой на макете. И это должны сделать вы сами.

Так что собираете схему. заливаете код и смотрите - работает или нет.

Алексей22
Offline
Зарегистрирован: 24.02.2020

Компелируется без ошибок, загружается тоже без ошибок, а матрица не светится ни один диод.?

sadman41
Offline
Зарегистрирован: 19.10.2016

А на кой там делается FastLED.show(), если библиотека отключена?

И, да, с Гайверотворчеством тут, обычно, разбираются те,кто его притащил. Самостоятельно.

b707
Offline
Зарегистрирован: 26.05.2017

Алексей22 пишет:

Компелируется без ошибок

вранье

Алексей22
Offline
Зарегистрирован: 24.02.2020

Так как его убрать?

Алексей22
Offline
Зарегистрирован: 24.02.2020

5 минут назад компелировал.

b707
Offline
Зарегистрирован: 26.05.2017

Алексей22 пишет:

Так как его убрать?

ручками. Алексей. ручками... Берете и стираете все строчки. начинающиеся с FastLed.

sadman41
Offline
Зарегистрирован: 19.10.2016

Убрать и подумать, как выводит данные на страйп этот ваш микролед.

Алексей22
Offline
Зарегистрирован: 24.02.2020

Спасибо Вам ребята, что не  отказали...

sadman41
Offline
Зарегистрирован: 19.10.2016

На вопрос, заданный в первопосте, ответы даны, дуть губы бессмысленно.

b707
Offline
Зарегистрирован: 26.05.2017

Алексей22 пишет:

Спасибо Вам ребята, что не  отказали...

а чего вы ожидали? Для того, чтобы заменить одну библиотеку на другую, одной замены имен ...

#define FastLED strip  

недостаточно

Алексей22
Offline
Зарегистрирован: 24.02.2020
#define REPLACE_FASTLED // пункт 0
#define COLOR_DEBTH 2   // пункт 1

#include  <microLED.h>   // пункт 3
//#include <FastLED.h>
#include <SPI.h>
#include <SD.h>

#define NUM_LEDS 170 // LED number
#define DATA_PIN 6    // your data arduino pin
#define CHIPSET WS2811  // your LED chip type
#define CMD_NEW_DATA 1
#define BAUD_RATE 500000  //if using Glediator via serial
unsigned char x = 10; // matrix x size
unsigned char y = 17; // matrix y size

#define COLOR_ORDER GRB
#define BRIGHTNESS  5

int count_files = 15;                                        // Количество файлов

File fxdata;
//CRGB leds[NUM_LEDS];
LEDdata leds[NUM_LEDS];// пункт 4

microLED strip(leds, NUM_LEDS, DATA_PIN);  // пункт 5
                                                             //#define FastLED strip   // пункт 6


int val;
void setup()
{
  //FastLED.addLeds<CHIPSET, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
                                                             // FastLED.setBrightness(BRIGHTNESS);
 
 Serial.begin(BAUD_RATE); // when using Glediator via usb
  Serial.begin(115200);

  for(int y = 0 ; y < NUM_LEDS ; y++)
 {   leds[y] = BLACK; // set all leds to black during setup
  }
                                                               // FastLED.show();

  pinMode(10, OUTPUT); // CS/SS pin as output for SD library to work.
  digitalWrite(10, HIGH); // workaround for sdcard failed error...

  if (!SD.begin(4))
  {
    Serial.println("sdcard initialization failed!");
    return;
  }
  Serial.println("sdcard initialization done.");

  // test file open
  fxdata = SD.open("1.out");  // read only
  if (fxdata)
  {
    Serial.println("file open ok");
    fxdata.close();
  }
}

int serialGlediator ()
{
  while (!Serial.available()) {}
  return Serial.read();
}

void loop()
{

for(val = 1; val <= count_files; val++)
{


  fxdata = SD.open(String(val)+".out");  // read only
  if (fxdata)
    {
      Serial.println("file open ok");
    }

  while (fxdata.available())
  {
    fxdata.readBytes((char*)leds, NUM_LEDS*3);
    ledSort(4);  //1-4 possible, set your first LED's position. Change the number: 1=TL(top left),2=TR(top right),3=BL(bottom left),4=BR(bottom right)
                                                                        //   FastLED.show();
    delay(50); // set the speed of the animation. 20 is appx ~ 500k bauds
     // FastLED.setBrightness(50);
  }

  // close the file in order to prevent hanging IO or similar throughout time
  fxdata.close();
}
}
int ledSort (int modus) { //1=TL,2=TR,3=BL,4=BR, this function will rearrange the led array ;-)
    LEDdata tmp[x];
    if(modus == 3 || modus == 4) {

    for(int i = 0; i < (y / 2);i++) {
        for(int j = 0; j < x;j++) {
        tmp[j] = leds[i * x + j];
        leds[i * x] = leds[(y - i - 1) * x];
        leds[(y - i - 1) * x] = tmp[j];
         }
        }
     }

//     if(modus == 1 || modus == 3) {
//       for(int i = 1; i < y; i = i + 2) {
//       for(int j = x; j > 0;j--) {
//        tmp[(x - j)] = leds[i * x + j - 1];
//          }
//           for(int j = 0; j < x;j++) {
//        leds[i * x + j] = tmp[j];
//        }
//       }
//
//      }


     if(modus == 2 | modus == 4) {
      for(int i = 0; i < y; i = i + 2) {
       for(int j = x; j > 0;j--) {
        tmp[(x - j)] = leds[i * x + j - 1];
          }
           for(int j = 0; j < x;j++) {
        leds[i * x + j] = tmp[j];
        }
       }

      }
     return 1;
 
}

подправил по подсказке, результат тот же. Компелируется и грузится без ошибок но матрица не светится?

sadman41
Offline
Зарегистрирован: 19.10.2016

Примеры к микроледу смотрите, там все достаточно прозрачно - так как, видать, гайвер сдувал код с фастледа.

Алексей22
Offline
Зарегистрирован: 24.02.2020

А это где, ткните меня пожалуйста носом, постараюсь понять

b707
Offline
Зарегистрирован: 26.05.2017

Алексей22 пишет:


подправил по подсказке, результат тот же.

Мужик, ты совсем тупой? Или отметил первомай? - так пойди проспись сначала

FastLED ты удалил, молодец. А команды библиотеки microLED кто за тебя в скетч добавлять будет? - ты думаешь диоды сами светится начнут, без команды? :)

Алексей22
Offline
Зарегистрирован: 24.02.2020

Мне сейчас 61 год и про ардуино я услыхал в январе 2020г...

sadman41
Offline
Зарегистрирован: 19.10.2016

Зачем тогда сразу пытаться построить космический корабль?

b707
Offline
Зарегистрирован: 26.05.2017

sadman41 пишет:
Зачем тогда сразу пытаться построить космический корабль?

да нет в этом никакого "космического корабля". Гриш. Открыть гугль и сделать поиск по названию библиотеки... найти примеры... попытаться переделать под свой код.

Тут проблема совсем в другом - человек должен понять, что единственный путь - это разбираться в новом деле самостоятельно.  И поэтому искать примеры и переделать скетч он должен сам. А иначе и начинать нет смысла.

Алексей22
Offline
Зарегистрирован: 24.02.2020

Месяц уже гуглю, да все  натыкаюсь на таких вот как... Злые вы все, сделай людям добро и народ к тебе потянется.

sadman41
Offline
Зарегистрирован: 19.10.2016

Месяц? "arduino microled" ведёт сразу на страницу с примерами (внизу).

b707
Offline
Зарегистрирован: 26.05.2017

Алексей22 пишет:

Месяц уже гуглю, да все  натыкаюсь на таких вот как...

прямо в гугле на таких как мы натыкаетесь? :) - это что-то новенькое.

Вам надо изучать теорию и примеры кода, а не в форумах глупые вопросы задавать - тогда и не будете натыкаться на "таких как мы".

wdrakula
wdrakula аватар
Онлайн
Зарегистрирован: 15.03.2016

Алексей22 пишет:

Месяц уже гуглю, да все  натыкаюсь на таких вот как... Злые вы все, сделай людям добро и народ к тебе потянется.


Угу. Лопатой потом не отмашешься...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Алексей22 пишет:

Месяц уже гуглю, да все  натыкаюсь на таких вот как... Злые вы все, 

Так и должно быть. Это давно исследовано и описано. Вот здесь почитайте, начиная со слов "А вот если подходящих примеров нет". Это то, что Вы наблюдаете? То! Так вот, нравится нам с Вами это или нет, а жизнь устроена именно так, а не иначе. Как говорил поэт: "Жизнь такова, какова она есть, и больше - никакова".

Так что, примите жизнь такой, какая она есть, и либо изучайте вопрос сами, либо заказывайте работу специалисту. Но форуме Вам могут дать совет, но делать за Вас никто не будет.

Совет же могу повторить (уже говорил об этом в посте #5)? замена фастлед на микролед не даст Вам сколько-нибудь существенного выигрыша по памяти. Они обе хранят по три байта на пиксел. Как можно выкрутиться я писал в том же посте #5, ну или взять ардуину побольше (Мегу, например)

Алексей22 пишет:

сделай людям добро и народ к тебе потянется.

Что Вы понимаете под "добром"? Я вот Вам дважды объяснил как это надо делать, это добро? Нет? Добро - это если бы я сделал Вашу работу вместо Вас? А оно мне надо - чтобы ко мне тянулись лодыри и неумёхи?
Komandir
Offline
Зарегистрирован: 18.08.2018

ЕвгенийП в микролед есть варианты 2 и 1 байт на диод.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Komandir пишет:

в микролед есть варианты 2 и 1 байт на диод.

Я видел. В полном цвете - три, а уменьшать разрешение цветности ... считаю это глупостью, которая убивает возможности не самой дешёвой аппаратуры.

Komandir
Offline
Зарегистрирован: 18.08.2018

ну тут как обычно - либо шашечки, либо доехать

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Komandir пишет:

либо шашечки, либо доехать

Никогда не понимал этого выражения, а всякий раз когда мне его говорили, им прикрывали то, что меня в чём-то и как-то обкрадывали. Мне нужно и то, и другое.

aidar_i
Offline
Зарегистрирован: 07.10.2018

Алексей, я тоже пробую microLED. Вы пытаетесь скетчи  FastLed использовать на microLED по совету автора этой библиотеки. Ваши скетчи переведите сразу на microLED, это просто сделать, примеры смотрите.

Вот этот скетч попробуйте, аналогично свой переделайте. 

#include <SPI.h>
#include <SD.h>
#define ORDER_GRB    
#define COLOR_DEBTH 3
#include <microLED.h>
#define NUM_LEDS 300 
#define DATA_PIN 6   
#define BRIGHTNESS  50
LEDdata  leds[NUM_LEDS ];
microLED strip(leds, NUM_LEDS , DATA_PIN);
File fxdata;
void setup()
{
 strip.setBrightness(BRIGHTNESS);
pinMode(10, OUTPUT);
digitalWrite(10, HIGH);
SD.begin(4);
}
void loop()
{
fxdata = SD.open("myanim.dat");
while (fxdata.available())
{
fxdata.readBytes((char*)leds, NUM_LEDS *3);
strip.show();
delay(50);
}
fxdata.close();
}

 Вы используете программу Glediator (Jinx) там работает  COLOR_DEBTH 3, 

а   COLOR_DEBTH 2 не  работает, я менял строку fxdata.readBytes((char*)leds, NUM_LEDS *3); на fxdata.readBytes((char*)leds, NUM_LEDS *2);, тогда работает, но цвета как попало. Я думаю, что программа Glediator (Jinx) выдает цвета 24 бит, а Вы на ленту подаете 16 бит.

Нужно преобразовать 24 на 16 бит. Автор пишет "Сначала сжали цвет до 2-х байт (16 бит), цвет хранится вот таким образом: RRRRRGGG GGGBBBBB. “Запаковка” трёх байт r, g и b в два выглядит вот так:((r & 0b11111000) << 8) | ((g & 0b11111100) << 3) | ((b & 0b11111000) >> 3)".

Может гуру подскажут как преобразовать или засунуть это в скетч.

В библиотеке есть  преобразование

LEDdata mRGB(byte r, byte g, byte b) {
#if (COLOR_DEBTH == 1)
	return ( (r & 0b11000000) | ((g & 0b11100000) >> 2) | (b & 0b11100000) >> 5);
#elif (COLOR_DEBTH == 2)
	return ((r & 0b11111000) << 8) | ((g & 0b11111100) << 3) | ((b & 0b11111000) >> 3);
#elif (COLOR_DEBTH == 3)
	LEDdata bufferData;
	bufferData.r = r;
	bufferData.g = g;
	bufferData.b = b;
	return bufferData;
#endif
}

 

 

b707
Offline
Зарегистрирован: 26.05.2017

Aidar, на ленту вы в любом случае подаете 24 бита, от библиотеки это не зависит, эти диоды настроны на 24бита и другого не понимают.
Решение только в том, чтобы не хранить в программе полный цвет, а создавать на лету - но об этом в ветке сказано не раз

aidar_i
Offline
Зарегистрирован: 07.10.2018

Спасибо за разъяснение.