#include "Arduino.h"
#include <FastLED.h>
#include "initialize.h"
// How many leds in your strip?
#define NUM_LEDS 4
// For led chips like WS2812, which have a data line, ground, and power, you just
// need to define DATA_PIN. For led chipsets that are SPI based (four wires - data, clock,
// ground, and power), like the LPD8806 define both DATA_PIN and CLOCK_PIN
// Clock pin only needed for SPI based chipsets when not using hardware SPI
#define DATA_PIN 4
#define DATA_PIN2 26
// Define the array of leds
//CRGB leds[NUM_STRIPS][NUM_LEDS];
CRGB leds[NUM_LEDS];
CRGB leds1[NUM_LEDS];
class blink_led {
public:
blink_led(CRGB * leds, uint32_t duration, uint8_t led_number, const struct CRGB & color);
blink_led(CRGB * leds, uint32_t duration, uint8_t led_number, const struct CRGB & color, const struct CRGB & color2);
~blink_led();
void blink_led_loop(void);
//void blink_led_activate(bool activate);
//void blink_led_steady(void);
void blink_led_setcolor(CRGB colorparameter);
void blink_led_setcolor(CRGB colorparameter, CRGB colorparameter2);
enum ledstatus{
off,
on,
blink
} ;
void set_led_status(ledstatus state);
private:
CRGB *ledptr;
uint32_t duration;
uint32_t duration_counter = 0;
bool status = false;
bool active = false;
bool steady = false;
uint8_t led_number;
CRGB color;
CRGB color2 = CRGB::Black; //blink to black by default
};
blink_led::~blink_led(){};
blink_led::blink_led(CRGB * leds, uint32_t duration, uint8_t led_number, const struct CRGB & color)
: ledptr(leds)
,duration(duration)
,led_number(led_number)
,color(color){
};
blink_led::blink_led(CRGB * leds, uint32_t duration, uint8_t led_number, const struct CRGB & color, const struct CRGB & color2)
: ledptr(leds)
,duration(duration)
,led_number(led_number)
,color(color)
,color2(color2){
};
void blink_led::set_led_status( ledstatus state){
switch(state){
case off:{
active = false;
steady = false;
*(ledptr + led_number) = CRGB::Black;
FastLED.show(255);
break;
}
case on:{
*(ledptr + led_number) = color;
FastLED.show(255);
steady = true;
active = true;
break;
}
case blink:{
active = true;
break;
}
default: break;
}
}
void blink_led::blink_led_setcolor(CRGB colorparameter){
color = colorparameter;
*(ledptr + led_number) = color;
FastLED.show(255);
}
void blink_led::blink_led_setcolor(CRGB colorparameter, CRGB colorparameter2){
color = colorparameter;
color2 = colorparameter2;
*(ledptr + led_number) = color;
FastLED.show(255);
}
void blink_led::blink_led_loop(void){
if (steady) return;
if(!active) { //ensure led is turned off anyhow
status = false;
*(ledptr + led_number) = CRGB::Black;
FastLED.show(255);
return;}
if ((millis()-duration_counter) < duration) return;
duration_counter = millis();
if (!status) {
*(ledptr + led_number) = color;
status = true;
}
else {
*(ledptr + led_number) = color2;
status = false;
}
FastLED.show(255);
}
blink_led blinkled1(&leds[0], 400,1,CRGB::Yellow,CRGB::Orange);
blink_led blinkled2(&leds[0], 1000,2,CRGB::Red);
blink_led blinkled3(&leds[0], 800, 0,CRGB::Green);
blink_led blinkled33(&leds[0], 800, 3,CRGB::Blue);
blink_led blinkled4(& leds1[0], 200, 0,CRGB::Pink);
blink_led blinkled5(& leds1[0], 200, 1,CRGB::Blue);
blink_led blinkled6(& leds1[0], 200, 2,CRGB(0, 238, 255));
uint32_t counter;
uint8_t state_machine_status;
void setup() {
Serial.begin(115200);
Serial.println("Hello, ESP32!");
FastLED.addLeds<NEOPIXEL, DATA_PIN>(&leds[0], NUM_LEDS); // GRB ordering is assumed
FastLED.addLeds<NEOPIXEL, DATA_PIN2>(&leds1[0], NUM_LEDS); // GRB ordering is assumed
blinkled1.set_led_status(blink_led::blink);
blinkled2.set_led_status(blink_led::blink);
blinkled3.set_led_status(blink_led::blink);
blinkled33.set_led_status(blink_led::on);
blinkled4.set_led_status(blink_led::blink);
blinkled5.set_led_status(blink_led::blink);
blinkled6.set_led_status(blink_led::on);
state_machine_status = 0;
}
void loop() {
blinkled1.blink_led_loop();
blinkled2.blink_led_loop();
blinkled3.blink_led_loop();
blinkled33.blink_led_loop();
blinkled4.blink_led_loop();
blinkled5.blink_led_loop();
blinkled6.blink_led_loop();
if (millis()-counter > 2000){
counter = millis();
switch(state_machine_status){
case 0:{
blinkled33.blink_led_setcolor(CRGB::Bisque);
state_machine_status ++;
break;
}
case 1:{
blinkled33.blink_led_setcolor(CRGB::CRGB::Turquoise);
state_machine_status ++;
break;
}
case 2:{
blinkled1.set_led_status(blink_led::off);
state_machine_status ++;
break;
}
case 3:{
blinkled1.set_led_status(blink_led::on);
state_machine_status ++;
break;
}
case 4:{
blinkled1.set_led_status(blink_led::off);
state_machine_status ++;
break;
}
case 5:{
blinkled1.set_led_status(blink_led::blink);
state_machine_status ++;
break;
}
case 6:{
blinkled2.blink_led_setcolor(CRGB::Red, CRGB::Magenta);
state_machine_status ++;
break;
}
default: {
state_machine_status = 0;
break;
}
}
}
delay(100);
}