Контроллер подсветки лестницы.

Нужна помощь

Создаем свой блок. Вопросы, помощь знатоков.
nickass
Рядовой
Сообщения: 61
Зарегистрирован: 01.05.2022{, 14:13}
Репутация: 12
Откуда: Киров
Имя: Николай

Контроллер подсветки лестницы.

#1

Сообщение nickass » 29.10.2023{, 18:27}

Решил в целях обучения создать блок на основе проекта "Подсветка лестницы"
Страница проекта (схемы, описания): https://alexgyver.ru/ledstairs/
Исходники на GitHub: https://github.com/AlexGyver/LEDstairs

Все прописал, пока не знаю правильно ли. Проект состоит из двух скетчей. Пока не компилировал. Вылезла не понятная штука.
В секции декларирования ошибка Блок не корректен.
Если закомментировать if (flag), то ошибка пропадает, на фото выделил.
Помогите пожалуйста разобраться
Вложения
effects.ino
(4.8 КБ) 10 скачиваний
LEDstairs_v1.0.ino
(6.42 КБ) 10 скачиваний
LEDstairs_v1.0.flp
(264.7 КБ) 13 скачиваний
IMG_20231029_181611.jpg

aidar_i
Полковник
Сообщения: 3130
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 677
Откуда: Уфа
Имя: Айдар
Контактная информация:

Контроллер подсветки лестницы. Вопрос

#2

Сообщение aidar_i » 29.10.2023{, 21:44}

nickass писал(а):
29.10.2023{, 18:27}
Помогите пожалуйста разобраться
Превратить в функцию
FOR_i(from, to) {
for(int i = (from); i < (to); i++)
}

EVERY_MS(x) {
static uint32_t tmr;
bool flag = millis() - tmr >= (x);
if (flag) tmr = millis();
if (flag)
}

nickass
Рядовой
Сообщения: 61
Зарегистрирован: 01.05.2022{, 14:13}
Репутация: 12
Откуда: Киров
Имя: Николай

Контроллер подсветки лестницы. Вопрос

#3

Сообщение nickass » 29.10.2023{, 22:01}

Айдар, т.е. создать две функции, FOR_i(from, to) и EVERY_MS(x) ?

aidar_i
Полковник
Сообщения: 3130
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 677
Откуда: Уфа
Имя: Айдар
Контактная информация:

Контроллер подсветки лестницы. Вопрос

#4

Сообщение aidar_i » 29.10.2023{, 22:02}

Да, вроде другие FOR нет в скетчах
Или вставляйте, что внутри фигурной скобки туда где встречается FOR_i() вместо from и to поставив значения со скетча и EVERY_MS вставив значения х, если функции не будут работать. Лучше, наверное, так сделать.

nickass
Рядовой
Сообщения: 61
Зарегистрирован: 01.05.2022{, 14:13}
Репутация: 12
Откуда: Киров
Имя: Николай

Контроллер подсветки лестницы. Вопрос

#5

Сообщение nickass » 29.10.2023{, 23:17}

создал четыре функции. правильно ?
Мозг не хочет воспринимать код )))
Вложения
IMG_20231029_231325.jpg
IMG_20231029_231332.jpg

ivansidor012
Сержант
Сообщения: 279
Зарегистрирован: 10.09.2020{, 14:37}
Репутация: 43
Имя: Иван

Контроллер подсветки лестницы. Вопрос

#6

Сообщение ivansidor012 » 29.10.2023{, 23:44}

nickass писал(а):
29.10.2023{, 18:27}
Если закомментировать if (flag)
а там разве не так должно быть?:

if (flag) { }

nickass
Рядовой
Сообщения: 61
Зарегистрирован: 01.05.2022{, 14:13}
Репутация: 12
Откуда: Киров
Имя: Николай

Контроллер подсветки лестницы. Вопрос

#7

Сообщение nickass » 29.10.2023{, 23:56}

ivansidor012 писал(а):
29.10.2023{, 23:44}
а там разве не так должно быть?:
не прокатывает

Naladchik
Капитан
Сообщения: 824
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

Контроллер подсветки лестницы. Вопрос

#8

Сообщение Naladchik » 30.10.2023{, 03:25}

nickass писал(а):
29.10.2023{, 18:27}
Решил в целях обучения создать блок...
В целях обучения лучше бы брать что попроще, ну что есть то есть.
nickass писал(а):
29.10.2023{, 18:27}
...В секции декларирования ошибка Блок не корректен...
Вы здесь столкнулись с макросами, а FLProg (Basic редактор) их не понимает. Встроенная проверка синтаксиса штука, возможно, хорошая, но иногда очень мешает.
aidar_i писал(а):
29.10.2023{, 21:44}
Превратить в функцию
В данном случае не вариант, т.к. макрос это не функция а "умная автозамена" для компилятора, т.е. один набор букв заменяется на другой с подстановкой аргументов.
Функция это программа, логически законченный набор операторов, символов и т.д. Макрос же - это, по сути, набор символов и просто так его в функцию не преобразовать.

Для данного случая:
1. В секциях программы заменить макросы на нужные участки кода.
для EVERY_MS(x):
СпойлерПоказать

например:
в коде имеется участок
EVERY_MS(50) {
changeBright -= 5;
if (changeBright < 0) break;
strip.setBrightness(changeBright);
strip.show();
}

строку с EVERY_MS комментируем и добавляем (с соответствующей подстановкой) недостающее
// EVERY_MS(50) {
//---- тело макроса, начало
static uint32_t tmr;
bool flag = millis() - tmr >= (50);
if (flag) tmr = millis();
if (flag) {
//---- тело макроса, конец
changeBright -= 5;
if (changeBright < 0) break;
strip.setBrightness(changeBright);
strip.show();
}
ну и так далее.
Внимание на скобки!
!!!Обратите внимание!!! В строке 116 данный макрос закомментирован автором, подставлять ничего не надо, лучше просто удалить.

(в принципе, вместо EVERY_MS, можно вкрутить и родные FLProg_овские таймеры, но это, если кому то будет интересно, то он пусть и делает :smile44:)
Для FOR_
СпойлерПоказать
строку
FOR_i(0, STEP_AMOUNT) {
комментируем, добавляем свою (с соответствующей подстановкой) и получаем
// FOR_i(0, STEP_AMOUNT) {
for(int i = 0; i < (STEP_AMOUNT); i++) {
для остальных FOR_ аналогично.
само собой после этого строки декларирования макросов
СпойлерПоказать
// ==== удобные макросы ====
#define FOR_i(from, to) for(int i = (from); i < (to); i++)
#define FOR_j(from, to) for(int j = (from); j < (to); j++)
#define FOR_k(from, to) for(int k = (from); k < (to); k++)
#define EVERY_MS(x) \
static uint32_t tmr;\
bool flag = millis() - tmr >= (x);\
if (flag) tmr = millis();\
if (flag)
//===========================
нужно закомментировать
СпойлерПоказать
/*
// ==== удобные макросы ====
#define FOR_i(from, to) for(int i = (from); i < (to); i++)
#define FOR_j(from, to) for(int j = (from); j < (to); j++)
#define FOR_k(from, to) for(int k = (from); k < (to); k++)
#define EVERY_MS(x) \
static uint32_t tmr;\
bool flag = millis() - tmr >= (x);\
if (flag) tmr = millis();\
if (flag)
//===========================
*/
или убрать из скетча.

2. Далее, имеется файл effects.ino.
По моему мнению ВЕСЬ код из этого файла (предварительно проделав все аналогичные замены) желательно перенести в блок, раскидав по соответствующим секциям.
В теории, можно попробовать прикрепить отредактированный файл к скетчу, прописав его как библиотеку, но не пробовал, результат мне неизвестен.
Дальше, я думаю, справитесь.
Удачи.

P.S.
Этот скетч упаковывать в блок лучше в проф. редакторе.
Гораздо легче код разбить на отдельные участки и переносить в блок по очереди, на отдельные вкладки, проверяя на ошибки пробной поэтапной компиляцией.
Так же есть вероятность того, что если установить чекбокс "Запретить компилятору видеть #include" (проф. редактор) то и заменять в скетче ничего не нужно, но это надо проверять.
Последний раз редактировалось Naladchik 30.10.2023{, 09:42}, всего редактировалось 1 раз.
Win10-64. FLProg Portable.
Изображение

nickass
Рядовой
Сообщения: 61
Зарегистрирован: 01.05.2022{, 14:13}
Репутация: 12
Откуда: Киров
Имя: Николай

Контроллер подсветки лестницы. Вопрос

#9

Сообщение nickass » 30.10.2023{, 08:01}

Павел, спасибо. Буду пробовать. А то я понял, что столкнулся со стеной и как двигаться дальше не понимаю )))
Блоки попроще я уже делал, для радиомодулей Ebyte E22. Все работает. Немного причешу их, добавлю описание и выложу на форуме.
Решил двигаться дальше и попался мне этот камешек с Освещением лестницы ))

aidar_i
Полковник
Сообщения: 3130
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 677
Откуда: Уфа
Имя: Айдар
Контактная информация:

Контроллер подсветки лестницы. Вопрос

#10

Сообщение aidar_i » 30.10.2023{, 18:32}

nickass писал(а):
29.10.2023{, 18:27}
Пока не компилировал
Пробовал компилировать оригинальный скетч , вылезают ошибки по библиотеке microLED

Код: Выделить всё

In file included from C:\Users\User\Documents\Arduino\libraries\microLED\src/microLED.h:42:0,
                 from H:\ЗАГРУЗКИ\LEDstairs_v1.0\LEDstairs_v1.0.ino:31:
C:\Users\User\Documents\Arduino\libraries\microLED\src/types.h:20:15: error: expected identifier before '=' token
     ORDER_BGR = 0b100100,
               ^
C:\Users\User\Documents\Arduino\libraries\microLED\src/types.h:20:15: error: expected '}' before '=' token
C:\Users\User\Documents\Arduino\libraries\microLED\src/types.h:20:15: error: expected unqualified-id before '=' token
C:\Users\User\Documents\Arduino\libraries\microLED\src/types.h:23:1: error: expected declaration before '}' token
 };
 ^
Если удалить эту строку, то вылезают другие ошибки.
Нужно посмотреть с какой версией библиотек автор работал.

nickass
Рядовой
Сообщения: 61
Зарегистрирован: 01.05.2022{, 14:13}
Репутация: 12
Откуда: Киров
Имя: Николай

Контроллер подсветки лестницы. Вопрос

#11

Сообщение nickass » 30.10.2023{, 18:35}

Naladchik писал(а):
30.10.2023{, 03:25}
строку
FOR_i(0, STEP_AMOUNT) {
комментируем, добавляем свою (с соответствующей подстановкой) и получаем
// FOR_i(0, STEP_AMOUNT) {
for(int i = 0; i < (STEP_AMOUNT); i++) {
по аналогии сделал, но в одном месте в коде правильно ли я сделал ?
СпойлерПоказать
// ========= залить ступеньку цветом (служебное)
void fillStep(int8_t num, LEDdata color) {
if (num >= STEP_AMOUNT || num < 0) return;
//FOR_i(num * STEP_LENGTH, num * STEP_LENGTH + STEP_LENGTH) {
for(int i = (num * STEP_LENGTH); i < (num * STEP_LENGTH + STEP_LENGTH); i++) {
leds = color;
}

Ну и прикрепляю оба скетча правленых, все ли верно ?

Отправлено спустя 2 минуты 29 секунд:
aidar_i писал(а):
30.10.2023{, 18:32}
Пробовал компилировать оригинальный скетч , вылезают ошибки по библиотеке microLED

Айдар, у меня тоже ругался на эту и еще на две библиотеки пока я их не вытащил из общего архива библиотеки и не скормил по отдельности в Arduino IDE
Вложения
LEDstairs_v1.0_для FlProg.ino
(7.26 КБ) 12 скачиваний
effects_для FlProg.ino
(5.82 КБ) 10 скачиваний
Последний раз редактировалось nickass 31.10.2023{, 21:29}, всего редактировалось 1 раз.

aidar_i
Полковник
Сообщения: 3130
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 677
Откуда: Уфа
Имя: Айдар
Контактная информация:

Контроллер подсветки лестницы. Вопрос

#12

Сообщение aidar_i » 30.10.2023{, 18:42}

nickass писал(а):
30.10.2023{, 18:37}
у меня тоже ругался на эту и еще на две библиотеки
Я через менеджер библиотек ставил по отдельности, наверное, по этому.

Naladchik
Капитан
Сообщения: 824
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

Контроллер подсветки лестницы. Вопрос

#13

Сообщение Naladchik » 31.10.2023{, 02:42}

nickass писал(а):
30.10.2023{, 18:37}
но в одном месте в коде правильно ли я сделал ?
косяков не вижу, компиляция Ваших файлов (с библиотеками, приложенными к проекту на странице проекта на гитхабе) проходит нормально.
СпойлерПоказать
изображение_2023-10-31_083919632.png
Win10-64. FLProg Portable.
Изображение

nickass
Рядовой
Сообщения: 61
Зарегистрирован: 01.05.2022{, 14:13}
Репутация: 12
Откуда: Киров
Имя: Николай

Контроллер подсветки лестницы. Вопрос

#14

Сообщение nickass » 31.10.2023{, 21:27}

Павел, спасибо.
Вот еще в одном месте в коде помогите пожалуйста. Куда этот кусок кода из скетча effects.ino нужно поселить в FlProg ?
Сделал две функции uint32_t getPixColor(CRGB thisPixel) и CRGB getFireColor(int val) , чувствую что не то сделал, да и компиляция не проходит.
СпойлерПоказать
uint32_t getPixColor(CRGB thisPixel) {
return (((uint32_t)thisPixel.r << 16) | (thisPixel.g << 8) | thisPixel.b);
}
CRGB getFireColor(int val) {
// чем больше val, тем сильнее сдвигается цвет, падает насыщеность и растёт яркость
return CHSV(
HUE_START + map(val, 0, 255, 0, HUE_GAP), // H
constrain(map(val, 0, 255, MAX_SAT, MIN_SAT), 0, 255), // S
constrain(map(val, 0, 255, MIN_BRIGHT, MAX_BRIGHT), 0, 255) // V
);
}

Naladchik
Капитан
Сообщения: 824
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

Контроллер подсветки лестницы. Вопрос

#15

Сообщение Naladchik » 01.11.2023{, 07:22}

nickass писал(а):
31.10.2023{, 21:27}
чувствую что не то сделал, да и компиляция не проходит
Проект со своим блоком (пустой или с минимальной обвязкой, со своими библиотеками и исходниками, архив) прикладывайте.
Почему проект - чтоб помогающему не заморачиваться с загрузкой блока к себе в библиотеку, созданием нового проекта и т.д., заодно и понятно будет под какой контроллер пишется блок, с какими библиотеками.
Я не ясновидящий, как я могу узнать что где и как Вы сделали и какие при этом ошибки выдает компилятор.
Win10-64. FLProg Portable.
Изображение

Аватара пользователя
ViktorPetrov
Лейтенант
Сообщения: 683
Зарегистрирован: 09.04.2018{, 23:56}
Репутация: 52
Имя: Виктор

Контроллер подсветки лестницы. Вопрос

#16

Сообщение ViktorPetrov » 01.11.2023{, 11:19}

Я конечно дико извиняюсь,а не проще взять блоки на форуме и создать проект ,чем "ковырять" чужой скетч ? , у нас же все самодостаточно :smile38: ,на любой цвет и вкус :smile9: .

nickass
Рядовой
Сообщения: 61
Зарегистрирован: 01.05.2022{, 14:13}
Репутация: 12
Откуда: Киров
Имя: Николай

Контроллер подсветки лестницы. Вопрос

#17

Сообщение nickass » 01.11.2023{, 13:56}

ViktorPetrov писал(а):
01.11.2023{, 11:19}
а не проще взять блоки на форуме и создать проект
Проще. Но когда-то нужно и самому учиться создавать блоки, так сказать для саморазвития.

Отправлено спустя 45 минут 28 секунд:
Naladchik писал(а):
01.11.2023{, 07:22}
Проект со своим блоком (пустой или с минимальной обвязкой, со своими библиотеками и исходниками, архив) прикладывайте
Павел, прикладываю, все в архиве.
Вложения
LEDstairs.zip
(3.99 МБ) 13 скачиваний

Аватара пользователя
ViktorPetrov
Лейтенант
Сообщения: 683
Зарегистрирован: 09.04.2018{, 23:56}
Репутация: 52
Имя: Виктор

Контроллер подсветки лестницы. Вопрос

#18

Сообщение ViktorPetrov » 01.11.2023{, 22:32}

nickass писал(а):
01.11.2023{, 14:41}
Но когда-то нужно и самому учиться создавать блоки, так сказать для саморазвития.
Похвально,при Всем уважение к AlexGyver у него проект не совершенен т.к. переделан с ленты RGB под адресную.Красиво написать ,тоже нужно уметь.

nickass
Рядовой
Сообщения: 61
Зарегистрирован: 01.05.2022{, 14:13}
Репутация: 12
Откуда: Киров
Имя: Николай

Контроллер подсветки лестницы. Вопрос

#19

Сообщение nickass » 01.11.2023{, 22:43}

ViktorPetrov писал(а):
01.11.2023{, 22:32}
Красиво написать ,тоже нужно уметь.
Согласен. Но для начала нужно мозг заточить под С+++.
Я много лет сижу на FBD. CoodeSys, OwenLogic ну и FlProg. И начать кодить, это для меня туго дается. Нужно не только знать С++, но и думать на нем )))

Naladchik
Капитан
Сообщения: 824
Зарегистрирован: 04.10.2015{, 19:10}
Репутация: 153
Откуда: Новосибирск
Имя: Павел

Контроллер подсветки лестницы. Вопрос

#20

Сообщение Naladchik » 02.11.2023{, 12:36}

nickass писал(а):
31.10.2023{, 21:27}
...Куда этот кусок кода из скетча effects.ino нужно поселить в FlProg...
Функцию CRGB getFireColor(int val) старый редактор блоков не пропустит, мешает встроенная проверка, в принципе можно было бы повыделываться но не вижу смысла.
Если и связываться есть смысл перевести этот скетч на проф. редактор (функцию "CRGB getFireColor" в нем проверил, проблем не возникает), заодно и нормальный инструмент освоите.
Win10-64. FLProg Portable.
Изображение

Ответить

Вернуться в «Разработка пользовательских блоков»