Библиотека для управления симисторным диммером с Arduino
- Одноканальный и многоканальный диммер по алгоритму Брезенхема
- Одноканальный и многоканальный фазовый диммер
Совместима со всеми Arduino платформами (используются Arduino-функции)
- Библиотеку можно найти по названию GyverDimmer и установить через менеджер библиотек в:
- Arduino IDE
- Arduino IDE v2
- PlatformIO
- Скачать библиотеку .zip архивом для ручной установки:
- Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
- Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
- Распаковать и положить в Документы/Arduino/libraries/
- (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
- Читай более подробную инструкцию по установке библиотек здесь
- Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
- Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
- Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!
DimmerBres<пин> dim; // диммер по Брезенхему
DimmerBresMulti<количество> dim; // многоканальный диммер по Брезенхему
Dimmer<пин> dim; // фазовый диммер
DimmerMulti<количество> dim; // многоканальный фазовый диммер
// ====== DimmerBres ======
void write(uint8_t dim); // установить величину диммирования 0-255
void tick(); // вызывать в прерывании детектора нуля
// ====== DimmerBresMulti ======
void attach(uint8_t num, uint8_t pin); // подключить канал под номером num на пин pin
void write(uint8_t ch, uint8_t dim); // установить величину диммирования 0-255 на канал ch
void tick(); // вызывать в прерывании детектора нуля
// ====== Dimmer ======
void write(uint8_t dim); // установить величину диммирования 0-255
bool tickZero(); // вызывать в прерывании детектора нуля
void tickTimer(); // вызывать в прерывании таймера
int getPeriod(); // получить период для таймера
// ====== DimmerMulti ======
void attach(uint8_t num, uint8_t pin); // подключить канал под номером num на пин pin
void write(uint8_t ch, uint8_t dim); // установить величину диммирования 0-255 на канал ch
bool tickZero(); // вызывать в прерывании детектора нуля
void tickTimer(); // вызывать в прерывании таймера
int getPeriod(); // получить период для таймера
Остальные примеры смотри в examples!
// тест одного канала по Брезенхему
#define D_PIN 5
// zero cross на D2
#include <GyverDimmer.h>
DimmerBres<D_PIN> dim; // указать пин диммера
void setup() {
// завести прерывание на детектор нуля
attachInterrupt(0, isr, RISING); // D2 == 0
}
void isr() {
dim.tick(); // вызывать тик в прерывании детектора нуля
}
void loop() {
// принимает 0-255
dim.write(analogRead(A0) / 4);
delay(100);
}
- v1.0
- v1.1 - переделан FastIO
- v1.1.1 - убран FastIO
- v1.2 - исправил баг в DimmerBres и DimmerBresMulti
При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!
При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:
- Версия библиотеки
- Какой используется МК
- Версия SDK (для ESP)
- Версия Arduino IDE
- Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
- Какой код загружался, какая работа от него ожидалась и как он работает в реальности
- В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код