ESP, IoT WiFi лампа-будильник. Обсуждение приложения от KOTEYKA

WiFi лампа-будильник. Обсуждение приложения от KOTEYKA
Обсуждение приложения для лампы от KOTEYKA

ЗДЕСЬ ОБСУЖДАЕТСЯ ТОЛЬКО РАБОТА ПРИЛОЖЕНИЯ FireLamp

Альтернатива приложению LedLamp от Gunner47
Делалось под прошивку от Gunner47, но работает и с некоторыми другими

Правила темы:
Прежде, чем задать вопрос, пройдитесь по теме, возможно ответ на него уже есть.
Поищите ответ на свой вопрос в шапке темы.
Если отвечаете кому-то, не цитируйте всё сообщение. Цитируйте только строку или часть строки, на которую будет Ваш ответ.
Если Вы считаете ваше сообщение важным и его нужно поднять в шапку, пишите мне в личку с пометкой "Сообщение в шапку"


ЕСЛИ У КОГО-ТО ЭЛЕМЕНТЫ ПРИЛОЖЕНИЯ НЕ ВМЕЩАЮТСЯ В ЭКРАН, ПРОСЬБА ОТПРАВЛЯТЬ СКРИН ЭТОГО ЭКРАНА
С УКАЗАНИЕМ РАЗРЕШЕНИЯ ВАШЕГО ТЕЛЕФОНА


ПО ВОПРОСАМ РАБОТЫ ПРОШИВОК ИДЕМ В ЭТУ ТЕМУ

ПОСЛЕДНЯЯ ВЕРСИЯ 3.2.4 от 19.09.2021 (последние изменения ниже, последние в списке)
Изменения не всегда пополняются!!!


1. Текст для бегущей строки сохраняется в памяти телефона.
2. Сетка для рисования оптимизирована под разные разрешения.
3. Реализована возможность сохранения различных конфигураций настроек (до пяти) в файлы
4. Добавлена кнопка "СБРОСИТЬ WIFI" в настройках соединения. Для тех, кто хочет перенести лампу в другую сеть, но не имеет физической кнопки или она отключена в константах.
5. Реализована функция авто обновления приложения. При запуске проверяется наличие новой версии. Если есть обновление, то предлагает обновить.
6. Исправлена выгрузка настроек эффектов в лампу и выводится информация об изменениях при авто проверке обновлений.
7. Проверка обновлений теперь только раз в сутки при первом запуске.
8. Добавлены виброотклики при переключении эффектов и при поиске лампы (если лампа найдена)
9. Меню приложения сделано боковым.
10. Эффект "Смена цвета" - сделана более медленная смена цветов
11. Исправлен вылет приложения если количество эффектов в лампе больше, чем в приложении
12. Настройки приложения и Настройки эффектов теперь в разных меню
13. Добавлен переключатель "Использовать вибро"
14. Таймер увеличен до 3-х часов
15. При выходе из режима рисования любым способом (кроме сворачивания) рисование отключается
16. Добавлена возможность изменения толщины, цвета и размера регуляторов (пока только круглых)
17. Меняются цвета прямых регуляторов
18. Добавлен интерфейс НЕОН (свечение элементов)
19. Выводит имя лампы при поиске
20. Добавлен украинский язык

Screenshot_2020-04-03-11-56-48-594_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-56-54-959_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-57-01-294_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-57-37-620_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-57-47-615_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-57-57-603_com.koteyka.superfirelamp.jpg
Screenshot_2020-04-03-11-58-24-170_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-58-41-901_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-59-01-773_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-59-35-546_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-59-48-707_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-59-56-989_com.koteyka.superfirelamp.jpg
НОВЫЙ (МНОГОЯЗЫЧНЫЙ) САЙТ С ПРИЛОЖЕНИЕМ И ПРОШИВКОЙ
На новом сайте в разделе ЗАГРУЗКИ все ссылки.
Старый сайт пока функционирует, но все обновления будут уже на новом

ГЕНЕРАТОР ТЕКСТОВОГО ФАЙЛА НАСТРОЕК ЭФФЕКТОВ для просмотра примера введите [email protected] и нажмите загрузить

Приложение в Google Play
 
Изменено:

Комментарии

Koteyka 🐱

★★★★★★✩
Команда форума
27 Окт 2019
935
556
54
Днепр, Украина
firelamp.pp.ua
Обсуждение приложения для лампы от KOTEYKA

ЗДЕСЬ ОБСУЖДАЕТСЯ ТОЛЬКО РАБОТА ПРИЛОЖЕНИЯ FireLamp

Альтернатива приложению LedLamp от Gunner47
Делалось под прошивку от Gunner47, но работает и с некоторыми другими

Правила темы:
Прежде, чем задать вопрос, пройдитесь по теме, возможно ответ на него уже есть.
Поищите ответ на свой вопрос в шапке темы.
Если отвечаете кому-то, не цитируйте всё сообщение. Цитируйте только строку или часть строки, на которую будет Ваш ответ.
Если Вы считаете ваше сообщение важным и его нужно поднять в шапку, пишите мне в личку с пометкой "Сообщение в шапку"


ЕСЛИ У КОГО-ТО ЭЛЕМЕНТЫ ПРИЛОЖЕНИЯ НЕ ВМЕЩАЮТСЯ В ЭКРАН, ПРОСЬБА ОТПРАВЛЯТЬ СКРИН ЭТОГО ЭКРАНА
С УКАЗАНИЕМ РАЗРЕШЕНИЯ ВАШЕГО ТЕЛЕФОНА


ПО ВОПРОСАМ РАБОТЫ ПРОШИВОК ИДЕМ В ЭТУ ТЕМУ

ПОСЛЕДНЯЯ ВЕРСИЯ 3.2.4 от 19.09.2021 (последние изменения ниже, последние в списке)
Изменения не всегда пополняются!!!


1. Текст для бегущей строки сохраняется в памяти телефона.
2. Сетка для рисования оптимизирована под разные разрешения.
3. Реализована возможность сохранения различных конфигураций настроек (до пяти) в файлы
4. Добавлена кнопка "СБРОСИТЬ WIFI" в настройках соединения. Для тех, кто хочет перенести лампу в другую сеть, но не имеет физической кнопки или она отключена в константах.
5. Реализована функция авто обновления приложения. При запуске проверяется наличие новой версии. Если есть обновление, то предлагает обновить.
6. Исправлена выгрузка настроек эффектов в лампу и выводится информация об изменениях при авто проверке обновлений.
7. Проверка обновлений теперь только раз в сутки при первом запуске.
8. Добавлены виброотклики при переключении эффектов и при поиске лампы (если лампа найдена)
9. Меню приложения сделано боковым.
10. Эффект "Смена цвета" - сделана более медленная смена цветов
11. Исправлен вылет приложения если количество эффектов в лампе больше, чем в приложении
12. Настройки приложения и Настройки эффектов теперь в разных меню
13. Добавлен переключатель "Использовать вибро"
14. Таймер увеличен до 3-х часов
15. При выходе из режима рисования любым способом (кроме сворачивания) рисование отключается
16. Добавлена возможность изменения толщины, цвета и размера регуляторов (пока только круглых)
17. Меняются цвета прямых регуляторов
18. Добавлен интерфейс НЕОН (свечение элементов)
19. Выводит имя лампы при поиске
20. Добавлен украинский язык

Screenshot_2020-04-03-11-56-48-594_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-56-54-959_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-57-01-294_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-57-37-620_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-57-47-615_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-57-57-603_com.koteyka.superfirelamp.jpg
Screenshot_2020-04-03-11-58-24-170_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-58-41-901_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-59-01-773_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-59-35-546_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-59-48-707_com.koteyka.superfirelamp.jpg Screenshot_2020-04-03-11-59-56-989_com.koteyka.superfirelamp.jpg
НОВЫЙ (МНОГОЯЗЫЧНЫЙ) САЙТ С ПРИЛОЖЕНИЕМ И ПРОШИВКОЙ
На новом сайте в разделе ЗАГРУЗКИ все ссылки.
Старый сайт пока функционирует, но все обновления будут уже на новом

ГЕНЕРАТОР ТЕКСТОВОГО ФАЙЛА НАСТРОЕК ЭФФЕКТОВ для просмотра примера введите [email protected] и нажмите загрузить

Приложение в Google Play
 
Изменено:

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@Koteyka 🐱, мои наблюдения/пожелания:
  1. Время лампы должно быть в настройках будильника. Чтобы лишний раз проверить, что она включится вовремя.
  2. Пункт "Настройки эффектов" - странное название, учитывая, что главный экран - это и есть настройки эффектов. Но как назвать - не знаю.
  3. Название "Избранное" - сохранившийся артефакт от автора прошивки. А на самом деле это "Настройки режима Цикл".
  4. Пункт "Будильники" по факту один будильник. "Будильник Рассвет".
  5. Название "Таймер" не очевидно. Хорошо бы назвать "Таймер выключения".
 

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@Сотнег, @Koteyka 🐱,

В оригинале функция XY не учитывает ориентацию матрицы и тупо напрямую работает с массивом leds.
В своих эффектах я всегда заменяю на выверенную в зависимости от типа матрицы другую, вернее серию функций, для обеспечения безопасности, скорости и корректности.
C++:
// прямой аналог XY()
uint16_t getPixelNumber(int8_t x, int8_t y)
{
#if (MATRIX_DIRECTION & 0x01)
  if (!(THIS_Y & 0x01) || MATRIX_TYPE) // если чётная строка
    return (uint16_t)THIS_Y * _SEGLENGTH + THIS_X;
  else // если нечётная строка
    return (uint16_t)THIS_Y * _SEGLENGTH + _THIS_X;
#else
  if (!(THIS_X & 0x01) || MATRIX_TYPE) // если чётная строка
    return (uint16_t)THIS_X * _SEGLENGTH + THIS_Y;
  else // если нечётная строка
    return (uint16_t)THIS_X * _SEGLENGTH + _THIS_Y;
#endif
    
// **** Draw Pixel by point - аналог leds[XY()] = color
void drawPixel_fast(int8_t x, int8_t y, CRGB color, CRGB *LEDarray = leds)
{
  LEDarray[getPixelNumber(x, y)] = color;
}

// - безопасный аналог leds[XY()] = color
void drawPixel(int8_t x, int8_t y, CRGB color, CRGB *LEDarray = leds)
{
  if (x < 0 || x > (int8_t)(WIDTH_d) || y < 0 || y > (int8_t)(HEIGHT_d))
    return;
  drawPixel_fast(x, y, color, LEDarray);
}
Но и саму функцию XY оставил для обеспечения работоспособности встроенных функций FastLED.
 

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@Сотнег, я еще раз повторюсь, что XY тогда не будет корректно работать при размытии blur2d(), так как эта функция заточена только на горизонтальное положение матрицы
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@Palpalych, думаю, ты ошибаешься.
blur2d() как раз и использует XY(),
поэтому очень важно исправить именно эту функцию,
а не создавать свои копии с исправлениями, оставляя оригинал с ошибкой.
 

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@kDn, Не на эффекте, а при повернутой матрице

@Сотнег,

C++:
// Forward declaration of the function "XY" which must be provided by
// the application for use in two-dimensional filter functions.
uint16_t XY( uint8_t, uint8_t);// __attribute__ ((weak));


// blur1d: one-dimensional blur filter. Spreads light to 2 line neighbors.
// blur2d: two-dimensional blur filter. Spreads light to 8 XY neighbors.
//
//           0 = no spread at all
//          64 = moderate spreading
//         172 = maximum smooth, even spreading
//
//         173..255 = wider spreading, but increasing flicker
//
//         Total light is NOT entirely conserved, so many repeated
//         calls to 'blur' will also result in the light fading,
//         eventually all the way to black; this is by design so that
//         it can be used to (slowly) clear the LEDs to black.
void blur1d( CRGB* leds, uint16_t numLeds, fract8 blur_amount)
{
    uint8_t keep = 255 - blur_amount;
    uint8_t seep = blur_amount >> 1;
    CRGB carryover = CRGB::Black;
    for( uint16_t i = 0; i < numLeds; i++) {
        CRGB cur = leds[i];
        CRGB part = cur;
        part.nscale8( seep);
        cur.nscale8( keep);
        cur += carryover;
        if( i) leds[i-1] += part;
        leds[i] = cur;
        carryover = part;
    }
}

void blur2d( CRGB* leds, uint8_t width, uint8_t height, fract8 blur_amount)
{
    blurRows(leds, width, height, blur_amount);
    blurColumns(leds, width, height, blur_amount);
}

// blurRows: perform a blur1d on every row of a rectangular matrix
void blurRows( CRGB* leds, uint8_t width, uint8_t height, fract8 blur_amount)
{
    for( uint8_t row = 0; row < height; row++) {
        CRGB* rowbase = leds + (row * width);
        blur1d( rowbase, width, blur_amount);
    }
}

// blurColumns: perform a blur1d on each column of a rectangular matrix
void blurColumns(CRGB* leds, uint8_t width, uint8_t height, fract8 blur_amount)
{
    // blur columns
    uint8_t keep = 255 - blur_amount;
    uint8_t seep = blur_amount >> 1;
    for( uint8_t col = 0; col < width; col++) {
        CRGB carryover = CRGB::Black;
        for( uint8_t i = 0; i < height; i++) {
            CRGB cur = leds[XY(col,i)];
            CRGB part = cur;
            part.nscale8( seep);
            cur.nscale8( keep);
            cur += carryover;
            if( i) leds[XY(col,i-1)] += part;
            leds[XY(col,i)] = cur;
            carryover = part;
        }
    }
}

... не, конечно, можно переписать blur2d() - делов то - поменять содержимое местами в blurRows и blurColumns для вертикальных матриц, но это особое извращение, считаю.
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@Palpalych, ты процитировал ровно то, о чём я говорю.
Если XY() правильно написана, тогда blur2d будет работать, как задумано.

Но я не понял, причём тут "при повёрнутой матрице".
При размытии в обоих измерениях без разницы, где у матрицы верх. Хоть снизу, хоть слева...
 
Изменено:

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@Сотнег, @kDn, тоже так думал, пока не столкнулся с проблемой размытия.

Повторюсь еще раз - blur2d() требует чтобы змейка в матрице была горизонтальной! Если она вертикальная, то функция XY для размытия должна исчислять координаты без изменений - координата x- по высоте, а y - по ширине. Для размытия полного экрана это не критично и не заметно.
А вот если скормить через XY(), где координаты подменяются в зависимости от ориентации матрицы, то blur2d() будет сбоить и заместо соседних точек будет определять противоположные для соседних столбцов(строк) - получится эффект гребенки.
Даже просто потому, что внутри себя, эта функция сначала размывает для себя строки равные WIDTH - отрезки из массива leds... а затем уже исчисляет координаты для смежных пикселей через пресловутый XY - поверните матрицу и вся эта идилия нарушится.

Затем, для нестандартных матриц при повороте нужно учитывать корректные аргументы передаваемые в blur2d()
blur2d(LEDarray, WIDTH, HEIGHT, blur_amount); - для обычных
blur2d(LEDarray, HEIGHT, WIDTH, blur_amount); - для повернутых

Да чего далеко ходить - поверните матрицу программно и включите эффект с сильным размытием, к примеру PAINTBALL или RAINBOW COMET - увидите разницу.
 

vvovvchik

✩✩✩✩✩✩✩
15 Апр 2020
15
4
Здравствуйте. Спасибо автору за приложение и всем программистам за прошивки. Обновил скачанные с сайта автора прошивку и приложение, и почему-то перестала работать бегущая строка. Проверьте пожалуйста, кто обновлял.
Ну и если можно, позвольте обратится к разработчикам. Возможно ли в следующем обновлении у эффекта "Смена цвета" уменьшить скорость? Ещё медленнее чем сейчас на "1", чтобы цвета очень плавно переливались а не пульсировали. И добавить возможность отключать вывод времени в ночное время, допустим с 23:00 и до 08:00. Если это не очень сложно, пожалуйста.
 
  • Лойс +1
Реакции: Andrewstr

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
Повторюсь еще раз - blur2d() требует чтобы змейка в матрице была горизонтальной! Если она вертикальная, то функция XY для размытия должна исчислять координаты без изменений - координата x- по высоте, а y - по ширине.
Вы путаете направление и вид подключения - последовательный и параллельный. Для направления нет никакой разницы, для вида же подключения - естественно есть. :)

Да чего далеко ходить - поверните матрицу программно и включите эффект с сильным размытием, к примеру PAINTBALL или RAINBOW COMET - увидите разницу.
Ну так у себя я разницы не вижу совершенно.
 

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@kDn,
реально скажите, какой угол подключения на Вашей матрице, и в каком углу находится начало координат?

В общем! В наших лампах должны быть прописаны 2 функции - для рисования пикселей, и для обеспечения работы встроенных функций FastLED.
У меня это сделано так. Проверил во всех положениях матрицы - работает и рисование и размытие четко на все 100%! Точка.

А этот вопрос "Почему у меня эффект такой то выглядит как-то не так-то" или "А почему у меня на некоторых эффектах перевернут огонь или текст? " ответить - "обращайтесь к разработчикам прошивок" :cool: Шютка!
 
Изменено:
  • Лойс +1
Реакции: ntime

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@kDn,
реально скажите, какой угол подключения на Вашей матрице, и в каком углу находится начало координат?
C++:
#define MATRIX_TYPE           (0U)                          // тип матрицы: 0 - зигзаг, 1 - параллельная
#define CONNECTION_ANGLE      (1U)                          // угол подключения: 0 - левый нижний, 1 - левый верхний, 2 - правый верхний, 3 - правый нижний
#define STRIP_DIRECTION       (3U)                          // направление ленты из угла: 0 - вправо, 1 - вверх, 2 - влево, 3 - вниз
 

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@kDn, Вот, у меня так же, а вот на лампе было 0 0... и тогда, как говорится влип в эту проблему....

Вот алгоритм выверенных функций (правда они у меня с оптимизированными дефайнами, если интересно - скину)
C++:
uint16_t getPixelNumber(int8_t x, int8_t y)
{
  if (!(THIS_Y & 0x01) || MATRIX_TYPE) // если чётная строка
    return (uint16_t)THIS_Y * _SEGLENGTH + THIS_X;
  else // если нечётная строка
    return (uint16_t)THIS_Y * _SEGLENGTH + _THIS_X;
}

uint16_t XY(uint8_t x, uint8_t y)
{
#if (MATRIX_DIRECTION & 0x01)
  if (!(THIS_X & 0x01) || MATRIX_TYPE) // если чётная строка
    return (uint16_t)THIS_X * _SEGLENGTH + THIS_Y;
  else // если нечётная строка
    return (uint16_t)THIS_X * _SEGLENGTH + _THIS_Y;
#else
  if (!(THIS_Y & 0x01) || MATRIX_TYPE) // если чётная строка
    return (uint16_t)THIS_Y * _SEGLENGTH + THIS_X;
  else // если нечётная строка
    return (uint16_t)THIS_Y * _SEGLENGTH + _THIS_X;
#endif
}

//До кучи, как организовано размытие
void blurScreen(fract8 blur_amount, CRGB *LEDarray = leds)
{
#if (MATRIX_DIRECTION & 0x01)
  blur2d(LEDarray, HEIGHT,  WIDTH, blur_amount);
#else
  blur2d(LEDarray, WIDTH, HEIGHT, blur_amount);
#endif
}
 

Koteyka 🐱

★★★★★★✩
Команда форума
27 Окт 2019
935
556
54
Днепр, Украина
firelamp.pp.ua
У меня у малой в спальне вообще матрица из блоков 8х8, так что мне пришлось функцию getPixelNumber переписывать под массив своего расположения
C++:
uint8_t x_y[16][16] = {
  {0,  8,  16, 24, 32, 40, 48, 56,   128, 136,  144,  152,  160,  168,  176,  184},
  {1, 9,  17, 25, 33, 41, 49, 57,   129,  137,  145,  153,  161,  169,  177,  185},
  {2, 10, 18, 26, 34, 42, 50, 58,   130,  138,  146,  154,  162,  170,  178,  186},
  {3, 11, 19, 27, 35, 43, 51, 59,   131,  139,  147,  155,  163,  171,  179,  187},
  {4, 12, 20, 28, 36, 44, 52, 60,   132,  140,  148,  156,  164,  172,  180,  188},
  {5, 13, 21, 29, 37, 45, 53, 61,   133,  141,  149,  157,  165,  173,  181,  189},
  {6, 14, 22, 30, 38, 46, 54, 62,   134,  142,  150,  158,  166,  174,  182,  190},
  {7, 15, 23, 31, 39, 47, 55, 63,   135,  143,  151,  159,  167,  175,  183,  191},

  {64, 72, 80, 88, 96, 104, 112,   120,  192,  200,  208,  216,  224,  232,  240,  248},
  {65, 73, 81, 89, 97, 105, 113,   121,  193,  201,  209,  217,  225,  233,  241,  249},
  {66, 74, 82, 90, 98, 106, 114,   122,  194,  202,  210,  218,  226,  234,  242,  250},
  {67, 75, 83, 91, 99, 107, 115,   123,  195,  203,  211,  219,  227,  235,  243,  251},
  {68, 76, 84, 92, 100, 108, 116,   124,  196,  204,  212,  220,  228,  236,  244,  252},
  {69, 77, 85, 93, 101, 109, 117,   125,  197,  205,  213,  221,  229,  237,  245,  253},
  {70, 78, 86, 94, 102, 110, 118,   126,  198,  206,  214,  222,  230,  238,  246,  254},
  {71, 79, 87, 95, 103, 111, 119,   127,  199,  207,  215,  223,  231,  239,  247,  255}
};
Это мое расположение диодов на матрице
Потом вместо
return (THIS_Y * _WIDTH + THIS_X);
прописал
return x_y[(int)y][(int)x];
 
Изменено:

Diem

✩✩✩✩✩✩✩
21 Дек 2019
10
7
Сколько на данный момент эффектов лампы в прошивке?
Может есть смысл совместить прошивку с "гонкой эффектов" от Сотнег ? Т.к. его версия всё-равно привязана к вашему приложению?
 
  • Лойс +1
Реакции: Andrewstr

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@kDn, Вот, у меня так же, а вот на лампе было 0 0... и тогда, как говорится влип в эту проблему....
Может у вас просто баг в пересчете координат? Я такие баги периодически отлавливаю и исправляю))). К примеру очередной исправил только что, благодаря вчерашнему на него указанию :) . Я же не проверяю все комбинации, мне это не особо нужно. Поэтому пока не жалуются о наличие проблем, то ничего и не перепроверяю.
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
тоже так думал, пока не столкнулся с проблемой размытия.
Так ведь ты, наверное, до сих пор не исправил код функции XY(),
поэтому у тебя размытие и сбоит.

blur2d(LEDarray, WIDTH, HEIGHT, blur_amount); - для обычных
blur2d(LEDarray, HEIGHT, WIDTH, blur_amount); - для повернутых
Этот переворот - он как раз в коде XY() GetPixelNumber и реализован должен быть.
 
Изменено:

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
Добавьте так:
uint16_t XY(uint8_t x, uint8_t y){
result getPixelNumber(x, y);
}
Поддерживаю. У меня ровно так и сделано. Вообще можно сделать наоборот - т.е. из getPixelNumber вызывать XY, но в моем случае это невозможно т.к. настройки зеркалирования MIRR_V/MIRR_H вынесены в конфигурацию UI, но если у вас используются константы, то что их XY вызывать getPixelNumber, что наоборот - без разницы, у них должен быть абсолютно одинаковый код.
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
Вообще можно сделать наоборот - т.е. из getPixelNumber вызывать XY
Я в последней прошивке избавился от использования названия getPixelNumber.
Как я понял, раньше в библиотеке FastLED оно вообще не требовалось, и авторы могли называть функцию как угодно.
Но теперь стандарт задан, и я решил ему следовать.

Из-за этого, собственно, тема и возникла. Если брать эффекты из моих прошивок, то они будут обращаться к XY(),
а gunner47 её вставил тупо для совместимости без адаптации к настройкам типов матриц, не разобравшись в нюансах.
 

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@Koteyka 🐱, Как вариант - да, только памяти отнимает, немного, но все же. По идее, если змейка в матрице совпадает с направлением змейки матриц, и число светодиодов кратно степени числа 2, то можно переставить всего лишь 2 бита )))

@kDn, Ну так же делается для народа, частных случаев не должно быть

@Сотнег, Выше говорил про частности, пару часов перепроверил и исправил. Но факт, что если пользоваться функцией XY() для размытия и одновременно для рисования у пользователей потом возникнут вопросы, "А чёй-то огонь повернут?". (пару дней как раз был вопрос в этой ветке, а никто, походу не заметил) А так эту проблему давно уже решаю... вот только по мере накопления графических функций приходится их постоянно скопом корректировать, в случае, если баг будет на ранней стадии.
Функция XY() - это должен быть полный аналог getPixelNumber.
- наверное не понимаете до сих пор, как работает blur2d... выше выжимку кода давал. И даже объяснял как она работает.

А вообще, функции появляются в прошивке из сжжиженного кода. И не всегда написанная функция будет корректно работать - нужно всегда проверять на все условия. Или накапливать уже проверенные решения, как делаю я. :cool: (к примеру, работа с 3-мерным шумом, я уже накопал в эффектах 4 реализации одной и той же. Сократил до 2, да и то оставил эти хвосты по причине занятости)
 
  • Лойс +1
Реакции: Сотнег