150 lines
2.6 KiB
C++
150 lines
2.6 KiB
C++
/* HomeSpan Pixel Example */
|
|
|
|
#include "Pixel.h"
|
|
|
|
struct Effect1 {
|
|
|
|
Pixel *px;
|
|
int H=0;
|
|
uint32_t alarmTime=0;
|
|
uint32_t speed;
|
|
uint8_t nPixels;
|
|
Pixel::Color c;
|
|
|
|
Effect1(Pixel *px, uint32_t speed, uint8_t nPixels){
|
|
this->px=px;
|
|
this->nPixels=nPixels;
|
|
this->speed=speed;
|
|
}
|
|
|
|
void update(){
|
|
if(millis()<alarmTime)
|
|
return;
|
|
|
|
px->set(c.HSV(H,100,10),nPixels);
|
|
H=(H+1)%360;
|
|
|
|
alarmTime=millis()+speed;
|
|
}
|
|
};
|
|
|
|
struct Effect2 {
|
|
|
|
Pixel *px;
|
|
int phase=0;
|
|
int dir=1;
|
|
int H=0;
|
|
Pixel::Color x[60];
|
|
uint32_t alarmTime=0;
|
|
uint32_t speed;
|
|
uint8_t nPixels;
|
|
|
|
Effect2(Pixel *px, uint32_t speed, uint8_t nPixels){
|
|
this->px=px;
|
|
this->nPixels=nPixels;
|
|
this->speed=speed;
|
|
}
|
|
|
|
void update(){
|
|
if(millis()<alarmTime)
|
|
return;
|
|
|
|
for(int i=0;i<nPixels;i++){
|
|
if(i==phase)
|
|
x[i].HSV(H,100,100);
|
|
else if(i==nPixels-1-phase)
|
|
x[i].HSV(H+180,100,100);
|
|
else
|
|
x[i].RGB(0,0,0);
|
|
}
|
|
|
|
px->set(x,nPixels);
|
|
phase=(phase+dir)%nPixels;
|
|
|
|
if(phase==0){
|
|
dir=1;
|
|
H=(H+10)%360;
|
|
}
|
|
else if(phase==nPixels-1){
|
|
dir=-1;
|
|
H=(H+10)%360;
|
|
}
|
|
|
|
alarmTime=millis()+speed;
|
|
}
|
|
};
|
|
|
|
struct Effect3 {
|
|
|
|
Dot *dot;
|
|
int H=0;
|
|
uint32_t alarmTime=0;
|
|
uint32_t speed;
|
|
uint8_t nPixels;
|
|
Dot::Color c;
|
|
|
|
Effect3(Dot *dot, uint32_t speed, uint8_t nPixels){
|
|
this->dot=dot;
|
|
this->nPixels=nPixels;
|
|
this->speed=speed;
|
|
}
|
|
|
|
void update(){
|
|
if(millis()<alarmTime)
|
|
return;
|
|
|
|
dot->set(c.HSV(H,100,100),nPixels);
|
|
H=(H+1)%360;
|
|
|
|
alarmTime=millis()+speed;
|
|
}
|
|
};
|
|
|
|
#if defined(CONFIG_IDF_TARGET_ESP32C3)
|
|
|
|
Pixel px1(8); // NeoPixel RGB
|
|
Pixel px2(9,true); // NeoPixel RGBW
|
|
Dot dot(2,3); // DotStar
|
|
Pixel neo(0);
|
|
|
|
#elif defined(CONFIG_IDF_TARGET_ESP32)
|
|
|
|
// Pixel px1(23,true); // NeoPixel RGB
|
|
// Dot dot(32,5); // DotStar
|
|
Pixel px2(21); // NeoPixel RGBW
|
|
Pixel neo(26);
|
|
|
|
#endif
|
|
|
|
//Effect1 effect1(&px1,20,60);
|
|
//Effect2 effect2(&px2,20,60);
|
|
//Effect2 effect2(&px1,20,60);
|
|
//Effect3 effect3(&dot,20,30);
|
|
|
|
void setup() {
|
|
|
|
Serial.begin(115200); // start the Serial interface
|
|
Serial.flush();
|
|
delay(1000); // wait for interface to flush
|
|
|
|
Serial.println("\n\nHomeSpan Pixel Example\n");
|
|
|
|
Pixel::Color c;
|
|
int hue=0;
|
|
|
|
// Pixel px2(21); // NeoPixel RGBW
|
|
|
|
while(1){
|
|
neo.set(c.HSV(hue,100,10),8);
|
|
hue=(hue+10)%360;
|
|
delay(100);
|
|
}
|
|
|
|
} // end of setup()
|
|
|
|
void loop(){
|
|
// effect1.update();
|
|
// effect2.update();
|
|
// effect3.update();
|
|
}
|