Эффекты для WS2812B, автономная работа от SD карточки

Для 707ого.
Я начал думать про такое. Вижу несколько задач:

  1. Удобный инструмент разложить 3д модель укладки ленты. Не кад-овские инструменты, а что-то интуитивное. Хорошо бы строить ленту из последовательных сегментов. Как бы из кусков.
  2. Мета язык описания эффектов. Не глупые массивы, хотя они тоже, но и функции, циклы, задание радуг и градиентов одной командой. Интерпретатор этого языка реал тайм при загрузке в ленту. Контроллеры, само собой, есп или арм, не нано никак! ;)). Есп32 или распберри пико или стм32.
  3. Не смог понять - нахера у ТС картинки в программу подгружаются? Срез картинки, как кадр эффекта штоле? Вот тут мне нужен совет - это правда надо и в каком виде? Творческое полушарие мозга в школе на учебник физики выменял!

3д визуализации не бойся. Это фигня есть и на джава и на джава скрипте и на пайтоне. Крутить, растягивать… И все такое.

Одному скучно такое писать. Нужна компания.

GRBL для ёлки изобретаете?

1 лайк

вот это крайне интересно.
А вот 3Д я себе пока вообще не представляю, поэтому и не думал о нем. Я 2Д пространствами мыслю

Попробовал сегодня. И программа и скетчи отлично работают. Собирал на макетке. Спасибо автору.
А о чём срач в теме, так и не понял.

Тоже хотел нарисовать на отрезке в 33 пикселя красный пиксель бегущий по зелёному фону туда-обратно и не понял как :slight_smile:
А срач обо всём и ни о чём сразу. Самописные приложения чётко предназначены для конкретной геометрии - glediator (немецкие любители) для матриц двумерных. Имеет визуализатор, не работает с отдельными пикселями, а с исходным “изображением”, подвергая его различным трансформациям-анимациям. Есть Quadrum (шведский или финский автор) - приложение для 3Д куба с покадровой, попиксельной прорисовкой и тоже с визуализатором. Здесь какая геометрия?, где визуализатор?, какой концепт рисования “фефектов”? Взяв их приложения и ни разу ни бум бум я разобрался с ходу методом тыка и така. А тут два захода и мимо :frowning:
Конечно приложение должно быть для: например, ленты свёрнутой в конусную спираль на ёлке, или лампы Гайвера, или под альтернативную геометрию.

на компе нарисовать? Ну вот тебе десяток строк на ДжаваСкрипте. Разберешься?
Прям в браузере открывай в любом.

<!DOCTYPE html>
<html>
<body>


  <canvas id="myCanvas" width="400" height="400" style="border:1px solid grey"></canvas>
  <div><button onclick="isRunning = ! isRunning">Start/Stop</button></div>
  
<script>
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");
canvas.height = canvas.width;
ctx.transform(1, 0, 0, -1, 0, canvas.height)

let isRunning = true;
let id = null;
let nLed = 33;
let d = 1;
let redP = 0;

ctx.fillStyle = "green";
for (let i = 0; i < nLed; i++) {
  ctx.beginPath();
  ctx.ellipse(i*10+10, 100, 4, 8, 0, 0, Math.PI * 2);
  ctx.fill();
}

id = setInterval(() => {
  if (isRunning) {
    ctx.fillStyle = "green";
    ctx.beginPath();
    ctx.ellipse(redP*10+10, 100, 4, 8, 0, 0, Math.PI * 2);
    ctx.fill();

    if (redP == 0)  d = 1;
    if (redP == nLed-1) d = -1;
    redP = redP + d;

    ctx.fillStyle = "red";
    ctx.beginPath();
    ctx.ellipse(redP*10+10, 100, 4, 8, 0, 0, Math.PI * 2);
    ctx.fill();
  } 
},100);


</script>

</body>
</html>
1 лайк

it runs!

Нет, не на ПК, а в приложении ТС.

У меня ругается на “>”

а чего так не получается?

  <canvas id="myCanvas" width="400" height="100" style="border:1px solid grey"></canvas>
  <div><button onclick="isRunning = ! isRunning">Start/Stop</button></div>

на строчку 12 посмотри! ;))
На тебе с высотой 100 и переливающимся бегущим огоньком.

<!DOCTYPE html>
<html>
<body>


  <canvas id="myCanvas" width=400 height=100 style="border:3px solid grey"></canvas>
  <div><button onclick="isRunning = ! isRunning">Start/Stop</button></div>
  
<script>
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");
//canvas.height = canvas.width;


let yP = 30;
let ledWidth = 10;
let repeatTime = 100;

let isRunning = true;
let id = null;
let nLed = 33;
let d = 1;
let redP = 0;

ctx.fillStyle = "green";
for (let i = 0; i < nLed; i++) {
  ctx.beginPath();
  ctx.ellipse((i+1)*ledWidth, yP, 4, 8, 0, 0, Math.PI * 2);
  ctx.fill();
}

id = setInterval(() => {
  if (isRunning) {
    ctx.fillStyle = "green";
    ctx.beginPath();
    ctx.ellipse((redP+1)*ledWidth, yP, 4, 8, 0, 0, Math.PI * 2);
    ctx.fill();

    if (redP == 0)  d = 1;
    if (redP == nLed-1) d = -1;
    redP = redP + d;

    ctx.fillStyle = `rgb(${255 - redP*7}, 0, ${redP*7})`;
    ctx.beginPath();
    ctx.ellipse((redP+1)*ledWidth, yP, 4, 8, 0, 0, Math.PI * 2);
    ctx.fill();
  } 
},repeatTime);


</script>

</body>
</html>

Uncaught SyntaxError: Unexpected token ‘<’
Не знаю, видно не туда и не то :slight_smile:

В верхнем правом углу кода есть кнопка копирования - копируйте через нее

Это да, дальше 7 не смотрел…в смысле подумать не мог, что правая рука может делать совсем иное чем левая…
PS не быть тебе вэб десигнером, BOOM подтвердит :grinning:

Здесь КОТ
<!DOCTYPE html>
<html>
<body>


  <canvas id="myCanvas" width=340 height=60 style="border:3px solid grey"></canvas>
  <div style="margin: 2px 0 10px 138px; display:block;">
  <button onclick="isRunning = ! isRunning">Start/Stop</button></div>
  
<script>
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");
//canvas.height = canvas.width;


let yP = 30;
let ledWidth = 10;
let repeatTime = 100;

let isRunning = true;
let id = null;
let nLed = 33;
let d = 1;
let redP = 0;

ctx.fillStyle = "green";
for (let i = 0; i < nLed; i++) {
  ctx.beginPath();
  ctx.ellipse((i+1)*ledWidth, yP, 4, 8, 0, 0, Math.PI * 2);
  ctx.fill();
}

id = setInterval(() => {
  if (isRunning) {
    ctx.fillStyle = "green";
    ctx.beginPath();
    ctx.ellipse((redP+1)*ledWidth, yP, 4, 8, 0, 0, Math.PI * 2);
    ctx.fill();

    if (redP == 0)  d = 1;
    if (redP == nLed-1) d = -1;
    redP = redP + d;

    ctx.fillStyle = `rgb(${255 - redP*7}, 0, ${redP*7})`;
    ctx.beginPath();
    ctx.ellipse((redP+1)*ledWidth, yP, 4, 8, 0, 0, Math.PI * 2);
    ctx.fill();
  } 
},repeatTime);


</script>

</body>
</html>

Всё равно тоже. Ладно, не судьба. Зато ТС приложение методом тыка заработало. Очень своеобразное миропонимание открывается :slight_smile:

Пустили льва через ленточку :slight_smile:



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

А что ты с ним делаешь? ;))))

Нужно просто сохранить текст в файл hernya.html и потом открыть это файл в браузере. Специально для тебя сообщу, что “браузер” это такая кнопочка на экране. Бывает Chrome бывает Firefox, у редкого класса даунов бывает еще что-то, но тут я не помощник.

Загрузите последнюю версию LedsGen.exe (ссылка выше), в ней этот просчёт исправлен.

Да, теперь сработало.Я долбил первым способом.
https://codechick.io/tutorials/javascript/js-getting-started

Вторая версия не работает у меня - пишет имя инвалид и сыпет окном с ошибкой. Приходится через диспетчер задачу снимать.
Ещё в первой версии после запуска на ленту визуализатор перестаёт работать.
PS А почему свой концепт не усложняете - берём ленту гнём в любую плоско-объёмную фигуру и таскаем- вращаем в цветовом пространстве?