add circle mapping and radar effect
This commit is contained in:
parent
ff6cc12e7f
commit
04362e9fb3
|
@ -48,6 +48,9 @@ void NeoPatterns::Update() {
|
||||||
case PLASMA:
|
case PLASMA:
|
||||||
PlasmaUpdate();
|
PlasmaUpdate();
|
||||||
break;
|
break;
|
||||||
|
case RADAR:
|
||||||
|
RadarUpdate();
|
||||||
|
break;
|
||||||
case FILL:
|
case FILL:
|
||||||
break;
|
break;
|
||||||
case RANDOM:
|
case RANDOM:
|
||||||
|
@ -480,6 +483,67 @@ void NeoPatterns::PlasmaUpdate()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void NeoPatterns::Radar(float radarspeed,float radarthickness, uint8_t interval)
|
||||||
|
{
|
||||||
|
ActivePattern = RADAR;
|
||||||
|
Radarspeed = radarspeed;
|
||||||
|
Interval = interval; //interval time in ms
|
||||||
|
Radarposition=0;
|
||||||
|
Radarthickness=radarthickness;
|
||||||
|
Radarfadelength=8;
|
||||||
|
Radardotposition=10;
|
||||||
|
Radardotbrightness=0;
|
||||||
|
Radardotfadespeed=10;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NeoPatterns::RadarUpdate()
|
||||||
|
{
|
||||||
|
Radarposition += Radarspeed;
|
||||||
|
while (Radarposition>=32){
|
||||||
|
Radarposition-=32;
|
||||||
|
}
|
||||||
|
while (Radarposition<=-32){
|
||||||
|
Radarposition+=32;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i=0;i<32;i++){
|
||||||
|
uint32_t c= Color(0,0,0);
|
||||||
|
|
||||||
|
float angulardistance;
|
||||||
|
if (Radarspeed>0){
|
||||||
|
angulardistance=Radarposition-i;
|
||||||
|
if (angulardistance<0){
|
||||||
|
angulardistance+=32;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (angulardistance<=Radarfadelength){
|
||||||
|
uint8_t _brightness=(Radarfadelength-angulardistance)*255/Radarfadelength;
|
||||||
|
|
||||||
|
c= Color (int( pow( (_brightness/255.0),2)*255.0), _brightness ,int(pow( (_brightness/255.0),2)*200.0) );
|
||||||
|
}
|
||||||
|
|
||||||
|
colorCircleSegment(i, c);
|
||||||
|
}
|
||||||
|
if (abs(Radarposition-Radardotposition)<=1){
|
||||||
|
Radardotbrightness=255;
|
||||||
|
}
|
||||||
|
if (Radardotbrightness>10){
|
||||||
|
Radardotbrightness-=Radardotfadespeed;
|
||||||
|
colorCircleSegment(Radardotposition, Color (Radardotbrightness,0,0));
|
||||||
|
}else{
|
||||||
|
if (random(100)==0){
|
||||||
|
Radardotposition=random(0,32); //set new position
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
show();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************** Helper functions ******************/
|
/****************** Helper functions ******************/
|
||||||
|
|
||||||
void NeoPatterns::SetColor1(uint32_t color) {
|
void NeoPatterns::SetColor1(uint32_t color) {
|
||||||
|
@ -519,6 +583,8 @@ void NeoPatterns::colorBox(uint8_t boxid, uint32_t c){ //color a box
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void NeoPatterns::setupboxs() {
|
void NeoPatterns::setupboxs() {
|
||||||
boxs[1].left = 55;
|
boxs[1].left = 55;
|
||||||
boxs[1].middle = 56;
|
boxs[1].middle = 56;
|
||||||
|
@ -622,6 +688,14 @@ void NeoPatterns::setupboxs() {
|
||||||
boxs[0].right = 39;
|
boxs[0].right = 39;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NeoPatterns::colorCircleSegment(uint8_t wheelid, uint32_t c){ //color a wheel segment
|
||||||
|
for (int i=0;i<4;i++) {
|
||||||
|
setPixelColor(boxcircle[wheelid][i], c);
|
||||||
|
}
|
||||||
|
show();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void NeoPatterns::ColorSetParameters(String parameters)
|
void NeoPatterns::ColorSetParameters(String parameters)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include <Adafruit_NeoPixel.h>
|
#include <Adafruit_NeoPixel.h>
|
||||||
|
|
||||||
// Pattern types supported:
|
// Pattern types supported:
|
||||||
enum pattern { NONE, RAINBOW_CYCLE, THEATER_CHASE, COLOR_WIPE, SCANNER, FADE, RANDOM_FADE, SMOOTH, ICON, RANDOM_FADE_SINGLE, PLASMA, FILL, RANDOM };
|
enum pattern { NONE, RAINBOW_CYCLE, THEATER_CHASE, COLOR_WIPE, SCANNER, FADE, RANDOM_FADE, SMOOTH, ICON, RANDOM_FADE_SINGLE, PLASMA, RADAR, FILL, RANDOM };
|
||||||
// Patern directions supported:
|
// Patern directions supported:
|
||||||
enum direction { FORWARD, REVERSE };
|
enum direction { FORWARD, REVERSE };
|
||||||
|
|
||||||
|
@ -34,6 +34,8 @@ class NeoPatterns : public Adafruit_NeoPixel
|
||||||
void SmoothUpdate();
|
void SmoothUpdate();
|
||||||
void Plasma(float phase = 0, float phaseIncrement = 0.08, float colorStretch = 0.11, uint8_t interval = 60); // 0.08 and 0.11 // 0.03 und 0.3
|
void Plasma(float phase = 0, float phaseIncrement = 0.08, float colorStretch = 0.11, uint8_t interval = 60); // 0.08 and 0.11 // 0.03 und 0.3
|
||||||
void PlasmaUpdate();
|
void PlasmaUpdate();
|
||||||
|
void Radar(float radarspeed = 1,float radarthickness = 1, uint8_t interval = 50);
|
||||||
|
void RadarUpdate();
|
||||||
|
|
||||||
void SetColor1(uint32_t color);
|
void SetColor1(uint32_t color);
|
||||||
void SetColor2(uint32_t color);
|
void SetColor2(uint32_t color);
|
||||||
|
@ -48,9 +50,44 @@ class NeoPatterns : public Adafruit_NeoPixel
|
||||||
};
|
};
|
||||||
|
|
||||||
struct box boxs[25];
|
struct box boxs[25];
|
||||||
|
uint8_t boxcircle[32][4]={
|
||||||
|
{0,0,0,0}, //0
|
||||||
|
{1,2,2,2},
|
||||||
|
{3,4,4,4},
|
||||||
|
{5,6,7,8}, //3
|
||||||
|
{9,10,11,11},
|
||||||
|
{12,13,13,13}, //5
|
||||||
|
{14,14,14,14},
|
||||||
|
{255,255,255,255},
|
||||||
|
{15,16,17,17},
|
||||||
|
{255,255,255,255},
|
||||||
|
{18,19,20,29}, //10
|
||||||
|
{22,23,27,28},
|
||||||
|
{21,25,26,30},
|
||||||
|
{24,31,32,33}, //13
|
||||||
|
{34,34,34,34},
|
||||||
|
{255,255,255,255}, //15
|
||||||
|
{255,255,255,255}, //16
|
||||||
|
{39,39,39,39},
|
||||||
|
{36,37,38,45},
|
||||||
|
{35,43,44,48}, //19
|
||||||
|
{41,42,46,47},
|
||||||
|
{40,49,50,51},
|
||||||
|
{255,255,255,255}, //22
|
||||||
|
{52,53,54,54},
|
||||||
|
{255,255,255,255},
|
||||||
|
{55,55,55,55},
|
||||||
|
{56,57,57,57},
|
||||||
|
{58,59,60,60}, //27
|
||||||
|
{61,62,63,64},
|
||||||
|
{65,66,66,66},
|
||||||
|
{67,68,68,68},
|
||||||
|
{69,69,69,69} //31
|
||||||
|
};
|
||||||
|
|
||||||
void setupboxs();
|
void setupboxs();
|
||||||
void colorBox(uint8_t boxid, uint32_t c);
|
void colorBox(uint8_t boxid, uint32_t c);
|
||||||
|
void colorCircleSegment(uint8_t segmentid, uint32_t c);
|
||||||
void ColorSetParameters(String parameters);
|
void ColorSetParameters(String parameters);
|
||||||
uint8_t Red(uint32_t color);
|
uint8_t Red(uint32_t color);
|
||||||
uint8_t Green(uint32_t color);
|
uint8_t Green(uint32_t color);
|
||||||
|
@ -103,6 +140,14 @@ class NeoPatterns : public Adafruit_NeoPixel
|
||||||
float SavedPlasmaPhaseIncrement;
|
float SavedPlasmaPhaseIncrement;
|
||||||
float PlasmaColorStretch;
|
float PlasmaColorStretch;
|
||||||
float SavedPlasmaColorStretch;
|
float SavedPlasmaColorStretch;
|
||||||
|
|
||||||
|
float Radarposition;
|
||||||
|
float Radarspeed;
|
||||||
|
float Radarthickness;
|
||||||
|
float Radarfadelength;
|
||||||
|
float Radardotposition;
|
||||||
|
uint8_t Radardotbrightness;
|
||||||
|
uint8_t Radardotfadespeed;
|
||||||
|
|
||||||
|
|
||||||
uint32_t DimColor(uint32_t color);
|
uint32_t DimColor(uint32_t color);
|
||||||
|
|
|
@ -193,6 +193,9 @@ bool onSetEffect(const HomieRange& range, const String& value) {
|
||||||
else if (effect == "plasma") {
|
else if (effect == "plasma") {
|
||||||
strip.Plasma();
|
strip.Plasma();
|
||||||
}
|
}
|
||||||
|
else if (effect == "radar") {
|
||||||
|
strip.Radar();
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
// Test whether command with parameters was sent
|
// Test whether command with parameters was sent
|
||||||
int sep = value.indexOf("|");
|
int sep = value.indexOf("|");
|
||||||
|
|
Loading…
Reference in New Issue