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

Koteyka 🐱

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

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

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

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


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


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

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
НОВЫЙ (МНОГОЯЗЫЧНЫЙ) САЙТ С ПРИЛОЖЕНИЕМ И ПРОШИВКОЙ
На новом сайте в разделе ЗАГРУЗКИ все ссылки.
Старый сайт пока функционирует, но все обновления будут уже на новом

ГЕНЕРАТОР ТЕКСТОВОГО ФАЙЛА НАСТРОЕК ЭФФЕКТОВ для просмотра примера введите kk@kk.kk и нажмите загрузить
 
Последнее редактирование:

Koteyka 🐱

★★★★★✩✩
Команда форума
27 Окт 2019
685
408
50
Днепр, Украина
firelamp.pp.ua
Конфетти,100,1,1,255,0
Огонь,100,1,1,255,1
Водопад,100,1,1,255,1
Радуга горизонтальная,100,1,1,50,0
Радуга вертикальная,100,1,1,50,0
Радуга диагональная,100,1,1,50,0
Смена цвета,1,10,1,1,0
Безумие 3D,1,100,100,1,0
Облака 3D,1,100,100,1,0
Лава 3D,1,100,100,1,0
Плазма 3D,1,100,100,1,0
Радуга 3D,1,100,100,1,0
Павлин 3D,1,100,100,1,0
Зебра 3D,1,100,100,1,0
Лес 3D,1,100,100,1,0
Океан 3D,1,100,100,1,0
Цвет,70,70,1,255,1
Снегопад,100,1,1,100,0
Метель,100,1,100,1,0
Звездопад,100,1,100,1,0
Матрица,100,1,1,100,0
Светлячки,100,1,1,40,0
Светлячки со шлейфом,100,1,1,100,0
Пейнтбол,100,1,1,100,0
Блуждающий кубик,100,1,1,255,0
Аквариум,255,1,1,255,1
Пульс,100,1,1,100,0
Комета,100,1,1,100,2
Белый свет,100,1,1,100,0
Прыгающие мячики,100,1,1,16,0
Бегущая строка,100,1,1,255,1

Где через запятую: Имя эффекта, макс. скорость, мин. скорость, макс. масштаб, мин. масштаб, вывод кольца градиента на масштабе (0-Нет 1-ДА 2-ДЛЯ КОМЕТЫ)
C++:
// ================ РЕЕСТР ДОСТУПНЫХ ЭФФЕКТОВ ===================
// ==== ДЛЯ ПЕРЕДАЧИ В ПРИЛОЖЕНИЯ С ПОДДЕРЖКОЙ ЭТОЙ ФУНКЦИИ =====
// формат записи:
//"Название эффекта,min_скорость,max_скорость,min_масштаб,max_масштаб,выбор_ли_цвета_это(0-нет,1-да, 2-для кометы);"
//                  это максимальная длина строчки с названием и параметрами
// Порядок эффектов можно менять на своё усмотрение, не забывая при этом менять номера в списке ВЫШЕ
// Можно добавлять новые или удалять ненужные эффекты сохраняя количество эффектов в каждой строке примерно одинаковым, т.е.
// общее количество эффектов делим на три строки
// Передаются частями из 3-х строк. !!!ЭФФЕКТ БЕГУЩАЯ СТРОКА ДОЛЖЕН БЫТЬ ПОСЛЕДНИМ ВСЕГДА!!!
// ОЧЕНЬ ВАЖНО!!! Следите за знаками при редавктировании эффектов. Не допускайте пробелов, кроме как в названии эффекта.
// В кавычках Имя эффекта и его параметры должны быть разделены запятой, а вконце точка с запятой.

const String efList_1 = String("LIST1;") +              // ПЕРВАЯ СТРОКА
String("Конфетти,100,1,1,255,0;") +                     // EFF_SPARKLES          (0U)
String("Огонь,100,1,1,255,1;") +                        // EFF_FIRE              (1U)
String("Водопад,100,1,1,255,1;") +                      // EFF_WHITTE_FIRE       (2U)
String("Радуга горизонтальная,100,1,1,50,0;") +         // EFF_RAINBOW_HOR       (3U)
String("Радуга вертикальная,100,1,1,50,0;") +           // EFF_RAINBOW_VER       (4U)
String("Радуга диагональная,100,1,1,50,0;") +           // EFF_RAINBOW_DIAG      (5U)
String("Смена цвета,1,10,1,1,0;") +                     // EFF_COLORS            (6U)
String("Безумие 3D,1,100,100,1,0;") +                   // EFF_MADNESS           (7U)
String("Облака 3D,1,100,100,1,0;") +                    // EFF_CLOUDS            (8U)
String("Лава 3D,1,100,100,1,0;") +                      // EFF_LAVA              (9U)
String(+ "\n");
const String efList_2 = String("LIST2;") +              // ВТОРАЯ СТРОКА
String("Плазма 3D,1,100,100,1,0;") +                    // EFF_PLASMA            (10U)
String("Радуга 3D,1,100,100,1,0;") +                    // EFF_RAINBOW           (11U)
String("Павлин 3D,1,100,100,1,0;") +                    // EFF_RAINBOW_STRIPE    (12U)
String("Зебра 3D,1,100,100,1,0;") +                     // EFF_ZEBRA             (13U)
String("Лес 3D,1,100,100,1,0;") +                       // EFF_FOREST            (14U)
String("Океан 3D,1,100,100,1,0;") +                     // EFF_OCEAN             (15U)
String("Цвет,70,70,1,255,1;") +                         // EFF_COLOR             (16U)
String("Снегопад,100,1,1,100,0;") +                     // EFF_SNOW              (17U)
String("Метель,100,1,100,1,0;") +                       // EFF_SNOWSTORM         (18U)
String("Звездопад,100,1,100,1,0;") +                    // EFF_STARFALL          (19U)
String(+ "\n");
const String efList_3 = String("LIST3;") +              // ТРЕТЬЯ СТРОКА
String("Матрица,100,1,1,100,0;") +                      // EFF_MATRIX            (20U)
String("Светлячки,100,1,1,40,0;") +                     // EFF_LIGHTERS          (21U)
String("Светлячки со шлейфом,100,1,1,100,0;") +         // EFF_LIGHTER_TRACES    (22U)
String("Пейнтбол,100,1,1,100,0;") +                     // EFF_PAINTBALL         (23U)
String("Блуждающий кубик,100,1,1,255,0;") +             // EFF_CUBE              (24U)
String("Аквариум,255,1,1,255,1;") +                     // EFF_AQUARIUM          (25U)
String("Пульс,100,1,1,100,0;") +                        // EFF_PULSE             (26U)
String("Комета,100,1,1,100,2;") +                       // EFF_COMET             (27U)
String("Белый свет,100,1,1,100,0;") +                   // EFF_WHITE_COLOR       (28U)
String("Прыгающие мячики,100,1,1,16,0;") +              // EFF_BALS              (29U)
String("Бегущая строка,100,1,1,255,1;") +               // EFF_PAINTBALL         (30U)
String(+ "\n");
При первой установке приложения, если у вас стоковая прошивка, не подключаясь к лампе, зайдите в настройки эффектов и включите переключатель "У меня стоковая прошивка".
После этого можно подключаться к лампе.

На главном экране находятся переключатели ВКЛ/ВЫКЛ лампы, включение циклической смены эффектов, выпадающий список эффектов, стрелки переключения эффектов вперед и назад, регуляторы яркости, скорости и масштаба.
Если вам не нравятся круглые регуляторы, на панели меню вы можете переключиться на прямые. Выбранный экран будет запомнен приложением и при следующих запусках будет открываться он.

Меню - Настройки соединения. Здесь вы можете найти лампу и подключиться к ней, если лампа уже настроена и подключена к роутеру. Так же можно ввести адрес лампы вручную. Кнопка "Проверить соединение" актуальна только в том случае, если вы ввели адрес вручную. Если лампа нашлась автоматически, то нажимать эту кнопку не обязательно.
После того, как при поиске лампы был выведен список найденных IP адресов ламп, нужно кликнуть на нужный адрес, чтобы он перенесся в поле ввода IP. После этого можно нажать "Сохранить и закрыть".
Кнопка "Сервис" переводит в меню обновления по ОТА. Большинству она не нужна.
Кнопка Сбросить WIFI необходима для переноса лампы в другую сеть. Она выполняет тоже самое, что и включить лампу с зажатой кнопкой.
Этв опция необходима тем, у кого нет физической кнопки на лампе.

Меню - Настройки эффектов. Здесь можно указать текст для бегущей строки (будет передан в лампу при нажатии кнопки назад), сохранить настройки эффектов в файл. Передать настройки эффектов из файла в лампу, Включить/выключить использование эффектов из лампы, включить/выключить использование стоковой прошивки от Gunner47.

Для сохранения настроек в файл нужно поочередно пройтись по всем эффектам, выставить необходимые значения яркости, скорости и масштаба каждому эффекту, выбрать из списка настройку, в которую вы хотите сохранить эти данные и нажать кнопку "Записать настройку".
Так можно сохранить до пяти вариантов настроек с разными значениями яркости, скорости и масштаба.
Для выгрузки настроек в лампу нужно выбрать из списка нужную настройку и нажать кнопку "Выгрузить в лампу".

ВНИМАНИЕ!!! Если вы не знаете, что делаете, то следующие действия могут нарушить работу приложения.
ПРЕДЫДУЩИЕ НАСТРОЙКИ, КОТОРЫЕ ВЫ СОХРАНЯЛИ В ФАЙЛ НИ КАК НЕ ОТНОСЯТСЯ К ТЕМ, ЧТО ОПИСЫВАЮТСЯ НИЖЕ.


Кнопку "Загрузить список эффектов из лампы" и переключатели стоковой прошивки и использования эффектов из лампы необходимо использовать только в том случае, если в константах прошивки у вас есть список эффектов (смотрите Образец списка эффектов с настройками для загрузки в приложение на вкладке constants.h). Сначала загружаем список эффектов, а затем включаем переключатель использования эффектов из лампы.
Прядок действий такой:
1. не включая эффекты в лампе загрузить список эффектов в приложение
2. включить переключатель "использовать список из лампы"
3. ПЕРЕЗАПУСТИТЬ ПРИЛОЖЕНИЕ
4. зайти в настройки избранного и выбрать другое время (не 5 сек, а 30 сек)
всё.
То же самое с использованием эффектов из файла (смотрите Образец файла эффектов с настройками для загрузки в приложение), только в этом случае выбирается файл с настройками эффектов, ранее сохраненный на телефон.

В приложении забито 4 варианта списка эффектов.
1. Для стоковой прошивки (26 эффектов на русском языке)
2. Для стоковой прошивки (26 эффектов на английском языке)
3. Для прошивки находящейся на сайте и в шапке темы (31 эффект на русском языке)
4. Для прошивки находящейся на сайте и в шапке темы (31 эффект на английском языке)

Язык приложения автоматически переключается на английский, если в настройках региона в телефоне выбран не русскоязычный регион.

Меню - Рисование. Здесь находится экран для рисования собственных узоров на лампе (особенно интересно детям). На экране матрица для рисования, имитирующая стандартную матрицу и пять кнопок.
Карандаш (следует выбирать после использования ластика), ластик и очистка всей матрицы. Так же кнопка "Назад".
Здесь всё понятно, поэтому расписывать нечего.

Меню - Будильники.
ПРОДОЛЖЕНИЕ СЛЕДУЕТ.
 
Последнее редактирование:
  • Лойс +1
Реакции: stepko

Сотнег

★★★★★★✩
15 Янв 2020
1,683
781
1. Почему в прошивке нет поддержки сохранения настроек эффектов в файл.
2. Как бегущая строка должна работать? Пятикратное нажатие кнопки?! Из приложения никак?
3. Почему "рисование" сделано не дополнительным эффектом, а через костыль?
 

Сотнег

★★★★★★✩
15 Янв 2020
1,683
781
Рекомендую сворачивать строки парсинга параметров для сообщений от приложения.
Вместо:
C-like:
    else if (!strncmp_P(inputBuffer, PSTR("LIST1"), 5))     // Список эффектов 1
    {
        ...
    }
    else if (!strncmp_P(inputBuffer, PSTR("LIST2"), 5))     // Список эффектов 2
    {
        ...
    }
    else if (!strncmp_P(inputBuffer, PSTR("LIST3"), 5))     // Список эффектов 3
    {
        ...
    }
делать:
C-like:
    else if (!strncmp_P(inputBuffer, PSTR("LIST"), 4))     // Список эффектов
    {
       memcpy(buff, &inputBuffer[4], strlen(inputBuffer));  // взять подстроку, начиная с символа 5
       switch (atoi(buff))
         {
           case 1U:{
              {
                     ...
              }
           case 2U:
              {
                     ...
              }
           case 2U:
              {
                     ...
              }
    }

То же самое для рисования
C-like:
    else if (!strncmp_P(inputBuffer, PSTR("DRW"), 3)) {
    }
    else if (!strncmp_P(inputBuffer, PSTR("CLR"), 3)) {
    }
    else if (!strncmp_P(inputBuffer, PSTR("COL"), 3)) {
    }
    else if (!strncmp_P(inputBuffer, PSTR("DRAWOFF"), 7)) {
    }
    else if (!strncmp_P(inputBuffer, PSTR("DRAWON"), 6)) {
    }
стоит сворачивать в
C-like:
    else if (!strncmp_P(inputBuffer, PSTR("DRAW"), 5))     // Команды рисования
...
           case 1U: // рисуем
              {

           case 2U: // стираем
              {

           case 2U: // выбираем цвет
              {
Парсинг и так уже выглядит довольно тормозным из-за перебора различных вариантов строк.
 
Последнее редактирование модератором:

Koteyka 🐱

★★★★★✩✩
Команда форума
27 Окт 2019
685
408
50
Днепр, Украина
firelamp.pp.ua
Почему в прошивке нет поддержки сохранения настроек эффектов в файл.
В прошивке? А куда она файл будет девать?
Из приложения никак?
Последний эффект, если в моей прошивке
Почему "рисование" сделано не дополнительным эффектом, а через костыль?
Что значит через костыль? Отдельным пунктом в меню. Рисование это не эффект

Парсинг и так уже выглядит довольно тормозным из-за перебора различных вариантов строк.
Я делал по аналогии с остальными. Писал бы с нуля, писал бы по своему.
А Case это то же самое условие если. По времени обработки, если не изменяет память, даже больше, чем у ЕСЛИ, т.к. в него уже заложено условие иначе если. Просто код компактнее.
Знаю точно, что < и > быстрее отрабатывают, чем == и !=
 

Сотнег

★★★★★★✩
15 Янв 2020
1,683
781
В прошивке? А куда она файл будет девать?
В прошивке в парсинге нет обработчика для "SET". Чтобы в приложении можно было из файла настройки взять.

Последний эффект, если в моей прошивке
Я пока не понимаю, в какой момент строка отправляется из приложения в лампу.
Кнопки "отправить" не видно на экране.

А Case это то же самое условие если. По времени обработки, если не изменяет память, даже больше, чем у ЕСЛИ, т.к. в него уже заложено условие иначе если. Просто код компактнее.
Суть в том, что если строка не содержит "LIST", то это проверяется за 1 раз,
а не за три "LIST1" -> "LIST2" -> "LIST3".
 

Koteyka 🐱

★★★★★✩✩
Команда форума
27 Окт 2019
685
408
50
Днепр, Украина
firelamp.pp.ua
В прошивке в парсинге нет обработчика для "SET"
Точно. С этим тупонул. Не перенес в твою прошивку. Исправлю.
Хотя и приложение еще не передает их
Я пока не понимаю, в какой момент строка отправляется из приложения в лампу.
При нажатии кнопки НАЗАД

то это проверяется за 1 раз,
На языке кода программирования визуально да. Но при компиляции в машинный код не так. Просто условия иначе если уже заложены в конструкцию switch case и после компиляции действуют одинаково, если не медленнее. Не помню точно медленнее ли, но ни как не быстрее
 
Последнее редактирование:

Сотнег

★★★★★★✩
15 Янв 2020
1,683
781
условия иначе если уже заложены в конструкцию switch case и после компиляции действуют одинаково, если не медленнее
До switch case выполнение кода не дойдёт, если в запросе от приложения нет "LIST".
А его там нет в 99,99% случаев.
Так что нет смысла каждый раз проверять "LIST1" -> "LIST2" -> "LIST3".

Точно. С этим тупонул. Не перенес в твою прошивку. Исправлю.
Тогда заодно избавьтесь от буфера.
А то я уже проверил - 15-17 эффектов в одну строку только влезет, а так - больше:
C-like:
    else if (!strncmp_P(inputBuffer, PSTR("LIST"), 4)) // передача списка эффектов по запросу от приложения (если поддерживается приложением)
    {
       memcpy(buff, &inputBuffer[4], strlen(inputBuffer));  // взять подстроку, состоящую последних символов строки inputBuffer, начиная с символа 5
       switch (atoi(buff))
         {
           case 1U:
           {
             Udp.write(efList_1.c_str());
             Udp.write("\0");
             break;
           }
           case 2U:
           {
             Udp.write(efList_2.c_str());
             Udp.write("\0");
             break;
           }
           case 3U:
           {
             Udp.write(efList_3.c_str());
             Udp.write("\0");
             break;
           }
         }
    }

Хотя и приложение еще не передает их
Можно мне тогда предложить более эффективный шаблон запросов?
C-like:
    else if (!strncmp_P(inputBuffer, PSTR("SETS"), 4)) // передача настроек эффектов по запросу от приложения (если поддерживается приложением)
    {
       memcpy(buff, &inputBuffer[4], strlen(inputBuffer));  //  inputBuffer, начиная с символа 5
       switch (atoi(buff))
         {
           case 1U: // SET
           {
             memcpy(buff, &inputBuffer[5], strlen(inputBuffer));   // inputBuffer, начиная с символа 6
             int eff = getValue(buff, ';', 0).toInt();
             int brg = getValue(buff, ';', 1).toInt();
             int spd = getValue(buff, ';', 2).toInt();
             int sca = getValue(buff, ';', 3).toInt();
             modes[eff].Brightness = brg;
             modes[eff].Speed = spd;
             modes[eff].Scale = sca;

             break;
           }
           case 2U: // REA
           {
             String OutString;
             char replyPacket[MAX_UDP_BUFFER_SIZE];
             for (int i = 0; i < MODE_AMOUNT; i++){
             uint8_t brightness = modes[i].Brightness;
             uint8_t speed = modes[i].Speed;
             uint8_t scale = modes[i].Scale; 
             OutString = String(i) + ";" +  String(modes[i].Brightness) + ";" + String(modes[i].Speed) + ";" + String(modes[i].Scale) + "\n";
             OutString.toCharArray(replyPacket, MAX_UDP_BUFFER_SIZE);
             Udp.write(replyPacket);

             break;
           }
         }
    }
 
  • Лойс +1
Реакции: Shaitan

Koteyka 🐱

★★★★★✩✩
Команда форума
27 Окт 2019
685
408
50
Днепр, Украина
firelamp.pp.ua
@Сотнег, У тебя ошибка в коде
C++:
case 2U: // REA
           {
             String OutString;
             char replyPacket[MAX_UDP_BUFFER_SIZE];
             for (int i = 0; i < MODE_AMOUNT; i++){
             uint8_t brightness = modes[i].Brightness;
             uint8_t speed = modes[i].Speed;
             uint8_t scale = modes[i].Scale;
             OutString = String(i) + ";" +  String(modes[i].Brightness) + ";" + String(modes[i].Speed) + ";" + String(modes[i].Scale) + "\n";
             OutString.toCharArray(replyPacket, MAX_UDP_BUFFER_SIZE);
             Udp.write(replyPacket);

             break;
           }
         }
В этом случае передача прервется после первого цикла.
Нужно break; опустить за закрывающую скобку for
 
  • Лойс +1
Реакции: Сотнег

Koteyka 🐱

★★★★★✩✩
Команда форума
27 Окт 2019
685
408
50
Днепр, Украина
firelamp.pp.ua
А вообще, чисто теоретически, есть возможность в бегущую строку автоматом вписывать текущее время из смартфона ?
Есть. А нужно? Время и так показывается
 

Сотнег

★★★★★★✩
15 Янв 2020
1,683
781
@Koteyka, я не тестировал, потому что в приложении пока не поддерживается.
Имел в виду, что точно так же, как LIST, завернуть все команды сохранения/чтения настроек в один IF.
Чтобы не парсить постоянно строку на каждый из вариантов команды.
 

EGORka

★✩✩✩✩✩✩
15 Мар 2020
76
23
Хотелось бы, не всегда есть возможность подключить лампу к роутеру. А в режиме точки доступа ни будильники не работают , ни время бегущей строкой не вывести. Так то в принципе и все время и будильники завязаны на выход в интернет. а связи с интернетом через роутер нет. Поэтому мне кажется способ брать время со смартфона был бы не лишним. Хотя я не программер, может и это невозможно.
 

Koteyka 🐱

★★★★★✩✩
Команда форума
27 Окт 2019
685
408
50
Днепр, Украина
firelamp.pp.ua
А в режиме точки доступа ни будильники не работают , ни время бегущей строкой не вывести.
Там все эти методы привязаны к библиотеке работы со временем из интервента.
То, что я передам время из приложения, вас не спасет. Нужно многое менять в прошивке
 

Palpalych

★★★★★✩✩
24 Дек 2019
674
352
Охренеть! Поставил последнюю версию. А как бегущий текст оказался на экране?
Я свою прошивку даже не адаптировал под эту фичу!

UPD: да, работает текст. Видимо давно подключил эту фичу, забыл про это, а сейчас оказалось что работает.
 
Последнее редактирование:

sanyanovik

✩✩✩✩✩✩✩
25 Мар 2019
16
0
Климовск
Добрый день. Поставил Вашу прошивку 1.5. У меня матрица 15 на 26. Эффект "Комета " Работает только 15 на 15.... Все остальные работают правильно.
 

Pavelts

★★★✩✩✩✩
4 Апр 2020
358
109
@Koteyka,

Гуд, ура будет обновляться.
Добавьте в приложение тактильную отдачу на переключение эффектов :)
 

Palpalych

★★★★★✩✩
24 Дек 2019
674
352
Подключил рисовалку к своей прошивке. + разные фишечки приделал :D
Вопрос к автору - а матрица только стандартная 16х16?

Еще момент. Телефон не засыпает когда долго лежит с активным приложением.
 

Palpalych

★★★★★✩✩
24 Дек 2019
674
352
Добрый день. Поставил Вашу прошивку 1.5. У меня матрица 15 на 26. Эффект "Комета " Работает только 15 на 15.... Все остальные работают правильно.
По комете: там голова кометы смещается вроде как бы на квадратную величину, а размытие должно происходить по всему диапазону матрицы. Хорошо, посмотрю еще на этот факт.

UPD. Я менял несколько раз этот эффект, в последней редакции вроде как по всей матрице колыхается. Мне нужно знать какая их комет? Есть радужная комета, а есть авторская от одного немца. Я за свою могу говорить.