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

Создаем свой блок. Вопросы, помощь знатоков.
nickass
Рядовой
Сообщения: 83
Зарегистрирован: 01 май 2022, 14:13
Откуда: Киров
Имя: Николай
Поблагодарили: 3 раза

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

Сообщение nickass »

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

Все прописал, пока не знаю правильно ли. Проект состоит из двух скетчей. Пока не компилировал. Вылезла не понятная штука.
В секции декларирования ошибка Блок не корректен.
Если закомментировать if (flag), то ошибка пропадает, на фото выделил.
Помогите пожалуйста разобраться
У вас нет необходимых прав для просмотра вложений в этом сообщении.
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 12 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

nickass писал(а): 29 окт 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
Рядовой
Сообщения: 83
Зарегистрирован: 01 май 2022, 14:13
Откуда: Киров
Имя: Николай
Поблагодарили: 3 раза

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

Сообщение nickass »

Айдар, т.е. создать две функции, FOR_i(from, to) и EVERY_MS(x) ?
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 12 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

Да, вроде другие FOR нет в скетчах
Или вставляйте, что внутри фигурной скобки туда где встречается FOR_i() вместо from и to поставив значения со скетча и EVERY_MS вставив значения х, если функции не будут работать. Лучше, наверное, так сделать.
nickass
Рядовой
Сообщения: 83
Зарегистрирован: 01 май 2022, 14:13
Откуда: Киров
Имя: Николай
Поблагодарили: 3 раза

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

Сообщение nickass »

создал четыре функции. правильно ?
Мозг не хочет воспринимать код )))
У вас нет необходимых прав для просмотра вложений в этом сообщении.
ivansidor012
Лейтенант
Сообщения: 310
Зарегистрирован: 10 сен 2020, 14:37
Имя: Иван
Благодарил (а): 3 раза
Поблагодарили: 5 раз

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

Сообщение ivansidor012 »

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

if (flag) { }
nickass
Рядовой
Сообщения: 83
Зарегистрирован: 01 май 2022, 14:13
Откуда: Киров
Имя: Николай
Поблагодарили: 3 раза

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

Сообщение nickass »

ivansidor012 писал(а): 29 окт 2023, 23:44 а там разве не так должно быть?:
не прокатывает
Naladchik
Капитан
Сообщения: 908
Зарегистрирован: 04 окт 2015, 19:10
Откуда: Новосибирск
Имя: Павел
Благодарил (а): 20 раз
Поблагодарили: 22 раза

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

Сообщение Naladchik »

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

Для данного случая:
1. В секциях программы заменить макросы на нужные участки кода.
для EVERY_MS(x):
[spoiler]
например:
в коде имеется участок
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:)
[/spoiler]
Для FOR_
[spoiler]
строку
FOR_i(0, STEP_AMOUNT) {
комментируем, добавляем свою (с соответствующей подстановкой) и получаем
// FOR_i(0, STEP_AMOUNT) {
for(int i = 0; i < (STEP_AMOUNT); i++) {
для остальных FOR_ аналогично.
[/spoiler]
само собой после этого строки декларирования макросов
[spoiler]
// ==== удобные макросы ====
#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)
//===========================
[/spoiler]
нужно закомментировать
[spoiler]
/*
// ==== удобные макросы ====
#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)
//===========================
*/
[/spoiler]
или убрать из скетча.

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

P.S.
Этот скетч упаковывать в блок лучше в проф. редакторе.
Гораздо легче код разбить на отдельные участки и переносить в блок по очереди, на отдельные вкладки, проверяя на ошибки пробной поэтапной компиляцией.
Так же есть вероятность того, что если установить чекбокс "Запретить компилятору видеть #include" (проф. редактор) то и заменять в скетче ничего не нужно, но это надо проверять.
Последний раз редактировалось Naladchik 30 окт 2023, 09:42, всего редактировалось 1 раз.
Win10-64. FLProg Portable.
Изображение
nickass
Рядовой
Сообщения: 83
Зарегистрирован: 01 май 2022, 14:13
Откуда: Киров
Имя: Николай
Поблагодарили: 3 раза

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

Сообщение nickass »

Павел, спасибо. Буду пробовать. А то я понял, что столкнулся со стеной и как двигаться дальше не понимаю )))
Блоки попроще я уже делал, для радиомодулей Ebyte E22. Все работает. Немного причешу их, добавлю описание и выложу на форуме.
Решил двигаться дальше и попался мне этот камешек с Освещением лестницы ))
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 12 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

nickass писал(а): 29 окт 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
Рядовой
Сообщения: 83
Зарегистрирован: 01 май 2022, 14:13
Откуда: Киров
Имя: Николай
Поблагодарили: 3 раза

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

Сообщение nickass »

Naladchik писал(а): 30 окт 2023, 03:25 строку
FOR_i(0, STEP_AMOUNT) {
комментируем, добавляем свою (с соответствующей подстановкой) и получаем
// FOR_i(0, STEP_AMOUNT) {
for(int i = 0; i < (STEP_AMOUNT); i++) {
по аналогии сделал, но в одном месте в коде правильно ли я сделал ?
[spoiler]
// ========= залить ступеньку цветом (служебное)
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;
}[/spoiler]
Ну и прикрепляю оба скетча правленых, все ли верно ?

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

Айдар, у меня тоже ругался на эту и еще на две библиотеки пока я их не вытащил из общего архива библиотеки и не скормил по отдельности в Arduino IDE
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось nickass 31 окт 2023, 21:29, всего редактировалось 1 раз.
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 12 раз
Поблагодарили: 100 раз
Контактная информация:

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

Сообщение aidar_i »

nickass писал(а): 30 окт 2023, 18:37 у меня тоже ругался на эту и еще на две библиотеки
Я через менеджер библиотек ставил по отдельности, наверное, по этому.
Naladchik
Капитан
Сообщения: 908
Зарегистрирован: 04 окт 2015, 19:10
Откуда: Новосибирск
Имя: Павел
Благодарил (а): 20 раз
Поблагодарили: 22 раза

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

Сообщение Naladchik »

nickass писал(а): 30 окт 2023, 18:37 но в одном месте в коде правильно ли я сделал ?
косяков не вижу, компиляция Ваших файлов (с библиотеками, приложенными к проекту на странице проекта на гитхабе) проходит нормально.[spoiler]
изображение_2023-10-31_083919632.png
[/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Win10-64. FLProg Portable.
Изображение
nickass
Рядовой
Сообщения: 83
Зарегистрирован: 01 май 2022, 14:13
Откуда: Киров
Имя: Николай
Поблагодарили: 3 раза

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

Сообщение nickass »

Павел, спасибо.
Вот еще в одном месте в коде помогите пожалуйста. Куда этот кусок кода из скетча effects.ino нужно поселить в FlProg ?
Сделал две функции uint32_t getPixColor(CRGB thisPixel) и CRGB getFireColor(int val) , чувствую что не то сделал, да и компиляция не проходит.
[spoiler]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
);
}[/spoiler]
Naladchik
Капитан
Сообщения: 908
Зарегистрирован: 04 окт 2015, 19:10
Откуда: Новосибирск
Имя: Павел
Благодарил (а): 20 раз
Поблагодарили: 22 раза

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

Сообщение Naladchik »

nickass писал(а): 31 окт 2023, 21:27 чувствую что не то сделал, да и компиляция не проходит
Проект со своим блоком (пустой или с минимальной обвязкой, со своими библиотеками и исходниками, архив) прикладывайте.
Почему проект - чтоб помогающему не заморачиваться с загрузкой блока к себе в библиотеку, созданием нового проекта и т.д., заодно и понятно будет под какой контроллер пишется блок, с какими библиотеками.
Я не ясновидящий, как я могу узнать что где и как Вы сделали и какие при этом ошибки выдает компилятор.
Win10-64. FLProg Portable.
Изображение
Аватара пользователя
ViktorPetrov
Капитан
Сообщения: 807
Зарегистрирован: 09 апр 2018, 23:56
Имя: Виктор
Благодарил (а): 4 раза
Поблагодарили: 1 раз

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

Сообщение ViktorPetrov »

Я конечно дико извиняюсь,а не проще взять блоки на форуме и создать проект ,чем "ковырять" чужой скетч ? , у нас же все самодостаточно :smile38: ,на любой цвет и вкус :smile9: .
nickass
Рядовой
Сообщения: 83
Зарегистрирован: 01 май 2022, 14:13
Откуда: Киров
Имя: Николай
Поблагодарили: 3 раза

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

Сообщение nickass »

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

Отправлено спустя 45 минут 28 секунд:
Naladchik писал(а): 01 ноя 2023, 07:22 Проект со своим блоком (пустой или с минимальной обвязкой, со своими библиотеками и исходниками, архив) прикладывайте
Павел, прикладываю, все в архиве.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
ViktorPetrov
Капитан
Сообщения: 807
Зарегистрирован: 09 апр 2018, 23:56
Имя: Виктор
Благодарил (а): 4 раза
Поблагодарили: 1 раз

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

Сообщение ViktorPetrov »

nickass писал(а): 01 ноя 2023, 14:41 Но когда-то нужно и самому учиться создавать блоки, так сказать для саморазвития.
Похвально,при Всем уважение к AlexGyver у него проект не совершенен т.к. переделан с ленты RGB под адресную.Красиво написать ,тоже нужно уметь.
nickass
Рядовой
Сообщения: 83
Зарегистрирован: 01 май 2022, 14:13
Откуда: Киров
Имя: Николай
Поблагодарили: 3 раза

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

Сообщение nickass »

ViktorPetrov писал(а): 01 ноя 2023, 22:32 Красиво написать ,тоже нужно уметь.
Согласен. Но для начала нужно мозг заточить под С+++.
Я много лет сижу на FBD. CoodeSys, OwenLogic ну и FlProg. И начать кодить, это для меня туго дается. Нужно не только знать С++, но и думать на нем )))
Naladchik
Капитан
Сообщения: 908
Зарегистрирован: 04 окт 2015, 19:10
Откуда: Новосибирск
Имя: Павел
Благодарил (а): 20 раз
Поблагодарили: 22 раза

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

Сообщение Naladchik »

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей