В интернете
большое количество проектов на
Arduino с
использованием
адресных светодиодов
и лент WS2812. Я тоже решил сделать пару
проектов на данных замечательных
светодиодах
WS2811.
При создании
проекта были использованный следующие
материалы:
1. Адресные светодиоды
2. Arduino Nano
3. Тактовые кнопки
Сделал я вот
такой
ночник с двумя режимами и
регулированием яркости.
Первый режим плавно изменяет цвет светодиодов со
сдвигом на один. Второй режим светит
обычным белым цветом.
Регулирование
яркости изменяет яркость на 20%.
Программа
сделана практически на стандартных
примерах которые устанавливаются с
библиотекой
FastLED.
Установить
библиотеку FastLED можно из менеджера
библиотек.
Или скачать архив отсюда и установить библиотеку
FastLED
Скетч небольшой
и прокомментирован.
#include <FastLED.h>
#define LED_PIN 6
byte button_rejim = 2; // кнопка режим
byte button_yarkast = 3; // кнопка яркасть
int rejim = 0; // текущий режим
int yarkast = 100; // текущая яркасть
boolean lastButten = LOW; // предыдущее состояние кнопки
boolean currentButten = LOW; // текущее состояние кнопки
boolean lastButten2 = LOW; // предыдущее состояние кнопки 2
boolean currentButten2 = LOW; // текущее состояние кнопки 2
// Information about the LED strip itself
#define NUM_LEDS 15
#define CHIPSET WS2811
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
// How many seconds to show each temperature before switching
#define DISPLAYTIME 20
// How many seconds to show black between switches
#define BLACKTIME 3
void setup() {
pinMode(button_rejim, INPUT_PULLUP); // настроить пин кнопки
pinMode(button_yarkast, INPUT_PULLUP); // настроить пин кнопки
//delay( 3000 );
FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalSMD5050 );
}
boolean debvance (boolean last) //убираем дребизг 1
{
boolean current = digitalRead (button_yarkast); // считываем данные с кнопки
if (last != current) // Если текущее состояни еотличететься от предыдущего
{
delay (5); // Ждем 5 милисек.
current = digitalRead (button_yarkast); // Присваеваем текущее состояние кнопки
return current;
}
}
boolean debvance2 (boolean last) //убираем дребизг 2
{
boolean current = digitalRead (button_rejim); // считываем данные с кнопки
if (last != current) // Если текущее состояни еотличететься от предыдущего
{
delay (5); // Ждем 5 милисек.
current = digitalRead (button_rejim); // Присваеваем текущее состояние кнопки
return current;
}
}
void loop(){
currentButten = debvance (lastButten); // Передаем функции дребезга значение по умолчанию LOW
if (lastButten == LOW && currentButten == HIGH) // Проверяем отпускали мы кнопку или нет
{
yarkast = yarkast+50; // увеличиваем яркость
}
lastButten = currentButten; // Переприсваеваем прошлое состояние кнопки
if (yarkast > 250)
yarkast = 0;
currentButten2 = debvance2 (lastButten2); // Передаем функции дребезга значение по умолчанию LOW
if (lastButten2 == LOW && currentButten2 == HIGH) // Проверяем отпускали мы кнопку или нет
{
rejim = !rejim; // изменяем режим
}
lastButten2 = currentButten2; // Переприсваеваем прошлое состояние кнопки
if (rejim)
{
FastLED.setBrightness( yarkast );
static uint8_t starthue = 0;
fill_rainbow( leds, NUM_LEDS, ++starthue, 40);
}
else
{
static uint8_t hue;
for(int i = 0; i < NUM_LEDS; i++) {
leds[i] = CHSV(0,0,yarkast);
}
}
FastLED.show();
FastLED.delay(10);
}
Я думаю вопросов
не должно быть. Но если что то не работает
пишите будем разбираться.
Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.
Спасибо за внимание!
Понравилась статья? Поделитесь ею с друзьями:
Комментарии
Войдите или Зарегистрируйтесь И Вы сможете общаться на форуме и оставлять комментарии без капчи.