add circle mapping and radar effect

This commit is contained in:
interfisch 2018-01-09 19:04:19 +01:00
parent ff6cc12e7f
commit 04362e9fb3
3 changed files with 123 additions and 1 deletions

View File

@ -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)

View File

@ -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);
@ -104,6 +141,14 @@ class NeoPatterns : public Adafruit_NeoPixel
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);
void Increment(); void Increment();

View File

@ -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("|");