Merge branch 'master' of https://github.com/Aircoookie/WLED
This commit is contained in:
		| @@ -7,15 +7,15 @@ data_dir = ./wled00/data | ||||
| ;lib_extra_dirs = ./wled00/src | ||||
| lib_dir = ./wled00/src | ||||
| ; Please uncomment one of the 5 lines below to select your board | ||||
| env_default = nodemcuv2 | ||||
| ; env_default = esp01 | ||||
| ; env_default = esp01_1m | ||||
| ; env_default = esp07 | ||||
| ; env_default = d1_mini | ||||
| ; env_default = esp32dev | ||||
| ; env_default = esp8285_4CH_MagicHome | ||||
| ; env_default = esp8285_4CH_H801 | ||||
| ; env_default = esp8285_5CH_H801 | ||||
| default_envs = nodemcuv2 | ||||
| ; default_envs = esp01 | ||||
| ; default_envs = esp01_1m | ||||
| ; default_envs = esp07 | ||||
| ; default_envs = d1_mini | ||||
| ; default_envs = esp32dev | ||||
| ; default_envs = esp8285_4CH_MagicHome | ||||
| ; default_envs = esp8285_4CH_H801 | ||||
| ; default_envs = esp8285_5CH_H801 | ||||
|  | ||||
| [common] | ||||
| framework = arduino | ||||
|   | ||||
| @@ -1,5 +1,7 @@ | ||||
| # Almost universal controller board for outdoor applications | ||||
| This usermod is using ideas from @mrVanboy and @400killer | ||||
| ## Project repository | ||||
| -   [Original repository](https://github.com/srg74/Controller-for-WLED-firmware) - Main controller repository | ||||
| ## Features | ||||
| *   SSD1306 128x32 and 128x64 I2C OLED display | ||||
| *   On screen IP address, SSID and controller status (e.g. ON or OFF, recent effect) | ||||
| @@ -27,7 +29,7 @@ Uncomment `U8g2@~2.27.3`,`DallasTemperature@~3.8.0`,`OneWire@~2.3.5 under` `[com | ||||
| ... | ||||
| lib_deps_external = | ||||
|   ... | ||||
|   #For use SSD1306 0.91" OLED display uncomment following | ||||
|   #For use SSD1306 OLED display uncomment following | ||||
|   U8g2@~2.27.3 | ||||
|   #For Dallas sensor uncomment following 2 lines | ||||
|   DallasTemperature@~3.8.0 | ||||
|   | ||||
| @@ -17,15 +17,9 @@ long lastMeasure = 0; | ||||
| // or check the gallery: | ||||
| // https://github.com/olikraus/u8g2/wiki/gallery | ||||
| // --> First choise of cheap I2C OLED 128X32 | ||||
| <<<<<<< HEAD | ||||
| U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA | ||||
| // --> Second choise of cheap I2C OLED 128X64 | ||||
| //U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA | ||||
| ======= | ||||
| //U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA | ||||
| // --> Second choise of cheap I2C OLED 128X64 | ||||
| U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE, U8X8_PIN_SCL, U8X8_PIN_SDA); // Pins are Reset, SCL, SDA | ||||
| >>>>>>> 1680c014057bb993974950f37b14369b398ca647 | ||||
| // gets called once at boot. Do all initialization that doesn't depend on | ||||
| // network here | ||||
| void userSetup() { | ||||
|   | ||||
							
								
								
									
										28
									
								
								usermods/blynk_relay_control/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								usermods/blynk_relay_control/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| # Blynk controllable relay | ||||
| This usermod allows controlling a relay state from the user variables. It also allows the user variables to be set over Blynk. | ||||
|  | ||||
| Optionally, the servo can have a reset timer to go back to it's default state after an interval. This interval is set through userVar1. | ||||
|  | ||||
| ## Instalation | ||||
|  | ||||
| Replace the WLED06_usermod.ino file in Aircoookies WLED folder with the one here. | ||||
|  | ||||
| ## Customizations | ||||
|  | ||||
| Update the following parameters in WLED06_usermod.ino to configure the mod's behavior: | ||||
|  | ||||
| ```cpp | ||||
| //Which pin is the relay connected to | ||||
| #define RELAY_PIN 5 | ||||
| //Which pin state should the relay default to | ||||
| #define RELAY_PIN_DEFAULT LOW | ||||
| //If >0 The controller returns to RELAY_PIN_DEFAULT after this time in milliseconds | ||||
| #define RELAY_PIN_TIMER_DEFAULT 3000 | ||||
|  | ||||
| //Blynk virtual pin for controlling relay | ||||
| #define BLYNK_USER_VAR0_PIN V9 | ||||
| //Blynk virtual pin for controlling relay timer | ||||
| #define BLYNK_USER_VAR1_PIN V10 | ||||
| //Number of milliseconds between updating blynk | ||||
| #define BLYNK_RELAY_UPDATE_INTERVAL 5000 | ||||
| ``` | ||||
							
								
								
									
										96
									
								
								usermods/blynk_relay_control/wled06_usermod.ino
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								usermods/blynk_relay_control/wled06_usermod.ino
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,96 @@ | ||||
| /* | ||||
|  * This file allows you to add own functionality to WLED more easily | ||||
|  * See: https://github.com/Aircoookie/WLED/wiki/Add-own-functionality | ||||
|  * EEPROM bytes 2750+ are reserved for your custom use case. (if you extend #define EEPSIZE in wled01_eeprom.h) | ||||
|  * bytes 2400+ are currently ununsed, but might be used for future wled features | ||||
|  */ | ||||
|  | ||||
| //Use userVar0 (API calls &U0=, uint16_t) to set relay state | ||||
| #define relayPinState userVar0 | ||||
| //Use userVar1 (API calls &U1=, uint16_t) to set relay timer duration | ||||
| //Ignored if 0, otherwise number of milliseconds to allow relay to stay in | ||||
| //non default state. | ||||
| #define relayTimerInterval userVar1 | ||||
|  | ||||
| //Which pin is the relay connected to | ||||
| #define RELAY_PIN 5 | ||||
| //Which pin state should the relay default to | ||||
| #define RELAY_PIN_DEFAULT LOW | ||||
| //If >0 The controller returns to RELAY_PIN_DEFAULT after this time in milliseconds | ||||
| #define RELAY_PIN_TIMER_DEFAULT 3000 | ||||
|  | ||||
| //Blynk virtual pin for controlling relay | ||||
| #define BLYNK_USER_VAR0_PIN V9 | ||||
| //Blynk virtual pin for controlling relay timer | ||||
| #define BLYNK_USER_VAR1_PIN V10 | ||||
| //Number of milliseconds between updating blynk | ||||
| #define BLYNK_RELAY_UPDATE_INTERVAL 5000 | ||||
|  | ||||
| //Is the timer for resetting the relay active | ||||
| bool relayTimerStarted = false; | ||||
| //millis() time after which relay will be reset | ||||
| unsigned long relayTimeToDefault = 0; | ||||
| //millis() time after which relay vars in Blynk will be sent | ||||
| unsigned long relayBlynkUpdateTime = 0; | ||||
|  | ||||
| //gets called once at boot. Do all initialization that doesn't depend on network here | ||||
| void userSetup() | ||||
| { | ||||
|   relayPinState = RELAY_PIN_DEFAULT; | ||||
|   relayTimerInterval = RELAY_PIN_TIMER_DEFAULT; | ||||
|   pinMode(RELAY_PIN, OUTPUT); | ||||
|   digitalWrite(RELAY_PIN, relayPinState); | ||||
| } | ||||
|  | ||||
| //gets called every time WiFi is (re-)connected. Initialize own network interfaces here | ||||
| void userConnected() | ||||
| { | ||||
| } | ||||
|  | ||||
| //loop. You can use "if (WLED_CONNECTED)" to check for successful connection | ||||
| void userLoop() | ||||
| { | ||||
|   //Normalize relayPinState to an accepted value | ||||
|   if (relayPinState != HIGH && relayPinState != LOW) { | ||||
|     relayPinState = RELAY_PIN_DEFAULT; | ||||
|   } | ||||
|   //If relay changes and relayTimerInterval is set, start a timer to change back | ||||
|   if (relayTimerInterval != 0 && | ||||
|       relayPinState != RELAY_PIN_DEFAULT && | ||||
|       !relayTimerStarted ) { | ||||
|     relayTimerStarted = true; | ||||
|     relayTimeToDefault = millis() + relayTimerInterval; | ||||
|   } | ||||
|   //If manually changed back to default, cancel timer | ||||
|   if (relayTimerStarted && relayPinState == RELAY_PIN_DEFAULT ) { | ||||
|     relayTimerStarted = false; | ||||
|   } | ||||
|   //If timer completes, set relay back to default | ||||
|   if (relayTimerStarted && millis() > relayTimeToDefault) { | ||||
|     relayPinState = RELAY_PIN_DEFAULT; | ||||
|     relayTimerStarted = false; | ||||
|   } | ||||
|   digitalWrite(RELAY_PIN, relayPinState); | ||||
|   updateRelayBlynk(); | ||||
| } | ||||
|  | ||||
| //Update Blynk with state of userVars at BLYNK_RELAY_UPDATE_INTERVAL | ||||
| void updateRelayBlynk() | ||||
| { | ||||
|   if (!WLED_CONNECTED) return; | ||||
|   if (relayBlynkUpdateTime > millis()) return; | ||||
|   Blynk.virtualWrite(BLYNK_USER_VAR0_PIN, userVar0); | ||||
|   Blynk.virtualWrite(BLYNK_USER_VAR1_PIN, userVar1); | ||||
|   relayBlynkUpdateTime = millis() + BLYNK_RELAY_UPDATE_INTERVAL; | ||||
| } | ||||
|  | ||||
| //Add Blynk callback for setting userVar0 | ||||
| BLYNK_WRITE(BLYNK_USER_VAR0_PIN) | ||||
| { | ||||
|   userVar0 = param.asInt(); | ||||
| } | ||||
| //Add Blynk callback for setting userVar1 | ||||
| BLYNK_WRITE(BLYNK_USER_VAR1_PIN) | ||||
| { | ||||
|   userVar1 = param.asInt(); | ||||
| } | ||||
| @@ -2970,8 +2970,9 @@ uint16_t WS2812FX::mode_plasma(void) { | ||||
|   for (int i = 0; i < SEGLEN; i++) {   // For each of the LED's in the strand, set color &  brightness based on a wave as follows: | ||||
|     uint8_t colorIndex = cubicwave8((i*(1+ 3*(SEGMENT.speed >> 5)))+(thisPhase) & 0xFF)/2   // factor=23 // Create a wave and add a phase change and add another wave with its own phase change. | ||||
|                              + cos8((i*(1+ 2*(SEGMENT.speed >> 5)))+(thatPhase) & 0xFF)/2;  // factor=15 // Hey, you can even change the frequencies if you wish. | ||||
|     uint8_t thisBright = qsub8(colorIndex, beatsin8(6,0,128)); | ||||
|     setPixelColor(i, color_blend(SEGCOLOR(1), color_from_palette(colorIndex, false, false, 0), thisBright)); | ||||
|     uint8_t thisBright = qsub8(colorIndex, beatsin8(6,0, (255 - SEGMENT.intensity)|0x01 )); | ||||
|     CRGB color = ColorFromPalette(currentPalette, colorIndex, thisBright, LINEARBLEND); | ||||
|     setPixelColor(i, color.red, color.green, color.blue); | ||||
|   } | ||||
|  | ||||
|   return FRAMETIME; | ||||
|   | ||||
| @@ -248,7 +248,7 @@ public: | ||||
|             if        (color.R == 255 & color.G == 255 && color.B == 255 && color.W == 255) {   | ||||
|               SetRgbwPwm(0, 0, 0,                  0, color.W * b / 255); | ||||
|             } else if (color.R == 127 & color.G == 127 && color.B == 127 && color.W == 255) {   | ||||
|               SetRgbwPwm(0, 0, 0, color.W * b / 512, colorW.W * b / 255); | ||||
|               SetRgbwPwm(0, 0, 0, color.W * b / 512, color.W * b / 255); | ||||
|             } else if (color.R ==   0 & color.G ==   0 && color.B ==   0 && color.W == 255) {   | ||||
|               SetRgbwPwm(0, 0, 0, color.W * b / 255,                  0); | ||||
|             } else if (color.R == 130 & color.G ==  90 && color.B ==   0 && color.W == 255) {   | ||||
| @@ -256,7 +256,7 @@ public: | ||||
|             } else if (color.R == 255 & color.G == 153 && color.B ==   0 && color.W == 255) {   | ||||
|               SetRgbwPwm(0, 0, 0, color.W * b / 255,                  0); | ||||
|             } else {  // not only white colors | ||||
|               SetRgbwPwm(color.R * b / 255, colorW.G * b / 255, colorW.B * b / 255, color.W * b / 255); | ||||
|               SetRgbwPwm(color.R * b / 255, color.G * b / 255, color.B * b / 255, color.W * b / 255); | ||||
|             } | ||||
|           #else | ||||
|             SetRgbwPwm(color.R * b / 255, color.G * b / 255, color.B * b / 255, color.W * b / 255); | ||||
|   | ||||
| @@ -147,10 +147,10 @@ void decodeIR24OLD(uint32_t code) | ||||
|     case IR24_OLD_MAGENTA   : colorFromUint32(COLOR_MAGENTA);      break; | ||||
|     case IR24_OLD_PINK      : colorFromUint32(COLOR_PINK);         break; | ||||
|     case IR24_OLD_WHITE     : colorFromUint32(COLOR_WHITE);        effectCurrent = 0;     break; | ||||
|     case IR24_OLD_FLASH     : if (!applyPreset(1)) effectCurrent = FX_MODE_COLORTWINKLE;  effectPalette = 0; break; | ||||
|     case IR24_OLD_STROBE    : if (!applyPreset(2)) effectCurrent = FX_MODE_RAINBOW_CYCLE; effectPalette = 0; break; | ||||
|     case IR24_OLD_FADE      : if (!applyPreset(3)) effectCurrent = FX_MODE_BREATH;        effectPalette = 0; break; | ||||
|     case IR24_OLD_SMOOTH    : if (!applyPreset(4)) effectCurrent = FX_MODE_RAINBOW;       effectPalette = 0; break; | ||||
|     case IR24_OLD_FLASH     : if (!applyPreset(1)) { effectCurrent = FX_MODE_COLORTWINKLE;  effectPalette = 0; } break; | ||||
|     case IR24_OLD_STROBE    : if (!applyPreset(2)) { effectCurrent = FX_MODE_RAINBOW_CYCLE; effectPalette = 0; } break; | ||||
|     case IR24_OLD_FADE      : if (!applyPreset(3)) { effectCurrent = FX_MODE_BREATH;        effectPalette = 0; } break; | ||||
|     case IR24_OLD_SMOOTH    : if (!applyPreset(4)) { effectCurrent = FX_MODE_RAINBOW;       effectPalette = 0; } break; | ||||
|     default: return; | ||||
|   } | ||||
|   lastValidCode = code; | ||||
| @@ -180,13 +180,13 @@ void decodeIR24CT(uint32_t code) | ||||
|     case IR24_CT_PURPLE     : colorFromUint32(COLOR_PURPLE);       break; | ||||
|     case IR24_CT_MAGENTA    : colorFromUint32(COLOR_MAGENTA);      break; | ||||
|     case IR24_CT_PINK       : colorFromUint32(COLOR_PINK);         break; | ||||
|     case IR24_CT_COLDWHITE  : colorFromUint32(COLOR_COLDWHITE);    effectCurrent = 0;  break; | ||||
|     case IR24_CT_WARMWHITE  : colorFromUint32(COLOR_WARMWHITE);    effectCurrent = 0;  break; | ||||
|     case IR24_CT_CTPLUS     : colorFromUint32(COLOR_COLDWHITE2);   effectCurrent = 0;  break; | ||||
|     case IR24_CT_CTMINUS    : colorFromUint32(COLOR_WARMWHITE2);   effectCurrent = 0;  break; | ||||
|     case IR24_CT_COLDWHITE  : colorFromUint32(COLOR2_COLDWHITE);    effectCurrent = 0;  break; | ||||
|     case IR24_CT_WARMWHITE  : colorFromUint32(COLOR2_WARMWHITE);    effectCurrent = 0;  break; | ||||
|     case IR24_CT_CTPLUS     : colorFromUint32(COLOR2_COLDWHITE2);   effectCurrent = 0;  break; | ||||
|     case IR24_CT_CTMINUS    : colorFromUint32(COLOR2_WARMWHITE2);   effectCurrent = 0;  break; | ||||
|     case IR24_CT_MEMORY   : { | ||||
|       if (col[3] > 0) col[3] = 0;  | ||||
|       else colorFromUint32(COLOR_NEUTRALWHITE); effectCurrent = 0; }                    break; | ||||
|       else colorFromUint32(COLOR2_NEUTRALWHITE); effectCurrent = 0; }                   break; | ||||
|     default: return;  | ||||
|   } | ||||
|   lastValidCode = code; | ||||
| @@ -243,10 +243,10 @@ void decodeIR40(uint32_t code) | ||||
|     case IR40_SLOW         : relativeChange(&effectSpeed, -10, 5);                       break; | ||||
|     case IR40_JUMP7        : relativeChange(&effectIntensity, 10);                       break; | ||||
|     case IR40_AUTO         : relativeChange(&effectIntensity, -10, 5);                   break; | ||||
|     case IR40_JUMP3        : if (!applyPreset(1)) effectCurrent = FX_MODE_STATIC;        effectPalette = 0; break; | ||||
|     case IR40_FADE3        : if (!applyPreset(2)) effectCurrent = FX_MODE_BREATH;        effectPalette = 0; break; | ||||
|     case IR40_FADE7        : if (!applyPreset(3)) effectCurrent = FX_MODE_FIRE_FLICKER;  effectPalette = 0; break; | ||||
|     case IR40_FLASH        : if (!applyPreset(4)) effectCurrent = FX_MODE_RAINBOW;       effectPalette = 0; break; | ||||
|     case IR40_JUMP3        : if (!applyPreset(1)) { effectCurrent = FX_MODE_STATIC;        effectPalette = 0; } break; | ||||
|     case IR40_FADE3        : if (!applyPreset(2)) { effectCurrent = FX_MODE_BREATH;        effectPalette = 0; } break; | ||||
|     case IR40_FADE7        : if (!applyPreset(3)) { effectCurrent = FX_MODE_FIRE_FLICKER;  effectPalette = 0; } break; | ||||
|     case IR40_FLASH        : if (!applyPreset(4)) { effectCurrent = FX_MODE_RAINBOW;       effectPalette = 0; } break; | ||||
|   } | ||||
|   lastValidCode = code; | ||||
|   colorUpdated(2); //for notifier, IR is considered a button input  | ||||
| @@ -299,12 +299,12 @@ void decodeIR44(uint32_t code) | ||||
|     case IR44_BLUEMINUS   : relativeChange(&effectIntensity, -10, 5);                   break; | ||||
|     case IR44_QUICK       : relativeChange(&effectSpeed, 10);                           break; | ||||
|     case IR44_SLOW        : relativeChange(&effectSpeed, -10, 5);                       break; | ||||
|     case IR44_DIY1        : if (!applyPreset(1)) effectCurrent = FX_MODE_STATIC;        effectPalette = 0; break; | ||||
|     case IR44_DIY2        : if (!applyPreset(2)) effectCurrent = FX_MODE_BREATH;        effectPalette = 0; break; | ||||
|     case IR44_DIY3        : if (!applyPreset(3)) effectCurrent = FX_MODE_FIRE_FLICKER;  effectPalette = 0; break; | ||||
|     case IR44_DIY4        : if (!applyPreset(4)) effectCurrent = FX_MODE_RAINBOW;       effectPalette = 0; break; | ||||
|     case IR44_DIY5        : if (!applyPreset(5)) effectCurrent = FX_MODE_METEOR_SMOOTH; effectPalette = 0; break; | ||||
|     case IR44_DIY6        : if (!applyPreset(6)) effectCurrent = FX_MODE_RAIN;          effectPalette = 0; break; | ||||
|     case IR44_DIY1        : if (!applyPreset(1)) { effectCurrent = FX_MODE_STATIC;        effectPalette = 0; } break; | ||||
|     case IR44_DIY2        : if (!applyPreset(2)) { effectCurrent = FX_MODE_BREATH;        effectPalette = 0; } break; | ||||
|     case IR44_DIY3        : if (!applyPreset(3)) { effectCurrent = FX_MODE_FIRE_FLICKER;  effectPalette = 0; } break; | ||||
|     case IR44_DIY4        : if (!applyPreset(4)) { effectCurrent = FX_MODE_RAINBOW;       effectPalette = 0; } break; | ||||
|     case IR44_DIY5        : if (!applyPreset(5)) { effectCurrent = FX_MODE_METEOR_SMOOTH; effectPalette = 0; } break; | ||||
|     case IR44_DIY6        : if (!applyPreset(6)) { effectCurrent = FX_MODE_RAIN;          effectPalette = 0; } break; | ||||
|     case IR44_AUTO        : effectCurrent = FX_MODE_STATIC;                             break; | ||||
|     case IR44_FLASH       : effectCurrent = FX_MODE_PALETTE;                            break; | ||||
|     case IR44_JUMP3       : bri = 63;                                                   break; | ||||
| @@ -336,10 +336,10 @@ void decodeIR21(uint32_t code) | ||||
|     case IR21_PURPLE:    colorFromUint32(COLOR_PURPLE);    break; | ||||
|     case IR21_PINK:      colorFromUint32(COLOR_PINK);      break; | ||||
|     case IR21_WHITE:     colorFromUint32(COLOR_WHITE);           effectCurrent = 0;  break; | ||||
|     case IR21_FLASH:     if (!applyPreset(1)) effectCurrent = FX_MODE_COLORTWINKLE;  break; | ||||
|     case IR21_STROBE:    if (!applyPreset(2)) effectCurrent = FX_MODE_RAINBOW_CYCLE; break; | ||||
|     case IR21_FADE:      if (!applyPreset(3)) effectCurrent = FX_MODE_BREATH;        break; | ||||
|     case IR21_SMOOTH:    if (!applyPreset(4)) effectCurrent = FX_MODE_RAINBOW;       break; | ||||
|     case IR21_FLASH:     if (!applyPreset(1)) { effectCurrent = FX_MODE_COLORTWINKLE;  effectPalette = 0; } break; | ||||
|     case IR21_STROBE:    if (!applyPreset(2)) { effectCurrent = FX_MODE_RAINBOW_CYCLE; effectPalette = 0; } break; | ||||
|     case IR21_FADE:      if (!applyPreset(3)) { effectCurrent = FX_MODE_BREATH;        effectPalette = 0; } break; | ||||
|     case IR21_SMOOTH:    if (!applyPreset(4)) { effectCurrent = FX_MODE_RAINBOW;       effectPalette = 0; } break; | ||||
|     default: return; | ||||
|     } | ||||
|     lastValidCode = code; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 cschwinne
					cschwinne