ARDUINO Подсветка лестницы. Обсуждение проекта

Gen@

★★★✩✩✩✩
13 Апр 2020
129
110
Сколько светодиодов со всеми улучшениями теперь поддерживается ?
Без подсветки перил примерно на 800 чипов

З.Ы. Моё персональное мнение - на Arduino Nano надо использовать ленту WS2811 с тремя светодиодами на 1 чип.
 
Изменено:

bort707

★★★★★★✩
21 Сен 2020
2,894
859
ступень = 47 чипов, маска для нее 0b01001001001001001001001001001001001001001001001
что не так может быть?
@strongest, если Вы внимательно посмотрите в код, то увидите что переменная для маски имеет размерность uint16 - соотвенно в ней не может быть больше 16 бит
А в вашей "колбасе" 0b01001001001001001001001001001001001001001001001 - сколько? 47 ?

Ребята - касается всех новичков!
Не понимаете код - не лезте менять!
Поменяли без понятия - не плачьте что не работает!
 

strongest

✩✩✩✩✩✩✩
2 Май 2020
8
4
@strongest, если Вы внимательно посмотрите в код, то увидите что переменная для маски имеет размерность uint16 - соотвенно в ней не может быть больше 16 бит
А в вашей "колбасе" 0b01001001001001001001001001001001001001001001001 - сколько? 47 ?

Ребята - касается всех новичков!
Не понимаете код - не лезте менять!
Поменяли без понятия - не плачьте что не работает!
Для того и задаю вопросы если что то не понимаю, а если б понимал то не задавал такие вопросы, логично?

П.С: спасибо за ответы.

я хотел кроме первых т.е остальные ступеньки по краям слева и справа в дежурном режиме подсвечивать каждую ступень по одном диоду с каждой стороны.
 

bort707

★★★★★★✩
21 Сен 2020
2,894
859
я хотел кроме первых т.е остальные ступеньки по краям слева и справа в дежурном режиме подсвечивать каждую ступень по одном диоду с каждой стороны.
текущий код такого не поддерживает. Хотя написать можно, пробуйте
 

strongest

✩✩✩✩✩✩✩
2 Май 2020
8
4
текущий код такого не поддерживает. Хотя написать можно, пробуйте
Там же на каждую ступень отдельная маска, разве не так?

C++:
Step steps[STEP_AMOUNT] = {
{ 47, 0b0100100100100100 },   
{ 47, 0b0000000000000000 }, 
...
};
в моем случае 47 диодов на ступень ws2815.
глючит примерно после 4-й смены, диоды начинают не смещаться а сливаться в всю длину ступени с каждым разом смены в дежурном режиме увеличиваясь в количестве активных диодов... Через некоторое время вся ступенька светится в дежурном режиме полностю всеми диодами одновременно белым цветом, но только та ступень которая задействована в маске.
 
  • Лойс +1
Реакции: Vancouver

bort707

★★★★★★✩
21 Сен 2020
2,894
859
в моем случае 47 диодов на ступень ws2815.
глючит примерно после 4-й смены, диоды начинают не смещаться а сливаться в всю длину ступени с каждым разом смены в дежурном режиме увеличиваясь в количестве активных диодов... Через некоторое время вся ступенька светится в дежурном режиме полностю
что-нибудь меняли в коде, кроме числа ступеней и битмасок?
Просмотрел последний код Геннадия - не вижу ошибок, которые могли бы обьяснить такое поведение
 

strongest

✩✩✩✩✩✩✩
2 Май 2020
8
4
что-нибудь меняли в коде, кроме числа ступеней и битмасок?
Просмотрел последний код Геннадия - не вижу ошибок, которые могли бы обьяснить такое поведение
Сам код я не трогал, только входные параметры: количество ступеней, общее количество чипов, и значение количества каждой ступени в массиве возле масок, маску я оставил оригинальную как есть от автора дабы не создавать своими действиями дополнительных вопросов и проблем.

привожу листинг изменений которые я затронул:

C++:
#define STRIP_LED_AMOUNT 674  // кол-во светодиодов на всех ступеньках
#define STEP_AMOUNT 14        // количество ступенек

// описание всех ступенек с возможностью подсветки ЛЮБЫХ ступенек в ночном режиме
Step steps[STEP_AMOUNT] = {
{ 47, 0b0100100100100100 },   // первая ступенька 16 чипов, 0b0100100100100100 - каждый третий чип активен в ночном режиме
{ 47, 0b0000000000000000 },   // вторая ступенька 16 чипов, 0b0000000000000000 - не активен в ночном режиме
{ 47, 0b0000000000000000 },   // 3
{ 47, 0b0000000000000000 },   // 4
{ 56, 0b0000000000000000 },   // 5
{ 54, 0b0000000000000000 },   // 6
{ 47, 0b0000000000000000 },   // 7
{ 47, 0b0000000000000000 },   // 8
{ 47, 0b0000000000000000 },   // 9
{ 47, 0b0000000000000000 },   // 10
{ 47, 0b0000000000000000 },   // 11
{ 47, 0b0000000000000000 },   // 12
{ 47, 0b0000000000000000 },   // 13
{ 47, 0b0100100100100100 }    // 14
};

#define AUTO_BRIGHT 0     // автояркость вкл(1)/выкл(0) (с фоторезистором)
#define CUSTOM_BRIGHT 100  // ручная яркость
...
#define TIMEOUT 5            // секунд, таймаут выключения ступенек после срабатывания одного из датчиков движения
...
#define STRIP_PIN 41     // пин ленты ступенек
...
#define ORDER_RGB       // порядок цветов ORDER_GRB / ORDER_RGB / ORDER_BRG
....
 
Изменено:
  • Лойс +1
Реакции: Vancouver

Vancouver

✩✩✩✩✩✩✩
22 Сен 2020
7
6
Сам код я не трогал, только входные параметры: количество ступеней, общее количество чипов, и значение количества каждой ступени в массиве возле масок, маску я оставил оригинальную как есть от автора дабы не создавать своими действиями дополнительных вопросов и проблем.

привожу листинг изменений которые я затронул:

C++:
#define STRIP_LED_AMOUNT 674  // кол-во светодиодов на всех ступеньках
#define STEP_AMOUNT 14        // количество ступенек

// описание всех ступенек с возможностью подсветки ЛЮБЫХ ступенек в ночном режиме
Step steps[STEP_AMOUNT] = {
{ 47, 0b0100100100100100 },   // первая ступенька 16 чипов, 0b0100100100100100 - каждый третий чип активен в ночном режиме
{ 47, 0b0000000000000000 },   // вторая ступенька 16 чипов, 0b0000000000000000 - не активен в ночном режиме
{ 47, 0b0000000000000000 },   // 3
{ 47, 0b0000000000000000 },   // 4
{ 56, 0b0000000000000000 },   // 5
{ 54, 0b0000000000000000 },   // 6
{ 47, 0b0000000000000000 },   // 7
{ 47, 0b0000000000000000 },   // 8
{ 47, 0b0000000000000000 },   // 9
{ 47, 0b0000000000000000 },   // 10
{ 47, 0b0000000000000000 },   // 11
{ 47, 0b0000000000000000 },   // 12
{ 47, 0b0000000000000000 },   // 13
{ 47, 0b0100100100100100 }    // 14
};

#define AUTO_BRIGHT 0     // автояркость вкл(1)/выкл(0) (с фоторезистором)
#define CUSTOM_BRIGHT 100  // ручная яркость
...
#define TIMEOUT 5            // секунд, таймаут выключения ступенек после срабатывания одного из датчиков движения
...
#define STRIP_PIN 41     // пин ленты ступенек
...
#define ORDER_RGB       // порядок цветов ORDER_GRB / ORDER_RGB / ORDER_BRG
....
Такая же ситуация. Лента WS2811, кроме количества ступенек и чипов больше ничего не менял.
 
  • Лойс +1
Реакции: strongest

bort707

★★★★★★✩
21 Сен 2020
2,894
859
глючит примерно после 4-й смены, диоды начинают не смещаться а сливаться в всю длину ступени с каждым разом смены в дежурном режиме увеличиваясь в количестве активных диодов... Через некоторое время вся ступенька светится в дежурном режиме полностю всеми диодами одновременно белым цветом, но только та ступень которая задействована в маске.
Похоже, нашел ошибку в версии 1.2, которая обьясняет этот эффект
В описании структуры для ступенек опечатка, тип переменной маски должен быть uint16_t:
C++:
struct Step {
  int8_t led_amount;
  uint16_t night_mode_bitmask; 
};
 
  • Лойс +1
Реакции: strongest и Vancouver

Vancouver

✩✩✩✩✩✩✩
22 Сен 2020
7
6
Похоже, нашел ошибку в версии 1.2, которая обьясняет этот эффект
В описании структуры для ступенек опечатка, тип переменной маски должен быть uint16_t:
C++:
struct Step {
  int8_t led_amount;
  uint16_t night_mode_bitmask;
};
Проверил - теперь работает как задумано!
 
  • Лойс +1
Реакции: strongest

Vancouver

✩✩✩✩✩✩✩
22 Сен 2020
7
6
Похоже методом тыка нашел как исправить глюк с яркостью после выключения дежурного освещения ступенек. Раньше яркостью дежурного освещения продолжали светить ступени всякий раз кроме первого включения. Проверял выкрутив яркость CUSTOM_BRIGHT на 200, а
NIGHT_LIGHT_BRIGHT на 10 для контраста. Прошу протестить и добавить в прошивку.

C++:
    // циклически сдвигаем маску, чтобы диоды не выгорали
    if (steps[i].night_mode_bitmask) {
      steps[i].night_mode_bitmask = steps[i].night_mode_bitmask >> 1 | steps[i].night_mode_bitmask << 15;
      fillStepWithBitMask(i, NIGHT_LIGHT_COLOR, steps[i].night_mode_bitmask);
    }
  }
  animatedSwitchOn(NIGHT_LIGHT_BRIGHT);
            setBrightness(CUSTOM_BRIGHT);
}
 

bort707

★★★★★★✩
21 Сен 2020
2,894
859
@Vancouver, полагаю эту строчку лучше добавить не в процедуру ночного режима, а в процедуру Fader(), которая отвечает за включение подсветки после срабатывания датчика.
 
  • Лойс +1
Реакции: Vancouver

Vancouver

✩✩✩✩✩✩✩
22 Сен 2020
7
6
@Vancouver, полагаю эту строчку лучше добавить не в процедуру ночного режима, а в процедуру Fader(), которая отвечает за включение подсветки после срабатывания датчика.
Спасибо, исправил - работает. Из программирования у меня только лабораторки по бейсику в институте были ))). В этом месте?
setBrightness(CUSTOM_BRIGHT);
stepFader(effectDirection == 1 ? 0 : 1, 0);
 

bort707

★★★★★★✩
21 Сен 2020
2,894
859
Спасибо, исправил - работает. Из программирования у меня только лабораторки по бейсику в институте были ))). В этом месте?
setBrightness(CUSTOM_BRIGHT);
stepFader(effectDirection == 1 ? 0 : 1, 0);
место правильное, но параметр яркости не тот
Вот так будет лучше
setBrightness(curBright);
 
  • Лойс +1
Реакции: strongest и Vancouver

bort707

★★★★★★✩
21 Сен 2020
2,894
859
А у меня созрел вопрос! Битовая маска хорошо! При использовании меги с ее памятью вообще не проблема. А вот с нано уже сложнее. А теперь сам вопрос. Сколько светодиодов со всеми улучшениями теперь поддерживается ?
Проиграли в одном месте, зато выиграли в другом.
Добавились маски, которые занимают 2байта * число ступеней.
Но я заметил, что теперь зря не выделяем память под перила, когда их нет(строки 95-98):
C++:
#if (RAILING == 1)
LEDdata railingLEDs[RAILING_LED_AMOUNT];  // буфер ленты перил
microLED railing(railingLEDs, RAILING_LED_AMOUNT, RAILING_PIN);  // объект лента
#endif
Раньше директивы условной компиляции не было и если пользователь просто выключил перила директивой RAILING 0 - память все равно выделялась и выделялось ее куда больше, чем на скромные битмаски :)
Для случаев строжайшей экономии кусок с битмасками тоже можно убрать в директиву условной компиляции, чтобы можно было собрать код с поддержкой или без поддержки этой фичи.
Боюсь только исходник от этого станет менее понятным для новичков.
 
Изменено:
  • Лойс +1
Реакции: Vancouver

AlexFire2142

✩✩✩✩✩✩✩
18 Мар 2020
2
1
Ребят помогите плиз. Начал собирать это все дело и паять, а она на 5 куске ленты (14 чипов на ленту, всего ступеней 8.) Выгорает чип управления и дальше не светят ленты. Когда была целый кусок ленты, все в целости работало.
И какого сечения проводом соединять ленту? Я взял 0.75мм2 для аудио, а для управления взял из витой пары(rg45). Позднее ступеней будет 17 штук. То есть 17 кусков ленты с 14 чипами ws218i вроде так было название
 

Vancouver

✩✩✩✩✩✩✩
22 Сен 2020
7
6
Ребят помогите плиз. Начал собирать это все дело и паять, а она на 5 куске ленты (14 чипов на ленту, всего ступеней 8.) Выгорает чип управления и дальше не светят ленты. Когда была целый кусок ленты, все в целости работало.
И какого сечения проводом соединять ленту? Я взял 0.75мм2 для аудио, а для управления взял из витой пары(rg45). Позднее ступеней будет 17 штук. То есть 17 кусков ленты с 14 чипами ws218i вроде так было название
При спайке кусков, вероятно, спутал полярность - выгорает на раз чип
 

Mixel

✩✩✩✩✩✩✩
26 Фев 2021
1
0
Всем - здравствуйте!
Подскажите, что за параметр STEP_LENGTH? Он не декларирован, но в файле effects он используется.
 

bort707

★★★★★★✩
21 Сен 2020
2,894
859
Подскажите, что за параметр STEP_LENGTH? Он не декларирован, но в файле effects он используется.
в какой версии?
В последней версии 1.2 этого парметра нет
В версиях 1.0 и 1.1 он обозначал число чипов подсветки на каждую ступеньку
 
  • Лойс +1
Реакции: ЕврейКО

KirillWP

✩✩✩✩✩✩✩
4 Фев 2021
5
3
Уважаемые форумчане, доброго времени суток!
Благодаря кропотливой работе bort707 за что ему ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО была сделана программа под мой требования.
В программу вошли следующие изменения:
1. Работа сенсоров по туймауту ( сброс таймаута при срабатывании любого из сенсоров)
2.Возможность установки третьего сенсора в середину лестницы ( для предотвращения отключения подсветки по таймауту при долгом нахождении на лестнице без пересечения крайних датчиков)
3.Настройка количества ступеней и числа диодов с возможностью задания ступеней с ночной подсветкой.
4.Подсветка перил с возможностью настройки работы подсветки аналогичной работе ступеней.( возможность задания числа сегментов подсветки перил и числа диодов в каждом сегменте. Очень удобно при наличии ступеней с разной шириной для синхронизации подсветки перил и ступеней)
5. Повторное включение подсветки в момент затухания без отключения всей лестницы ( при срабатывании одного из сенсоров в момент когда часть ступеней уже погасла не происходит полного выключения подсветки и повторного включения. Подсветка включается в обратной последовательности от последней работающей степени.)

Данная программа сделана для Меги с заделом на ленту с большим числом диодов. На данный момент работает на Нано с числом диодов менее 500шт. Для прошивки в Нано необходимо поменять в программе номера пинов.
Для включения среднего сенсора необходимо расскоментировать строку 101 //#define SENSOR_MID 24 // пин датчика движения середина

Если я что то упустил, уважаемый bort707 дополните мой пост.

Еще раз огромная благодарность bort707 за проделанную работу!
 

Вложения

bort707

★★★★★★✩
21 Сен 2020
2,894
859
если я что то упустил, уважаемый @bort707 дополните мой пост.
Основное отличие этой версии в том. что мы попытались сделать срабатывание датчиков движения действительно интерактивным. Дело в том, что в исходном коде Алекса во время разгорания и затухания подсветки датчики движения не работают. Если подсветка начала гаснуть по таймауту - то даже если в этот момент кто-то входит на лестницу. подсветка не зажгется.
В нашей версии это исправлено., правда для этого пришлось кардинально поменять логику кода :)
 
  • Лойс +1
Реакции: Tommas и Vancouver

nobdefender

✩✩✩✩✩✩✩
7 Мар 2021
15
0
Основное отличие этой версии в том. что мы попытались сделать срабатывание датчиков движения действительно интерактивным. Дело в том, что в исходном коде Алекса во время разгорания и затухания подсветки датчики движения не работают. Если подсветка начала гаснуть по таймауту - то даже если в этот момент кто-то входит на лестницу. подсветка не зажгется.
В нашей версии это исправлено., правда для этого пришлось кардинально поменять логику кода :)
здравствуйте! А как то можно увеличить количество светодиодов для нано? Или может другую плату взять? Мегу не хотелось бы брать из-за ее размеров.