ledBasic

0

Описание

Встроенный язык программирования световых эффектов для WS2812B на ESP8266

Языки

  • C++100%
README.md

LedBasic

Встроенный язык программирования световых эффектов для WS2812B на ESP8266

LedBasic — это интерпретируемый BASIC-подобный язык и виртуальная машина (VM) для создания анимаций на адресных светодиодных лентах. Программы пишутся в текстовом виде, компилируются в байт-код прямо на контроллере и выполняются неблокирующим образом — параллельно с остальным кодом Arduino.


Возможности

  • Неблокирующее выполнение
    tick()
    вызывается из
    loop()
    , не мешает другим задачам
  • Независимость от типа ленты — подключение через коллбэки (совместимо с любой версией NeoPixelBus, FastLED)
  • Полный язык: переменные A–Z, арифметика, условия, циклы, подпрограммы, функции
  • Управление скоростью
    setSpeed(percent)
    масштабирует все задержки без изменения скрипта
  • Встроенные LED-функции:
    SIN8
    ,
    COS8
    ,
    PIXEL
    ,
    RND
    ,
    ABS
    ,
    MIN
    ,
    MAX
  • HSV и RGB
    SET_HSV
    с аппаратной конвертацией без float
  • Браузерная IDE — редактор, эмулятор, отладчик, экспорт — всё в одном HTML-файле

Структура проекта

LedBasic.h — заголовочный файл библиотеки LedBasic.cpp — реализация компилятора и VM main.cpp — пример подключения к ESP8266 + NeoPixelBus examples/ main_comet.cpp — комета с хвостом main_fire.cpp — языки пламени main_firework.cpp — фейерверк main_rainbow.cpp — радуга main_ants.cpp — муравьиная тропа main_sunset.cpp — закат (движущееся солнце) main_effects.cpp — сборник эффектов main_test_read.cpp — тест запись/чтение

1. Подключение библиотеки

2. Инициализация

3. Управление скоростью


Язык LedBasic

Структура программы

Каждая строка начинается с номера (1–65534). Комментарий — апостроф

'
. Запятые в аргументах окружаются пробелами.

Команды

КомандаОписание
FILL r , g , b
Залить всю ленту цветом
SET pos , r , g , b
Установить один пиксель RGB
SET_HSV pos , h , s , v
Установить один пиксель HSV (0–255)
CLEAR
Погасить всю ленту
SHOW
Вывести буфер на ленту
WAIT ms
SHOW + пауза ms миллисекунд
DELAY ms
Пауза без SHOW
GOTO n
Перейти на строку n
GOSUB n
Вызов подпрограммы (стек 10 уровней)
RETURN
Возврат из подпрограммы
FOR v = a TO b [STEP s]
Цикл (вложенность до 8)
NEXT v
Конец цикла
IF expr op expr THEN cmd
Условие

Функции

ФункцияОписание
PIXEL
Максимальный индекс пикселя (N − 1)
RND min , max
Случайное целое в диапазоне
SIN8 x
Синус: аргумент 0–255, результат 0–255
COS8 x
Косинус: аргумент 0–255, результат 0–255
ABS x
Модуль числа
MIN a , b
Минимум
MAX a , b
Максимум

Переменные

26 переменных:

A
Z
, тип
int16
(−32768..32767). Инициализируются нулём при
play()
.

Пример: комета с хвостом


Дополнительно

Файлы мануалов можно загрузить с моего Яндекс.Диск, почему то Gitverse портит docx файлы.

LedBasic_Manual_v3.docx — справочное руководство по языку LedBasic_Lib_Doc_v2.docx — документация C++ библиотеки LedBasic_Effects_v2.docx — сборник 28 эффектов с комментариями

Браузерная IDE

Онлайн IDE LedBasic

IDE screenshot placeholder

IDE screenshot placeholder

Возможности IDE

  • Редактор с подсветкой синтаксиса, нумерацией строк, подчёркиванием ошибок
  • Эмулятор ленты — полоса, кольцо, матрица (настраиваемый размер и масштаб)
  • Отладчик — переменные A–Z в реальном времени, аннотированный байт-код
  • Многострочный режим — несколько операторов на одной строке:
    110 V = A 111 P = I 112 GOSUB 600
  • Экспорт в
    const char*
    ,
    PROGMEM
    ,
    .bas
    ,
    .bin
  • Горячие клавиши:
    Ctrl+Enter
    /
    F5
    — запуск/стоп,
    Ctrl+S
    — сохранить
  • **Есть некоторые баги, будут исправленны в следующей версии

C++ API


Зависимости

  • Arduino ESP8266 core

Лимиты VM

РесурсЛимит
Переменные26 (A–Z), int16
Строк программы128
Стек GOSUB10 уровней
Стек FOR/NEXT8 уровней
Байт-код~4 КБ RAM
Скорость1..1000%

Благодарности

Эффекты из сборника вдохновлены проектом WS2812FX — kitesurfer1404.


Лицензия

MIT