#include <FastLED.h>
#define NUM_LEDS 100
#define PIN 3 //Пин кнопки
#define LEDPIN 13 //Пин ленты
CRGB leds[NUM_LEDS];
int c;
int click_counter;
uint8_t btn_timer;
uint8_t debounce_period = 50;
boolean butt_state = false;
boolean butt_flag = false;
boolean var = false;
int BUTTON_COUNT = 0;
void setup() {
pinMode(LEDPIN, OUTPUT);
pinMode(PIN, INPUT_PULLUP);
Serial.begin(9600);
FastLED.addLeds<WS2812B, LEDPIN, GRB>(leds, NUM_LEDS);
FastLED.setBrightness(50);
}
void loop() {
c = clickFunction(); //получаем количество кликов
// Serial.println(c);
if (c > 7){
c = 0;
}
//выбираем режим работы ленты
// 0 - радуга
// 1 - красный
// 2 - оранжевый
// 3 - желтый
// 4 - зеленый
// 5 - синий
// 6 - фиолетовый
// 7 - выкл
switch (c) {
case 0:
for (int i = 0; i < NUM_LEDS; i++) {leds[i] = CHSV(hue + (i * 10), 200, 255);}
EVERY_N_MILLISECONDS(50){hue++;} FastLED.show(); break;
case 1:
for (int i = 0; i < NUM_LEDS; i++) {leds[i] = CRGB::Red;} FastLED.show(); break;
case 2:
for (int i = 0; i < NUM_LEDS; i++) {leds[i] = CRGB::Yellow;} FastLED.show(); break;
case 3:
for (int i = 0; i < NUM_LEDS; i++){leds[i] = CRGB::Orange;} FastLED.show(); break;
case 4:
for (int i = 0; i < NUM_LEDS; i++){leds[i] = CRGB::Green;} FastLED.show(); break;
case 5:
for (int i = 0; i < NUM_LEDS; i++){leds[i] = CRGB::Yellow;} FastLED.show(); break;
case 6:
for (int i = 0; i < NUM_LEDS; i++){leds[i] = CRGB::Violet;} FastLED.show(); break;
case 7:
for (int i = 0; i < NUM_LEDS; i++){leds[i] = CRGB::Black;} FastLED.show(); break;
}
}
//функция клика
int clickFunction(){
butt_state = !digitalRead(PIN);
if (butt_state == 1 && butt_flag == 0 && var == false) { // регистрация клика
btn_timer = millis();
var = true;
}
if (butt_state == 1 && butt_flag == false && millis() - btn_timer >= debounce_period) { //отработка нажатия
butt_flag = true;
Serial.println("Click");
click_counter++;
}
if (butt_state == 0 && butt_flag == true && var == true) { // регистрация отпускания
btn_timer = millis();
var = false;
}
if (butt_state == 0 && butt_flag == true && millis()- btn_timer >= debounce_period) { //отработка отпускания
butt_flag = false;
var = false;
}
return(click_counter);
}