//====================Настройки======================
//-------------------- Энкодер------------------------
#define CLK 2
#define DT 3
#define SW 4 //пин подключения кнопки энкодера
//------------------Лента-----------------------
#define PIN_R 9 // Пин R
#define PIN_G 10 // Пин G
#define PIN_B 11 // Пин B
//------------------Остальные пины---------------------
#define P_MOSFET 6 // пин, куда подключен мосфет подачи +12 на ленту
//#define PhotoResVCC 19 // +5v на фоторезистор (А5)
//#define PhotoResSIG 17 // вход с делителя фоторезистора (А3)
#define POWER 13 // Светодиод питания
//------------------Библиотеки----------------
#include <GyverEncoder.h> //подключаю библтиотеку Энкодера
Encoder enc(CLK, DT, SW); //называем энкодер (энк и кнопка)
#include <GyverRGB.h> // подключаю библиотеку RGB
GRGB strip(PIN_R, PIN_G, PIN_B); // пины, куда подключены цвета (R, G, B)
#include <EEPROM.h> // подключаю библиотеку EEPROM
//-----------------Переменные------------------------
int16_t brightness = 0; // переменная яркости
int16_t colorTemp = 3200; // переменная цветовой температуры, начальное значение
uint16_t address = 0; // переменная для хранения адреса ячейки памяти
boolean flagOn = 0; // флажок включения системы
uint8_t R = analogRead (PIN_R); //считываю значение R на выходе
uint8_t G = analogRead (PIN_G); //считываю значение G на выходе
uint8_t B = analogRead (PIN_B); //считываю значение B на выходе
void setup() {
//-----Энкодер-----
enc.setType(TYPE2); // выбираю тип энкодера
enc.setTickMode(AUTO); //устанавливаю автоматический режим опроса энкодера
//-----Лента-----
//pinMode(PIN_R, OUTPUT);
//pinMode(PIN_G, OUTPUT);
//pinMode(PIN_B, OUTPUT);
strip.setDirection(REVERSE); // устанавливаем направление ленты (прямое-обратное)
strip.setMaxCurrent(3, 12000, 300); //Ограничение тока ленты. Метод принимает в качестве аргументов:(кол-во светодиодов, напряжение питания ленты в мВ, ток в mА)
//-----Монитор порта------
Serial.begin(9600); //открываю монитор порта
//-----Прочие пины-----
pinMode(POWER, OUTPUT); // светодиод на пин 13
pinMode (P_MOSFET, OUTPUT); // пин для P-MOSFET
//pinMode (PhotoResVCC, OUTPUT); // +5v на фоторезистор
//pinMode (PhotoResSIG, INPUT); // вход с делителя фоторезистора
}
void loop() {
strip.setBrightness(brightness);// // этот метод меняет общую яркость ленты, принимает 0-255 (что мы и делаем с аналог пина)
strip.setKelvin(colorTemp);//устанавливаем цветовую температуру 1000-10000
//==========обработка нажатий кнопки==========
if (enc.isClick()) {
if (flagOn) {
digitalWrite (POWER, LOW); // выкл LED
digitalWrite (P_MOSFET, LOW); // выкл P-MOSFet
flagOn = false; //опускаю флажок
brightness = 0; // устанавливаем яркость 0
strip.setBrightness(brightness);// устанавливаю яркость ленты 0
EEPROM.put(0, colorTemp); // записываем значение colTemp в ячейку памяти 0
delay(200);
Serial.println("Written colorTemp=" + String(colorTemp)); // выводим значение colorTemp, записанное в ячейку памяти
Serial.println("Brightness=" + String(brightness)); // выводим значение brightness
Serial.println("R_" + String (R));
Serial.println("G_" + String (G));
Serial.println("B_" + String (B));
Serial.println("POWER OFF"); // выводим слово ВЫКЛ
}
else {
digitalWrite (POWER, HIGH); // вкл LED
digitalWrite (P_MOSFET, HIGH); // вкл P-MOSFet
flagOn = true; // поднимаю флажок
brightness = 50; // устанавливаю яркость ленты 50
EEPROM.get(0, colorTemp); //читаем записанное значение цветовой температуры из ячейки памяти 0
Serial.println("FLAG ON"); // выводим слово Флажок поднят
Serial.println("POWER ON"); // выводим слово ВКЛ
Serial.println("ColorTemp=" + String(colorTemp)); // выводим значение colorTemp, считанное из ячейки памяти 0
Serial.println("Brightness=" + String(brightness)); // выводим значение brightness
Serial.println("R_" + String (R));
Serial.println("G_" + String (G));
Serial.println("B_" + String (B));
}
}
// ===========обработка поворотов энкодера==========
if (flagOn) { //если флажок поднят
if (enc.isRight()) {
brightness += 10; // если был поворот направо, увеличиваем brightness на 10
brightness = constrain(brightness, 10, 255); //ограничиваем значение brightness от 10 до 255
Serial.println("Brightness=" + String(brightness)); // выводим значение brightness при повороте
Serial.println("R_" + String (R));
Serial.println("G_" + String (G));
Serial.println("B_" + String (B));
}
if (enc.isLeft()) {
brightness -= 10; // если был поворот налево, уменьшаем brightness на 10
brightness = constrain(brightness, 10, 255); //ограничиваем значение brightness от 10 до 255
Serial.println("Brightness=" + String(brightness)); // выводим значение brightness при повороте
Serial.println("R_" + String (R));
Serial.println("G_" + String (G));
Serial.println("B_" + String (B));
}
if (enc.isRightH()) {
colorTemp += 100; // если было удержание + поворот направо, увеличиваем colorTemp на 100
colorTemp = constrain(colorTemp, 1000, 10000); // ограничение цветовой температуры от 1000 до 10000
Serial.println("Color Temperature=" + String(colorTemp)); // выводим значение colTemp при повороте
Serial.println("R_" + String (R));
Serial.println("G_" + String (G));
Serial.println("B_" + String (B));
}
if (enc.isLeftH()) {
colorTemp -= 100; // если было удержание + поворот налево, уменьшаем colorTemp на 100
colorTemp = constrain(colorTemp, 1000, 10000); // ограничение цветовой температуры от 1000 до 10000
Serial.println("Color Temperature=" + String(colorTemp)); // выводим значение colTemp при повороте
Serial.println("R_" + String (R));
Serial.println("G_" + String (G));
Serial.println("B_" + String (B));
}
}
}