Версия 3
После прошивки скетча обязательно надо сделать очистку EEPROM нажать кнопку 9 раз. Иначе мусор в EEPROM не даст сработать настройкам по умолчанию и взамен эффектов будет не предсказуемое мигание пикселей с не предсказуемой яркостью.
Полностью переписал код с упором на получение большего количества свободной динамической памяти. Эффектов теперь 26. Сделан вывод в терминал подсказок по командам кнопки посылкой в терминале help. Если Вы прошиваете скетч поверх более ранней версии то обязательно нужно обнулить EEPROM иначе для новых эффектов яркость будет со значением ноль и матрица на этих эффектах будет с полностью погашенными пикселями. Это относится и к предыдущей версии. Узнал об этом поздно. Поэтому предупреждаю только сейчас. Теперь убран массив отвечающий за наименьшие и наибольшие показатели скорости и масштаба. Пересчет делается в коде эффекта под значение ползунка 16 адресных светодиодов и от 0 до 255 реальных значений. Поэтому теперь только массив с индивидуальными первоначальными настройками скорости и масштаба каждого эффекта. По умолчанию выбрано 128 как среднее значение. Все эффекты собраны в одном скетче effects.ino. Если эффекту надо что либо еще то это располагается в основном файле скетча GyverLamp_v1.4_Arduino_Kto_v3.ino. Дополнительный файл скетча button.ino отвечает за кнопку и очистку памяти. В utility.ino работа с матрицей и вывод сообщений. В effectTicker.ino основная логика эффектов. noiseEffects.ino теперь вообще нету, эффекты в эффектах, дополнительные данные в основном файле.
Пин матрицы подключать к D2. По желанию подключить кнопку к D4 и GND.
Как вставить свой эффект.
1) В основном файле скетча GyverLamp_v1.4_Arduino_Kto_v3.ino
В строке #define MODE_AMOUNT 26 // Количество всех эффектов
к номеру последнего эффекта добавить ваш эффект.
Например Вы сделали 1 свой эффект. Ничего раньше сюда не добавляли.
Тогда будет: #define MODE_AMOUNT 27
Далее ниже
// ДЕФОЛТНЫЕ МАССИВЫ ПАРАМЕТРОВ скорости и масштаба
в самом низу после
modes[25].speed = 128; modes[25].scale = 128; // Эффект 26: Прыгуны
добавляете
modes[26].speed = 128; modes[26].scale = 128; // Эффект 27: Ваше название эффекта (по желанию)
Здесь начальная скорость и масштаб эффекта которые привязаны к регуляторам эффектов
ползункам со значениями от 0 до 255. 128 это среднее целое значение.
Непосредственно шкалы скоростей и масштабов (от какого до какого значения регулировать) привязаны теперь внутри эффектов.
Эффектов сделано много, при желании можно понять как это устроено.
Дефолтная яркость будет занесена автоматически, скетч узнает об этом из MODE_AMOUNT.
2) В дополнительном файле effectTicker.ino
// ОТРИСОВКА ВЫБРАННОГО ЭФФЕКТА
в самом низу после
case 25: fallingPairsEffect(); break; // 26 Прыгуны
добавить
case 26: myTreasure(); break; / Эффект 27: Ваше название эффекта (по желанию)
номера case и modes должны совпадать поскольку - это один и тот же номер эффекта
название myTreasure() должно совпадать с названием в Вашем эффекте void myTreasure()
3) В дополнительном файле effects.ino
можете вставить свой код эффекта в любое место кроме как внутри блоков
для визуального удобства бозначенных как
// ============================================================================
// Начало эффекта №
код эффекта
// Конец эффекта №
// ============================================================================
можете вставить свой код эффекта внизу, можете вверху, можете впихнуть между блоков эффектов.
Это абсолютно без разницы. Эффект вызывается по имени заданному Вами ранее. Например
void myTreasure() { Ваш код эффекта }
4) В utility.ino
вставит вывод названия вашего эффекта
case 25: Serial.print(F("Прыгуны")); break;
тут надо вставить case 26: Serial.print(F("Ваше название эффекта")); break;
default: Serial.print(F("Неизвестный")); break;
Пробуйте.