Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
1a999b1
add old mods
npo6ka Dec 10, 2019
74f747b
Merge branch 'master' into New-mods
npo6ka Dec 14, 2019
f624812
minor changes
npo6ka Dec 14, 2019
9434e85
add SimpleRainbow effect
npo6ka Dec 14, 2019
a24a055
add dribs effect
npo6ka Dec 14, 2019
ccc67a9
add rain effect
npo6ka Dec 14, 2019
19b70c8
add allRandom effect
npo6ka Dec 14, 2019
80d028b
add snow effect
npo6ka Dec 14, 2019
db02a2c
add fire mode
npo6ka Dec 14, 2019
26d3e57
change fire color
npo6ka Dec 14, 2019
40e2cab
fix led preset and add matrix mode
npo6ka Dec 14, 2019
1daa5c5
add simple balls and confetti modes
npo6ka Dec 15, 2019
c662055
add starfall mode
npo6ka Dec 15, 2019
ebb48ef
add rains effects
npo6ka Dec 15, 2019
3056ee7
add points effect
npo6ka Dec 15, 2019
fc27e4c
add rainbowPoint effect
npo6ka Dec 15, 2019
f568cb8
add RainbowStaticPoint effect
npo6ka Dec 15, 2019
147d830
tmp fix matrix positions
npo6ka Dec 18, 2019
b665928
fix getPixNum function and remove deprecated defines
npo6ka Dec 19, 2019
5c9cd82
fix XY matrix problem
npo6ka Dec 19, 2019
1c88a7c
fix 16 and 0 mods
npo6ka Dec 19, 2019
3fe88f9
fix 02 and 03 mods
npo6ka Dec 19, 2019
db64dec
fix 04 and 05 effects
npo6ka Dec 19, 2019
4a1fcc7
fix 07 and 08 mods
npo6ka Dec 19, 2019
79fbdb9
fix 09 and 11 mods
npo6ka Dec 19, 2019
d7cb072
fix lib
npo6ka Dec 20, 2019
aafe1fd
fix 10 mod
npo6ka Dec 20, 2019
9b99192
fix 11 and 12 mods
npo6ka Dec 20, 2019
db79713
fix 13 and 15 mods
npo6ka Dec 20, 2019
18e7c83
fix 14 mod
npo6ka Dec 20, 2019
6fb6a5a
fire stage 1
npo6ka Dec 20, 2019
31e86ac
fix crash on 00 mods
npo6ka Dec 20, 2019
72cee40
fix fire effect
npo6ka Dec 20, 2019
eca6de2
small fix fire effect
npo6ka Dec 20, 2019
195fe3d
add constants file
npo6ka Dec 21, 2019
74f544c
add text mode
npo6ka Dec 25, 2019
5fce952
small fixes
npo6ka Dec 25, 2019
b52fac8
add new mods and fix double free
npo6ka Dec 30, 2019
d8ebbf3
add more effects
npo6ka Dec 30, 2019
f010228
fix out of bound coordinates
npo6ka Dec 30, 2019
6d6f8d4
fix shaders
npo6ka Dec 30, 2019
b15783b
fix warnings
npo6ka Dec 30, 2019
eb4bb3d
fix free corruption
AHTOH108 Dec 30, 2019
ff7d652
add property
npo6ka Jan 16, 2020
af6af12
Merge branch 'New-mods' of https://github.com/npo6ka/LedMatrix into N…
npo6ka Jan 16, 2020
9f61238
minor changes
npo6ka Dec 6, 2020
52c447e
tmp commit
npo6ka Dec 29, 2020
0d852d8
memory test
Feb 12, 2024
2efa3c0
update gitignore
Feb 12, 2024
fc9603c
rm cached
Feb 12, 2024
d6455dd
Merge remote-tracking branch 'origin/master' into properties
Feb 15, 2024
d15567a
Add cpp on desktop memory tests
Feb 15, 2024
b808e3a
remove slag code
Feb 15, 2024
7a43ad8
Merge remote-tracking branch 'origin/master' into properties
npo6ka May 27, 2025
318cce8
replace memory functions
npo6ka May 27, 2025
eb4f3db
split memory manager into two files
npo6ka May 27, 2025
676c588
refactoring file handler
npo6ka May 27, 2025
eadf4fa
refactoring effect_list with memeory save
npo6ka Jul 9, 2025
4dd2286
refactoring debug_lib
npo6ka Oct 19, 2025
d64217d
fix problem with NY2020
npo6ka Oct 19, 2025
0d13173
move fps manager
npo6ka Oct 19, 2025
6368e91
move effect factory
npo6ka Oct 19, 2025
658d6dd
Add File savable variable and Effect storage
npo6ka Oct 19, 2025
7b9e81c
Add EffectManager
npo6ka Oct 28, 2025
c40b0a7
Refactoring + Fix saving problem
npo6ka Nov 1, 2025
8a8a2e0
Refactoring events and configs
npo6ka Nov 1, 2025
968c38a
Rename effect folder and remove usless file
npo6ka Nov 1, 2025
7b7be84
Add is_end effect check to snake
npo6ka Nov 1, 2025
459ca3b
Rename Lsf file handler and add esp32 handler
npo6ka Nov 1, 2025
738481a
event refactoring
npo6ka Nov 1, 2025
c0673fa
remove usless file_handler and refactoring debug message
npo6ka Nov 1, 2025
4881747
add autoselecting LSF include
npo6ka Nov 2, 2025
1f615f8
Added support esp32 filehandler
npo6ka Mar 15, 2026
bc5a648
add new effects and cursor rulse
npo6ka Mar 15, 2026
0915a8a
add new mods
npo6ka Mar 15, 2026
99aa7f0
Add modlist Reset when holding button 5 sec
npo6ka Mar 15, 2026
2a96f2b
Fix pulse_rings
npo6ka Mar 15, 2026
791e9c0
Merge branch 'master' into properties
npo6ka Mar 15, 2026
c6a630d
moved the list of mods to the config folder
npo6ka Apr 19, 2026
fc1260d
fix readme
npo6ka Apr 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 52 additions & 0 deletions .cursor/rules/build.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
---
description: Правила компиляции и загрузки прошивки (PlatformIO)
alwaysApply: true
---

# Правила компиляции проекта LedMatrix

Проект собирается через **PlatformIO**. Конфигурация — `platformio.ini`.

## Окружения (environments)

| Окружение | Плата | Платформа |
|------------|-----------------|-------------|
| `esp12e` | ESP8266 ESP-12E | espressif8266 |
| `esp32dev` | ESP32 Dev Module | espressif32 |

## Команды

- **Сборка всего:**
`pio run`
или (если `pio` не в PATH):
`& "$env:USERPROFILE\.platformio\penv\Scripts\platformio.exe" run`

- **Сборка одного окружения:**
`pio run -e esp12e`
`pio run -e esp32dev`

- **Загрузка прошивки:**
`pio run -e esp32dev -t upload`
Порт задаётся в `platformio.ini` (`upload_port`) или через флаг:
`pio run -e esp32dev -t upload --upload-port COM4`

- **Монитор порта:**
`pio device monitor -e esp32dev`
(скорость в `platformio.ini`: `monitor_speed`)

## Где лежат прошивки

- ESP8266: `.pio/build/esp12e/firmware.bin`
- ESP32: `.pio/build/esp32dev/firmware.bin`

## Зависимости

- Общие библиотеки заданы в `[common]` в `platformio.ini`.
- Для ESP32 дополнительно: EspSoftwareSerial. LittleFS встроен в ядро (LittleFS.h).
- При ошибке `ModuleNotFoundError: intelhex` — установить в окружение PlatformIO:
`& "$env:USERPROFILE\.platformio\penv\Scripts\pip.exe" install intelhex`

## PowerShell

В PowerShell не использовать `&&`. Разделитель команд — `;`, например:
`cd d:\project\LedMatrix; pio run`
115 changes: 115 additions & 0 deletions .cursor/rules/effects.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
---
description: Правила создания и подключения новых режимов (эффектов) в LedMatrix
globs: src/effects/**/*.h, src/core/effect/**/*
---

# Создание нового режима (эффекта)

## 1. Класс эффекта

- Базовый класс: `Effect` (`src/effects/effect.h`).
- Подключать: `#include "effects/effect.h"`.

### Методы

| Метод | Обязательный | Описание |
|-------|----------------|----------|
| `on_update()` | **Да** | Вызывается каждый кадр. Вся логика и отрисовка эффекта. |
| `on_init()` | Нет | Один раз при включении режима. Задать `set_fps()`, начальное состояние. |
| `on_clear()` | Нет | Один раз при смене режима, до `on_init()`. По умолчанию — `FastLED.clear()`. |
| `on_render()` | Нет | Отдельный шаг отрисовки (если нужен). |
| `is_end()` | Нет | По умолчанию `true`. Вернуть `false`, чтобы автомод не переключал режим (держать не более 2+ секунд). |

### FPS и очистка

- В `on_init()` вызвать `set_fps(20..60)` — лимит кадров в секунду.
- Скорость анимации лучше задавать своими счётчиками/шагами внутри `on_update()`, а не только FPS.

## 2. Размещение файла

- Путь: **`src/effects/effects_impl/<имя>.h`** (например `spiral.h`, `pulse_rings.h`).
- Имя класса — в PascalCase, совпадает с именем файла без расширения (например класс `Spiral` в `spiral.h`).
- Эффект можно сделать только в заголовке (header-only) или добавить `.cpp` по необходимости.

## 3. Регистрация в фабрике

Файлы: **`src/core/effect/EffectFactory.h`** (enum), **`src/core/effect/EffectFactory.cpp`** (switch).

1. **`EffectFactory.h`** — в `enum class EffectId` перед `Count` добавить новый идентификатор со следующим свободным числом (сейчас последний режим — `PulseRings = 31`, следующий будет `32`):
```cpp
NewEffect = 32,
Count
```
Значение `Count` пересчитается автоматически (сентинел «после последнего id»).

2. **`EffectFactory.cpp`** — **include** класса эффекта (в блоке с остальными):
```cpp
#include "effects/effects_impl/имя_файла.h"
```

3. В **`switch`** в `getEffectInfo()` добавить строку **до** `default`:
```cpp
EFFECT_CASE(NewEffect);
```
Макрос ожидает, что **имя класса совпадает с именем варианта enum** (как у существующих `EFFECT_CASE(SlowRandom);` → класс `SlowRandom`).

## 4. Добавление в список по умолчанию

Файл: **`src/configs/DefaultEffectList.h`**.

В массив **`DefaultEffects::effectIds`** добавить элемент `EffectId::…` в нужном порядке (порядок в списке = порядок переключения при старте и после сброса):

```cpp
EffectId::NewEffect,
```

Размер массива задаётся списком инициализаторов — **вручную считать элементы не нужно**. Убрать режим из стартового списка — удалить или закомментировать соответствующую строку.

Список используется в **`StaticEffectStorage`** и при построении дефолтов в **`FileEffectStorage`** (без дублирования через временное хранилище).

## 5. API матрицы и цвета

- **Матрица** — глобальный объект `LedMatrix` (`libs/led_matrix.h`):
- `LedMatrix.width()`, `LedMatrix.height()` — размеры.
- `LedMatrix.at(x, y)` — ссылка на пиксель `CRGB&`.
- `LedMatrix.clear()` — очистка.
- `LedMatrix.fader(step)` — затемнение всех пикселей (для шлейфа/следов).
- `LedMatrix.rangeX()`, `LedMatrix.rangeY()` — диапазоны для циклов по x/y.
- `LedMatrix.drawLine()`, `LedMatrix.drawRect()` — примитивы при необходимости.

- **Размеры матрицы (обязательно учитывать):**
- Матрица может быть **разных размеров** и в том числе **прямоугольной** (ширина ≠ высота).
- Не закладываться на квадрат или фиксированные значения. Все расчёты позиций, радиусов и масштабов делать **в рантайме** по `LedMatrix.width()` и `LedMatrix.height()`.
- Использовать `std::min(LedMatrix.width(), LedMatrix.height())` или отдельно ширину/высоту, когда форма эффекта зависит от размера (круги, надписи, фигуры).

- **Константы** из `configs/matrix.h`: `LEDS_WIDTH`, `LEDS_HEIGHT` — только если действительно нужны на этапе компиляции; для переносимости между разными матрицами предпочтительны `width()`/`height()`.

- **Цвета** (FastLED):
- `CRGB(r, g, b)`, `CRGB(0xRRGGBB)`.
- `CHSV(hue, saturation, value)` — hue 0–255, sat 0–255, value 0–255.
- `qadd8(a, b)` — сложение с насыщением (чтобы не уходить в белый при наложении).

## 6. Минимальный пример

(Используются `LedMatrix.width()` и `LedMatrix.height()` — эффект корректен при любых размерах и форме матрицы.)

```cpp
// src/effects/effects_impl/my_effect.h
#pragma once
#include "effects/effect.h"

class MyEffect : public Effect {
public:
void on_init() override {
set_fps(30);
}
void on_update() override {
LedMatrix.fader(40);
index_t x = random(LedMatrix.width());
index_t y = random(LedMatrix.height());
LedMatrix.at(x, y) = CHSV(random8(), 255, 255);
}
};
```

После добавления класса не забыть: **`EffectFactory.h`** (новый `EffectId`), **`EffectFactory.cpp`** (include + `EFFECT_CASE`), **`DefaultEffectList.h`** (при необходимости — `EffectId::…` в `DefaultEffects::effectIds`).
Loading