From a8c09dd27b00f2f5875c0ac74608f52284c189f7 Mon Sep 17 00:00:00 2001 From: Julien Cabillot Date: Fri, 10 Mar 2017 11:01:33 +0100 Subject: [PATCH] ajout de colorpattern --- arduino/mqttfastledmenu/mqttfastledmenu.cpp | 119 +++++++++++++++++++- 1 file changed, 117 insertions(+), 2 deletions(-) diff --git a/arduino/mqttfastledmenu/mqttfastledmenu.cpp b/arduino/mqttfastledmenu/mqttfastledmenu.cpp index a8d2fdb..0f5d381 100644 --- a/arduino/mqttfastledmenu/mqttfastledmenu.cpp +++ b/arduino/mqttfastledmenu/mqttfastledmenu.cpp @@ -1,11 +1,14 @@ #include -#include "mqttfastledmenu.h" - +// TODO : essayer, devrait limiter le flikering +//#define FASTLED_ALLOW_INTERRUPTS 0 +#define FASTLED_ESP8266_NODEMCU_PIN_ORDER #include #include #include +#include "mqttfastledmenu.h" + // LED int brightness = LED_BRIGHTNESS_DEFAULT; int color = LED_COLOR_DEFAULT; @@ -21,6 +24,15 @@ WiFiClient espClient; char message_buff[100]; PubSubClient client(espClient); + +//////////////////////////////// ColorPalette +CRGBPalette16 currentPalette; +TBlendType currentBlending; + +extern CRGBPalette16 myRedWhiteBluePalette; +extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM; +/////////////////////////////////////////////// + void setup() { Serial.begin(SERIAL_SPEED); @@ -52,6 +64,11 @@ void setup() client.loop(); } + //////////////////////////////////////////////// ColorPalette + currentPalette = RainbowColors_p; + currentBlending = LINEARBLEND; + ///////////////////////////////////////////////////////////// + Serial.println("End of setup"); } @@ -199,6 +216,102 @@ void ledFullColor() FastLED.delay(100 / speed); } +///////////////////////////////// ColorPalette + + +void ledColorPattern() +{ + ChangePalettePeriodically(); + + static uint8_t startIndex = 0; + startIndex = startIndex + 1; /* motion speed */ + + FillLEDsFromPaletteColors( startIndex); + + FastLED.show(); + FastLED.delay(1000 / speed); +} + +void FillLEDsFromPaletteColors( uint8_t colorIndex) +{ + uint8_t brightness = 255; + + for( int i = 0; i < LED_NUM; i++) { + leds[i] = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending); + colorIndex += 3; + } +} + + +// There are several different palettes of colors demonstrated here. +// +// FastLED provides several 'preset' palettes: RainbowColors_p, RainbowStripeColors_p, +// OceanColors_p, CloudColors_p, LavaColors_p, ForestColors_p, and PartyColors_p. +// +// Additionally, you can manually define your own color palettes, or you can write +// code that creates color palettes on the fly. All are shown here. + +void ChangePalettePeriodically() +{ + uint8_t secondHand = (millis() / 1000) % 60; + static uint8_t lastSecond = 99; + + if( lastSecond != secondHand) { + lastSecond = secondHand; + if( secondHand == 0) { currentPalette = RainbowColors_p; currentBlending = LINEARBLEND; } + if( secondHand == 10) { currentPalette = RainbowStripeColors_p; currentBlending = NOBLEND; } + if( secondHand == 15) { currentPalette = RainbowStripeColors_p; currentBlending = LINEARBLEND; } + if( secondHand == 20) { SetupPurpleAndGreenPalette(); currentBlending = LINEARBLEND; } + if( secondHand == 25) { SetupTotallyRandomPalette(); currentBlending = LINEARBLEND; } + if( secondHand == 30) { SetupBlackAndWhiteStripedPalette(); currentBlending = NOBLEND; } + if( secondHand == 35) { SetupBlackAndWhiteStripedPalette(); currentBlending = LINEARBLEND; } + if( secondHand == 40) { currentPalette = CloudColors_p; currentBlending = LINEARBLEND; } + if( secondHand == 45) { currentPalette = PartyColors_p; currentBlending = LINEARBLEND; } + if( secondHand == 50) { currentPalette = myRedWhiteBluePalette_p; currentBlending = NOBLEND; } + if( secondHand == 55) { currentPalette = myRedWhiteBluePalette_p; currentBlending = LINEARBLEND; } + } +} + +// This function fills the palette with totally random colors. +void SetupTotallyRandomPalette() +{ + for( int i = 0; i < 16; i++) { + currentPalette[i] = CHSV( random8(), 255, random8()); + } +} + +// This function sets up a palette of black and white stripes, +// using code. Since the palette is effectively an array of +// sixteen CRGB colors, the various fill_* functions can be used +// to set them up. +void SetupBlackAndWhiteStripedPalette() +{ + // 'black out' all 16 palette entries... + fill_solid( currentPalette, 16, CRGB::Black); + // and set every fourth one to white. + currentPalette[0] = CRGB::White; + currentPalette[4] = CRGB::White; + currentPalette[8] = CRGB::White; + currentPalette[12] = CRGB::White; + +} + +// This function sets up a palette of purple and green stripes. +void SetupPurpleAndGreenPalette() +{ + CRGB purple = CHSV( HUE_PURPLE, 255, 255); + CRGB green = CHSV( HUE_GREEN, 255, 255); + CRGB black = CRGB::Black; + + currentPalette = CRGBPalette16( + green, green, black, black, + purple, purple, black, black, + green, green, black, black, + purple, purple, black, black ); +} + +////////////////////////////////////////////////////////////////////////////// + void loop() { // MQTT testConnectMQTT(); @@ -212,6 +325,8 @@ void loop() { ledCylon(); } else if (ledEffect == LED_EFFECT_FULLRED) { ledFullColor(); + } else if (ledEffect == LED_EFFET_COLORPATTERN) { + ledColorPattern(); } else { ledError(); }