random, set, off and pixels functions implemented
This commit is contained in:
parent
87edf61c7d
commit
e78b371e73
|
@ -11,23 +11,51 @@ Adafruit_NeoPixel strip = Adafruit_NeoPixel(64, PIN, NEO_GRB + NEO_KHZ800);
|
||||||
|
|
||||||
HomieNode homieNode("pixel", "commands");
|
HomieNode homieNode("pixel", "commands");
|
||||||
|
|
||||||
|
int xyToPos(int x, int y){ //convert x y pixel position to matrix position
|
||||||
|
if (y%2==0){
|
||||||
|
return (y*8+x);
|
||||||
|
}else{
|
||||||
|
return (y*8+(7-x));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int numToPos(int num){ //convert pixel number to actual 8x8 matrix position
|
||||||
|
int x=num%8;
|
||||||
|
int y=num/8;
|
||||||
|
return xyToPos(x,y);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t wheel(byte WheelPos) {
|
||||||
|
WheelPos = 255 - WheelPos;
|
||||||
|
if(WheelPos < 85) {
|
||||||
|
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
|
||||||
|
}
|
||||||
|
if(WheelPos < 170) {
|
||||||
|
WheelPos -= 85;
|
||||||
|
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
|
||||||
|
}
|
||||||
|
WheelPos -= 170;
|
||||||
|
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void led_fill(uint32_t c)
|
void led_fill(uint32_t c)
|
||||||
{
|
{
|
||||||
for (int i=0; i < strip.numPixels(); i++) {
|
for (int i=0; i < strip.numPixels(); i++) {
|
||||||
strip.setPixelColor(i, c); //turn every third pixel on
|
strip.setPixelColor(i, c);
|
||||||
}
|
}
|
||||||
strip.show();
|
strip.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool effectHandler(const HomieRange& range, const String& value) {
|
void led_random()
|
||||||
int sep = value.indexOf("|");
|
{
|
||||||
|
for (int i=0; i < strip.numPixels(); i++) {
|
||||||
|
strip.setPixelColor(i, wheel(random(0,255)));
|
||||||
|
}
|
||||||
Homie.getLogger() << "-> " << value << endl;
|
strip.show();
|
||||||
|
}
|
||||||
//Serial.print("->"); Serial.println(value);
|
|
||||||
|
|
||||||
|
uint32_t parseColor(String value){
|
||||||
if (value.charAt(0)=='#'){ //solid fill
|
if (value.charAt(0)=='#'){ //solid fill
|
||||||
String color=value.substring(1);
|
String color=value.substring(1);
|
||||||
int number = (int) strtol( &color[0], NULL, 16);
|
int number = (int) strtol( &color[0], NULL, 16);
|
||||||
|
@ -41,26 +69,62 @@ bool effectHandler(const HomieRange& range, const String& value) {
|
||||||
//Serial.print("r=");Serial.print(r);
|
//Serial.print("r=");Serial.print(r);
|
||||||
//Serial.print(" g=");Serial.print(g);
|
//Serial.print(" g=");Serial.print(g);
|
||||||
//Serial.print(" b=");Serial.println(b);
|
//Serial.print(" b=");Serial.println(b);
|
||||||
|
return strip.Color(r, g, b);
|
||||||
|
|
||||||
led_fill(strip.Color(r, g, b));
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool effectHandler(const HomieRange& range, const String& value) {
|
||||||
|
Homie.getLogger() << "-> " << value << endl;
|
||||||
|
int sep = value.indexOf("|");
|
||||||
|
|
||||||
|
String command=value.substring(0,sep);
|
||||||
|
String parameters=value.substring(sep+1);
|
||||||
|
Homie.getLogger() << "command=" << command << " parameters=" << parameters << endl;
|
||||||
|
|
||||||
|
if (command.equals("fill")){
|
||||||
|
led_fill(parseColor(parameters));
|
||||||
|
}else if (command.equals("off")){
|
||||||
|
led_fill(strip.Color(0, 0, 0));
|
||||||
|
}else if (command.equals("random")){
|
||||||
|
led_random();
|
||||||
|
}else if (command.equals("set")){
|
||||||
|
int x=parameters.substring(0,1).toInt();
|
||||||
|
int y=parameters.substring(1,2).toInt();
|
||||||
|
String cstr=parameters.substring(2,9);
|
||||||
|
strip.setPixelColor(xyToPos(x,y), parseColor(cstr));
|
||||||
|
strip.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool pixelsHandler(const HomieRange& range, const String& value) {
|
bool pixelsHandler(const HomieRange& range, const String& value) {
|
||||||
int sep = value.indexOf("|");
|
|
||||||
|
|
||||||
|
String remaining=value;
|
||||||
if(sep > 0) {
|
int i=0;
|
||||||
|
do{
|
||||||
|
String current=remaining.substring(0,7);
|
||||||
|
Homie.getLogger() << i << ":" << current << endl;
|
||||||
|
uint32_t currentcolor=parseColor(current);
|
||||||
|
|
||||||
|
strip.setPixelColor(i, currentcolor);
|
||||||
|
i++;
|
||||||
|
|
||||||
//Homie.getLogger() << "scroll " << value << " wait " << wait << endl;
|
remaining=remaining.substring(7);
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
//Homie.getLogger() << "scroll " << value << endl;
|
}while(remaining.length()>2 && (i<strip.numPixels()));
|
||||||
|
Homie.getLogger() << " filling rest with black" << endl;
|
||||||
|
while(i<strip.numPixels()){
|
||||||
|
strip.setPixelColor(numToPos(i), strip.Color(0,0,0));
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
strip.show();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue