/*
######################################################
 Controlador LED endereçável
 Mario.Parente
 Data: 07/06/2023
 Controlando LED endereçável de forma fácil com vários modos de controle
 "Testado em 02/12/23 com Esp-nodemcu (Asustes nos PIN's A1 > A0, 5 > D4)" - A0 está em GND sem variação real
#######################################################
*/

//Declaração Inicial
#include <FastLED.h>                                            // Biblioteca de apoio
#define LED_PIN   5                                             // Define o pino de controle dos leds
#define NUM_LEDS  16                                            // Define a quantidade de LED
CRGB leds[NUM_LEDS];                                            // Declaração de Opjeto

//Função de configuração e que serão executados somente uma vez
void setup() {                                                  
  FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS);        // Inicia a Objeto
  randomSeed(analogRead(A1));                                   // Função de semente da aleatoriedade
}
//Função de limpeza dos LED
void Enviar_Comando(){                                          
  FastLED.clear();                                              // Limpa a memoria dos Buff dos LED
  FastLED.show();                                               // Envia para todos os LED
  delay(100);                                                   // Aguarda 1/10 de Segundo
}
//Função que serão executados infinitamente
void loop() {                                                   
//######   Cores LED a LED 'aleatorias' com saturação e brilho maximo
  for (int i = 0; i <=15; i++){                                 //
    leds[i] = CHSV(random(255), 255, 255);                      //
    FastLED.show();                                             //
    delay(100);                                                 //
  }

//######   Limpa dos LED's    #################
  Enviar_Comando();

//######   Cirdulo de dor Azul sentido horario
  for (int i = 0; i <= 16; i++) {

//######  Comente uma linha ##################
    leds[i] = CRGB ( 0, 0, 255);          //Cor solida
    //leds[i] = CHSV(random(255), 255, 255);  //Cor aleatoria
//###########################################

    FastLED.show();  
    delay(50);
  }

//######   Limpa dos LED's    #################
  Enviar_Comando();

//######   Cirdulo de dor Vermelha sentido horario
  for (int i = 16; i >= 0; i--) {

//######  Comente uma linha ###################
    leds[i] = CRGB ( 255, 0, 0);          //Cor solida
    //leds[i] = CHSV(random(255), 255, 255);  //Cor aleatoria
//############################################

    FastLED.show();
    delay(50);
  }

//######   Limpa dos LED's    #################
  Enviar_Comando();

  //######   LED correndo
  for (int i = -1; i <= 15; i++) {

//######  Comente uma linha #################
    leds[i+1] = CRGB ( 0, 255, 0);        //Cor solida
    //leds[i] = CHSV(random(255), 255, 255);  //Cor aleatoria
//#######################################

    leds[i-1] = CRGB ( 0, 0, 0);
    FastLED.show();
    delay(50);
  }

//######   Limpa dos LED's    #################
  Enviar_Comando();


//######   Percorrendo todo o espectro de cores com saturação e brilho maximo
  for (int i = 0; i <= 255; i++) {
    //static uint8_t i = 0;
    FastLED.showColor(CHSV(i, 255, 255)); 
    delay(5);
  }

//######   Limpa dos LED's    #################
  Enviar_Comando();





}
ATTINY8520PU