Aqui tambien les comparto el código completo que utilice aquí se los comparto en etiquetas
//Main Control Code//
//CODIGO CARGADO EN ATMEGA328PU
//Pines usados para programación
//PIN 1 = RESET (DTR)
//PIN 2 = RX
//PIN 3 = TX
//+5V y GND
#include <avr/sleep.h> // library for sleep modes
#include <avr/power.h> // library for power management
#include <avr/wdt.h> // disable/enable WDT
#include <avr/interrupt.h> // library for interrupts
#include <Adafruit_NeoPixel.h>
#include "FastLED.h"
#define NUM_LEDS 16 //TOTAL DE LEDS CONECTADOS
#define DATA_PIN 9 //D9 o (PIN 15)
#define BRILLO 150 //BRILLO 0 min ~ max 255 Brillo recomendado 100-150 para no deslumbrar y ahorrar bateria
CRGBArray<NUM_LEDS> leds;
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, DATA_PIN, NEO_GRB + NEO_KHZ800);
#include "FastLED.h"
#define LED_PIXEL 1 // # of LEDS in the strip
CRGB PIXEL[LED_PIXEL];
#define DATA 8 // Output Pin to Data Line on Strip (PIN 14) LED STYBY
int fadeAmount = 5; // Set the amount to fade I usually do 5, 10, 15, 20, 25 etc even up to 255.
int brightness = 0;
////////////////////////////////////////////////////////////////////////////////////// CODIGO LED MODE
#define PIN1 8 //Conectar pin DIN de led WS2812B (PIN 5)
#define NUMPIXELS 1 //Cantidad de leds ws2812b conectados
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN1, NEO_GRB + NEO_KHZ800);
////////////////////////////////////////////////////////////////////////////////////// CODIGO LED MODE
unsigned long period=80;
unsigned long currentMillis=0;
unsigned long startMillis=0;
boolean ledOn=false;
unsigned long idleMillis; // Measure idle time between button presses
unsigned long patternInterval = 5 ; // time between steps in the pattern
unsigned long lastUpdate = 0; // for millis() when last update occurred
unsigned long showSpeed [] = { 5, 30, 30, 30, 30} ; // speed for each pattern - add here when adding more cases
int fadeStep = 0; // state variable for fade function
const byte BUTTON_PIN = 2; //D2 PIN4 Pin para Push Botton o TouchPAD capacitivo
void LEDS_OFF();
void Mode0(); //MODE STOP (RED SPEED LOW)
void Mode1(); //MODE RED STROBE FAST
void Mode2(); //MODE WHITE STROBE
unsigned long currentMillis1 = 0;
// Function to put Digispark to sleep
void sleep()
{
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Call for deepest sleep mode
ADCSRA = 0; // ADC off
power_all_disable(); // Power off ADC, Timer 0 and 1, serial interface. avr/power.h
sleep_enable(); // Sets the Sleep Enable (SE) bit in the MCUCR Register (SE BIT)
wdt_disable(); // Disable watchdog timer to conserve power
sleep_bod_disable(); // Disable brown out detection to conserve power. Auto-enables on wake
sei(); // Enable interrupts
sleep_cpu(); // Sleep
// ISR starts here when button pressed
sleep_disable(); // Clear SE bit
cli(); // Disable interrupts
//PCMSK &= ~_BV(PCINT2); // Turn off PB2 as interrupt pin
sei(); // Enable interrupts
power_all_enable(); // Power everything on. avr/power.h
ADCSRA = 0; // Disable ADC because I don't need it
}
EMPTY_INTERRUPT(PCINT0_vect); // Alternate use of ISR(PCINT0_vect){} since
// no action needed in the interrupt
void setup()
{
pinMode(BUTTON_PIN, INPUT_PULLUP);
digitalWrite(BUTTON_PIN, LOW);
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS); //NEOPIXELES PRINCIPALES
FastLED.setBrightness(BRILLO);
//FastLED.setBrightness(MAX_BRIGHTNESS); //Ajuste de brillo con potenciometro
strip.setBrightness(150); // Ajuste de Brillo Mode5 y Mode8 De 100~150 Default 120
FastLED.addLeds<NEOPIXEL, DATA>(PIXEL, LED_PIXEL); //LED StyBy
// CODIGO PARA LED MODE
pixels.begin(); // This initializes the NeoPixel library.
pixels.setBrightness(20); //Ajuste de brillo de LED Neopixel 0 = MIN 255 = MAX
wipe();
pixels.show();
// CODIGO PARA LED MODE
}
void loop()
{
currentMillis=millis();
// Start with case 0
static byte showType = 0; //En cual case desea iniciar? //Default 0
static bool oldState;
// Get current button state
bool newState = digitalRead(BUTTON_PIN);
// Check if state changed from high to low (button press)
if (newState == HIGH && oldState == LOW) ///newState=LOW oldState= HIGH //Default
{
showType++; // Move to next showType
fadeStep = 0; // Reset fade state variable
idleMillis = millis(); // Reset idle timer
if (showType > 3) //Candtidad de case en el codigo?
{
showType = 0; // Reset showType to case 0
}
patternInterval = showSpeed[showType]; // Set speed for this pattern
wipe(); // Clear out pixel buffer
delay(100); //Tiempo para cambio de case //Default 5
}
oldState = newState; // Update state
if (millis() - lastUpdate > patternInterval)
{
startShow(showType);
}
}
void startShow(int showPattern)
{
switch(showPattern)
{
//LEDS OFF/STYBY
case 0: fade(0,0,0,0,0,0,0);
LEDS_OFF();
///MODE STYBY
for(int i = 0; i < LED_PIXEL; i++ )
{
//PIXEL[i].setRGB(255,0,50); //RED DARK //Color RGB
PIXEL[0]=CHSV(247,255,150); //RED DARK //Color HSV
PIXEL[0].fadeLightBy(brightness);
}
FastLED.show();
brightness = brightness + fadeAmount;
if(brightness == 0 || brightness == 255)
{
fadeAmount = -fadeAmount ;
}
delay(15); // This delay sets speed of the fade. I usually do from 5-75 but you can always go higher.
///MODE STYBY
break;
//////////////////////////MODE0 COLOR RED
case 1:
Mode0(); //MODE STOP (RED SPEED LOW)
//SPEED [Aumentar el valor disminuye la velocidad]
fade(0,0, 0,0, 0,0, 500); //4 RED DELAY PAUSE
fade(0,200, 0,0, 0,0, 1000); //4 RED PULSE STOP
pixels.setPixelColor(0, pixels.Color(255, 0, 0)); //RED
pixels.show();
break;
////////////////////////MODE1 COLOR LIME
case 2:
Mode1();
pixels.setPixelColor(0, pixels.Color(100, 255, 0)); //LIME
pixels.show();
break;
////////////////////////MODE2 COLOR PINK
case 3:
Mode2();
pixels.setPixelColor(0, pixels.Color(230, 0, 100)); //PINK
pixels.show();
break;
}
}
// clear all LEDs
void wipe()
{
for(byte i=0;i<strip.numPixels();i++)
{
strip.setPixelColor(i, strip.Color(0,0,0));
strip.show();
}
}
void fade(byte redStartValue, byte redEndValue, byte greenStartValue, byte greenEndValue, byte blueStartValue, byte blueEndValue, int totalSteps)
{
static float redIncrement, greenIncrement, blueIncrement;
static float red, green, blue;
static bool fadeUp = false;
if (fadeStep == 0) // first step is to initialise the initial colour and increments
{
red = redStartValue;
green = greenStartValue;
blue = blueStartValue;
fadeUp = false;
redIncrement = (float)(redEndValue - redStartValue) / (float)totalSteps;
greenIncrement = (float)(greenEndValue - greenStartValue) / (float)totalSteps;
blueIncrement = (float)(blueEndValue - blueStartValue) / (float)totalSteps;
fadeStep = 1; // next time the function is called start the fade
}
else // all other steps make a new colour and display it
{
// make new colour
red += redIncrement;
green += greenIncrement;
blue += blueIncrement;
// set up the pixel buffer
for (byte i = 0; i < strip.numPixels(); i++)
{
strip.setPixelColor(i, strip.Color((byte)red,(byte)green,(byte)blue));
}
// now display it
//strip.setBrightness(80); // Ajuste de Brillo
strip.show();
// go on to next step
fadeStep += 1;
// finished fade
if(fadeStep >= totalSteps)
{
if(fadeUp) // finished fade up and back
{
fadeStep = 0;
return; // so next call recalabrates the increments
}
// now fade back
fadeUp = true;
redIncrement = -redIncrement;
greenIncrement = -greenIncrement;
blueIncrement = -blueIncrement;
fadeStep = 1; // don't calculate the increments again but start at first change
}
}
}
//Mode0 STOP (RED SPEED LOW)
void Mode0() { //LED STATE RED
}
//Mode1 RED STROBE
void Mode1() { //LED STATE LIME
BlinkOuter(strip.Color(255, 0, 0), 40); //Red faster
BlinkOuter(strip.Color(255, 0, 0), 40); //Red faster
BlinkOuter(strip.Color(255, 0, 0), 40); //Red faster
BlinkOuter(strip.Color(0, 0, 0), 1000); //LED OFF DELAY
ClearLights();
}
void ClearLights() {
for (int i = 0; i < strip.numPixels(); i = i + 1) {
strip.setPixelColor(i, 0); //turn every pixel off
}
strip.show();
}
void BlinkOuter(uint32_t c, uint8_t wait) {
for (int j = 0; j < 1; j++) { // The j<# determines how many cycles
strip.setPixelColor(strip.numPixels() - 1, 0);
strip.setPixelColor(strip.numPixels() - 2, 0);
strip.setPixelColor(strip.numPixels() - 3, 0);
strip.setPixelColor(strip.numPixels() - 4, 0);
strip.setPixelColor(strip.numPixels() - 5, 0);
strip.setPixelColor(strip.numPixels() - 6, 0);
strip.setPixelColor(strip.numPixels() - 7, 0);
strip.setPixelColor(strip.numPixels() - 8, 0);
strip.setPixelColor(strip.numPixels() - 9, 0);
strip.setPixelColor(strip.numPixels() - 10, 0);
strip.setPixelColor(strip.numPixels() - 11, 0);
strip.setPixelColor(strip.numPixels() - 12, 0);
strip.setPixelColor(strip.numPixels() - 13, 0);
strip.setPixelColor(strip.numPixels() - 14, 0);
strip.setPixelColor(strip.numPixels() - 15, 0);
strip.setPixelColor(strip.numPixels() - 16, 0);
strip.setPixelColor(strip.numPixels() - 17, 0);
strip.setPixelColor(strip.numPixels() - 18, 0);
strip.setPixelColor(18, 18);
strip.show();
delay(wait);
strip.setPixelColor(strip.numPixels() - 1, c);
strip.setPixelColor(strip.numPixels() - 2, c);
strip.setPixelColor(strip.numPixels() - 3, c);
strip.setPixelColor(strip.numPixels() - 4, c);
strip.setPixelColor(strip.numPixels() - 5, c);
strip.setPixelColor(strip.numPixels() - 6, c);
strip.setPixelColor(strip.numPixels() - 7, c);
strip.setPixelColor(strip.numPixels() - 8, c);
strip.setPixelColor(strip.numPixels() - 9, c);
strip.setPixelColor(strip.numPixels() - 10, c);
strip.setPixelColor(strip.numPixels() - 11, c);
strip.setPixelColor(strip.numPixels() - 12, c);
strip.setPixelColor(strip.numPixels() - 13, c);
strip.setPixelColor(strip.numPixels() - 14, c);
strip.setPixelColor(strip.numPixels() - 15, c);
strip.setPixelColor(strip.numPixels() - 16, c);
strip.setPixelColor(strip.numPixels() - 17, c);
strip.setPixelColor(strip.numPixels() - 18, c);
strip.setPixelColor(18, 18);
strip.show();
delay(wait);
}
}
//Mode2 WHITE STROBE
void Mode2() { //LED STATE PINK
if(currentMillis-startMillis>=period){
startMillis=currentMillis;
ledOn=!ledOn;
if(ledOn){
leds(0,17) = CHSV(0,0,0); // WHITE OFF
}else{
leds(0,17) = CHSV(0,0,180); //WHITE
}
FastLED.show();
}
}
void LEDS_OFF() { //MODE STYBY (LED STATE RED DARK)
FastLED.clear();
FastLED.show();
}