Infrared support added
This commit is contained in:
parent
071ebe6ef2
commit
c0816c80ae
@ -2,10 +2,15 @@
|
|||||||
#ifndef NpbWrapper_h
|
#ifndef NpbWrapper_h
|
||||||
#define NpbWrapper_h
|
#define NpbWrapper_h
|
||||||
|
|
||||||
#define WORKAROUND_ESP32_BITBANG
|
//#define WORKAROUND_ESP32_BITBANG
|
||||||
//see https://github.com/Aircoookie/WLED/issues/2 for flicker free ESP32 support
|
//see https://github.com/Aircoookie/WLED/issues/2 for flicker free ESP32 support
|
||||||
|
|
||||||
#define LEDPIN 2 //strip pin. Any for ESP32, gpio2 is recommended for ESP8266
|
//PIN CONFIGURATION
|
||||||
|
#define LEDPIN 2 //strip pin. Any for ESP32, gpio2 is recommended for ESP8266
|
||||||
|
#define BTNPIN 0 //button pin. Needs to have pullup (gpio0 recommended)
|
||||||
|
#define IR_PIN 4 //infrared pin.
|
||||||
|
#define AUXPIN 15 //unused auxiliary output pin
|
||||||
|
|
||||||
|
|
||||||
//uncomment this if red and green are swapped
|
//uncomment this if red and green are swapped
|
||||||
//#define SWAPRG
|
//#define SWAPRG
|
||||||
|
89
wled00/ir_codes.h
Normal file
89
wled00/ir_codes.h
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
//Infrared codes from http://woodsgood.ca/projects/2015/02/13/rgb-led-strip-controllers-ir-codes/
|
||||||
|
#define IR24_BRIGHTER 0xF700FF
|
||||||
|
#define IR24_DARKER 0xF7807F
|
||||||
|
#define IR24_OFF 0xF740BF
|
||||||
|
#define IR24_ON 0xF7C03F
|
||||||
|
#define IR24_RED 0xF720DF
|
||||||
|
#define IR24_REDDISH 0xF710EF
|
||||||
|
#define IR24_ORANGE 0xF730CF
|
||||||
|
#define IR24_YELLOWISH 0xF708F7
|
||||||
|
#define IR24_YELLOW 0xF728D7
|
||||||
|
#define IR24_GREEN 0xF7A05F
|
||||||
|
#define IR24_GREENISH 0xF7906F
|
||||||
|
#define IR24_TURQUOISE 0xF7B04F
|
||||||
|
#define IR24_CYAN 0xF78877
|
||||||
|
#define IR24_AQUA 0xF7A857
|
||||||
|
#define IR24_BLUE 0xF7609F
|
||||||
|
#define IR24_DEEPBLUE 0xF750AF
|
||||||
|
#define IR24_PURPLE 0xF7708F
|
||||||
|
#define IR24_MAGENTA 0xF748B7
|
||||||
|
#define IR24_PINK 0xF76897
|
||||||
|
#define IR24_WHITE 0xF7E01F
|
||||||
|
#define IR24_FLASH 0xF7D02F
|
||||||
|
#define IR24_STROBE 0xF7F00F
|
||||||
|
#define IR24_FADE 0xF7C837
|
||||||
|
#define IR24_SMOOTH 0xF7E817
|
||||||
|
|
||||||
|
/* 44-key defs, to be done later
|
||||||
|
#define IR44_BPlus 0xFF3AC5 //
|
||||||
|
#define IR44_BMinus 0xFFBA45 //
|
||||||
|
#define IR44_ON 0xFF827D //
|
||||||
|
#define IR44_OFF 0xFF02FD //
|
||||||
|
#define IR44_R 0xFF1AE5 //
|
||||||
|
#define IR44_G 0xFF9A65 //
|
||||||
|
#define IR44_B 0xFFA25D //
|
||||||
|
#define IR44_W 0xFF22DD //
|
||||||
|
#define IR44_B1 0xFF2AD5 //
|
||||||
|
#define IR44_B2 0xFFAA55 //
|
||||||
|
#define IR44_B3 0xFF926D //
|
||||||
|
#define IR44_B4 0xFF12ED //
|
||||||
|
#define IR44_B5 0xFF0AF5 //
|
||||||
|
#define IR44_B6 0xFF8A75 //
|
||||||
|
#define IR44_B7 0xFFB24D //
|
||||||
|
#define IR44_B8 0xFF32CD //
|
||||||
|
#define IR44_B9 0xFF38C7 //
|
||||||
|
#define IR44_B10 0xFFB847 //
|
||||||
|
#define IR44_B11 0xFF7887 //
|
||||||
|
#define IR44_B12 0xFFF807 //
|
||||||
|
#define IR44_B13 0xFF18E7 //
|
||||||
|
#define IR44_B14 0xFF9867 //
|
||||||
|
#define IR44_B15 0xFF58A7 //
|
||||||
|
#define IR44_B16 0xFFD827 //
|
||||||
|
#define IR44_UPR 0xFF28D7 //
|
||||||
|
#define IR44_UPG 0xFFA857 //
|
||||||
|
#define IR44_UPB 0xFF6897 //
|
||||||
|
#define IR44_QUICK 0xFFE817 //
|
||||||
|
#define IR44_DOWNR 0xFF08F7 //
|
||||||
|
#define IR44_DOWNG 0xFF8877 //
|
||||||
|
#define IR44_DOWNB 0xFF48B7 //
|
||||||
|
#define IR44_SLOW 0xFFC837 //
|
||||||
|
#define IR44_DIY1 0xFF30CF //
|
||||||
|
#define IR44_DIY2 0xFFB04F //
|
||||||
|
#define IR44_DIY3 0xFF708F //
|
||||||
|
#define IR44_AUTO 0xFFF00F //
|
||||||
|
#define IR44_DIY4 0xFF10EF //
|
||||||
|
#define IR44_DIY5 0xFF906F //
|
||||||
|
#define IR44_DIY6 0xFF50AF //
|
||||||
|
#define IR44_FLASH 0xFFD02F //
|
||||||
|
#define IR44_JUMP3 0xFF20DF //
|
||||||
|
#define IR44_JUMP7 0xFFA05F //
|
||||||
|
#define IR44_FADE3 0xFF609F //
|
||||||
|
#define IR44_FADE7 0xFFE01F //
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define COLOR_RED 0xFF0000
|
||||||
|
#define COLOR_REDDISH 0xFF7800
|
||||||
|
#define COLOR_ORANGE 0xFFA000
|
||||||
|
#define COLOR_YELLOWISH 0xFFC800
|
||||||
|
#define COLOR_YELLOW 0xFFFF00
|
||||||
|
#define COLOR_GREEN 0x00FF00
|
||||||
|
#define COLOR_GREENISH 0x00FF78
|
||||||
|
#define COLOR_TURQUOISE 0x00FFA0
|
||||||
|
#define COLOR_CYAN 0x00FFDC
|
||||||
|
#define COLOR_AQUA 0x00C8FF
|
||||||
|
#define COLOR_BLUE 0x00A0FF
|
||||||
|
#define COLOR_DEEPBLUE 0x0000FF
|
||||||
|
#define COLOR_PURPLE 0xAA00FF
|
||||||
|
#define COLOR_MAGENTA 0xFF00DC
|
||||||
|
#define COLOR_PINK 0xFF00A0
|
||||||
|
#define COLOR_WHITE 0xFFFFDC
|
@ -24,7 +24,7 @@
|
|||||||
//#define WLED_DISABLE_MOBILE_UI
|
//#define WLED_DISABLE_MOBILE_UI
|
||||||
|
|
||||||
//to toggle usb serial debug (un)comment following line(s)
|
//to toggle usb serial debug (un)comment following line(s)
|
||||||
//#define DEBUG
|
//#define WLED_DEBUG
|
||||||
|
|
||||||
//library inclusions
|
//library inclusions
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
@ -33,11 +33,15 @@
|
|||||||
#include <ESPmDNS.h>
|
#include <ESPmDNS.h>
|
||||||
#include "src/dependencies/webserver/WebServer.h"
|
#include "src/dependencies/webserver/WebServer.h"
|
||||||
#include <HTTPClient.h>
|
#include <HTTPClient.h>
|
||||||
|
#include <IRremote.h>
|
||||||
#else
|
#else
|
||||||
#include <ESP8266WiFi.h>
|
#include <ESP8266WiFi.h>
|
||||||
#include <ESP8266mDNS.h>
|
#include <ESP8266mDNS.h>
|
||||||
#include <ESP8266WebServer.h>
|
#include <ESP8266WebServer.h>
|
||||||
#include <ESP8266HTTPClient.h>
|
#include <ESP8266HTTPClient.h>
|
||||||
|
#include <IRremoteESP8266.h>
|
||||||
|
#include <IRrecv.h>
|
||||||
|
#include <IRutils.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <EEPROM.h>
|
#include <EEPROM.h>
|
||||||
@ -60,10 +64,11 @@
|
|||||||
#include "html_settings.h"
|
#include "html_settings.h"
|
||||||
#include "html_other.h"
|
#include "html_other.h"
|
||||||
#include "WS2812FX.h"
|
#include "WS2812FX.h"
|
||||||
|
#include "ir_codes.h"
|
||||||
|
|
||||||
|
|
||||||
//version code in format yymmddb (b = daily build)
|
//version code in format yymmddb (b = daily build)
|
||||||
#define VERSION 1811162
|
#define VERSION 1811172
|
||||||
char versionString[] = "0.8.2-dev";
|
char versionString[] = "0.8.2-dev";
|
||||||
|
|
||||||
|
|
||||||
@ -77,9 +82,8 @@ char otaPass[33] = "wledota";
|
|||||||
|
|
||||||
|
|
||||||
//Hardware CONFIG (only changeble HERE, not at runtime)
|
//Hardware CONFIG (only changeble HERE, not at runtime)
|
||||||
//LED strip pin changeable in NpbWrapper.h. Only change for ESP32
|
//LED strip pin, button pin and IR pin changeable in NpbWrapper.h!
|
||||||
byte buttonPin = 0; //needs pull-up
|
|
||||||
byte auxPin = 15; //debug feature, use e.g. for external relay with API call AX=
|
|
||||||
byte auxDefaultState = 0; //0: input 1: high 2: low
|
byte auxDefaultState = 0; //0: input 1: high 2: low
|
||||||
byte auxTriggeredState = 0; //0: input 1: high 2: low
|
byte auxTriggeredState = 0; //0: input 1: high 2: low
|
||||||
char ntpServerName[] = "0.wled.pool.ntp.org"; //NTP server to use
|
char ntpServerName[] = "0.wled.pool.ntp.org"; //NTP server to use
|
||||||
@ -145,6 +149,7 @@ bool useHSBDefault = useHSB;
|
|||||||
|
|
||||||
//Sync CONFIG
|
//Sync CONFIG
|
||||||
bool buttonEnabled = true;
|
bool buttonEnabled = true;
|
||||||
|
bool irEnabled = true; //Infrared receiver
|
||||||
|
|
||||||
uint16_t udpPort = 21324; //WLED notifier default port
|
uint16_t udpPort = 21324; //WLED notifier default port
|
||||||
uint16_t udpRgbPort = 19446; //Hyperion port
|
uint16_t udpRgbPort = 19446; //Hyperion port
|
||||||
@ -492,6 +497,7 @@ void loop() {
|
|||||||
|
|
||||||
yield();
|
yield();
|
||||||
handleButton();
|
handleButton();
|
||||||
|
handleIR();
|
||||||
handleNetworkTime();
|
handleNetworkTime();
|
||||||
if (!onlyAP)
|
if (!onlyAP)
|
||||||
{
|
{
|
||||||
|
@ -246,7 +246,7 @@ void saveSettingsToEEPROM()
|
|||||||
writeStringToEEPROM(2333, mqttDeviceTopic, 32);
|
writeStringToEEPROM(2333, mqttDeviceTopic, 32);
|
||||||
writeStringToEEPROM(2366, mqttGroupTopic, 32);
|
writeStringToEEPROM(2366, mqttGroupTopic, 32);
|
||||||
|
|
||||||
EEPROM.commit();
|
commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -502,12 +502,16 @@ void loadSettingsFromEEPROM(bool first)
|
|||||||
//0: preset purpose byte 0:invalid 1:valid preset 1.0
|
//0: preset purpose byte 0:invalid 1:valid preset 1.0
|
||||||
//1:a 2:r 3:g 4:b 5:w 6:er 7:eg 8:eb 9:ew 10:fx 11:sx | custom chase 12:numP 13:numS 14:(0:fs 1:both 2:fe) 15:step 16:ix 17: fp 18-19:Zeros
|
//1:a 2:r 3:g 4:b 5:w 6:er 7:eg 8:eb 9:ew 10:fx 11:sx | custom chase 12:numP 13:numS 14:(0:fs 1:both 2:fe) 15:step 16:ix 17: fp 18-19:Zeros
|
||||||
|
|
||||||
void applyPreset(byte index, bool loadBri, bool loadCol, bool loadFX)
|
bool applyPreset(byte index, bool loadBri = true, bool loadCol = true, bool loadFX = true)
|
||||||
{
|
{
|
||||||
if (index == 255 || index == 0) loadSettingsFromEEPROM(false);//load boot defaults
|
if (index == 255 || index == 0)
|
||||||
if (index > 25 || index < 1) return;
|
{
|
||||||
|
loadSettingsFromEEPROM(false);//load boot defaults
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (index > 25 || index < 1) return false;
|
||||||
uint16_t i = 380 + index*20;
|
uint16_t i = 380 + index*20;
|
||||||
if (EEPROM.read(i) == 0) return;
|
if (EEPROM.read(i) == 0) return false;
|
||||||
if (loadBri) bri = EEPROM.read(i+1);
|
if (loadBri) bri = EEPROM.read(i+1);
|
||||||
if (loadCol)
|
if (loadCol)
|
||||||
{
|
{
|
||||||
@ -532,6 +536,7 @@ void applyPreset(byte index, bool loadBri, bool loadCol, bool loadFX)
|
|||||||
strip.setIntensity(effectIntensity);
|
strip.setIntensity(effectIntensity);
|
||||||
strip.setPalette(effectPalette);
|
strip.setPalette(effectPalette);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void savePreset(byte index)
|
void savePreset(byte index)
|
||||||
@ -554,7 +559,7 @@ void savePreset(byte index)
|
|||||||
|
|
||||||
EEPROM.write(i+16, effectIntensity);
|
EEPROM.write(i+16, effectIntensity);
|
||||||
EEPROM.write(i+17, effectPalette);
|
EEPROM.write(i+17, effectPalette);
|
||||||
EEPROM.commit();
|
commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
String loadMacro(byte index)
|
String loadMacro(byte index)
|
||||||
@ -597,5 +602,19 @@ void saveMacro(byte index, String mc, bool sing=true) //only commit on single sa
|
|||||||
{
|
{
|
||||||
EEPROM.write(i, mc.charAt(i-s));
|
EEPROM.write(i, mc.charAt(i-s));
|
||||||
}
|
}
|
||||||
if (sing) EEPROM.commit();
|
if (sing) commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
void commit()
|
||||||
|
{
|
||||||
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
|
delay(1);
|
||||||
|
portDISABLE_INTERRUPTS();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
EEPROM.commit();
|
||||||
|
|
||||||
|
#ifdef ARDUINO_ARCH_ESP32
|
||||||
|
portENABLE_INTERRUPTS();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -120,6 +120,7 @@ void wledInit()
|
|||||||
|
|
||||||
if (initLedsLast) initStrip();
|
if (initLedsLast) initStrip();
|
||||||
userBegin();
|
userBegin();
|
||||||
|
|
||||||
if (macroBoot>0) applyMacro(macroBoot);
|
if (macroBoot>0) applyMacro(macroBoot);
|
||||||
Serial.println("Ada");
|
Serial.println("Ada");
|
||||||
}
|
}
|
||||||
@ -132,16 +133,13 @@ void initStrip()
|
|||||||
strip.setColor(0);
|
strip.setColor(0);
|
||||||
strip.setBrightness(255);
|
strip.setBrightness(255);
|
||||||
|
|
||||||
pinMode(buttonPin, INPUT_PULLUP);
|
pinMode(BTNPIN, INPUT_PULLUP);
|
||||||
pinMode(4,OUTPUT); //this is only needed in special cases
|
|
||||||
digitalWrite(4,LOW);
|
|
||||||
|
|
||||||
if (bootPreset>0) applyPreset(bootPreset, turnOnAtBoot, true, true);
|
if (bootPreset>0) applyPreset(bootPreset, turnOnAtBoot, true, true);
|
||||||
colorUpdated(0);
|
colorUpdated(0);
|
||||||
|
|
||||||
//disable button if it is "pressed" unintentionally
|
//disable button if it is "pressed" unintentionally
|
||||||
if(digitalRead(buttonPin) == LOW) buttonEnabled = false;
|
if(digitalRead(BTNPIN) == LOW) buttonEnabled = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void initAP(){
|
void initAP(){
|
||||||
@ -259,7 +257,7 @@ void getBuildInfo()
|
|||||||
oappend("debug: false\r\n");
|
oappend("debug: false\r\n");
|
||||||
#endif
|
#endif
|
||||||
oappend("button-pin: gpio");
|
oappend("button-pin: gpio");
|
||||||
oappendi(buttonPin);
|
oappendi(BTNPIN);
|
||||||
oappend("\r\nstrip-pin: gpio");
|
oappend("\r\nstrip-pin: gpio");
|
||||||
oappendi(LEDPIN);
|
oappendi(LEDPIN);
|
||||||
oappend("\r\nbrand: wled\r\n");
|
oappend("\r\nbrand: wled\r\n");
|
||||||
|
@ -73,7 +73,8 @@ void colorUpdated(int callMode)
|
|||||||
//call for notifier -> 0: init 1: direct change 2: button 3: notification 4: nightlight 5: other (NN)6: fx changed 7: hue 8: preset cycle 9: blynk
|
//call for notifier -> 0: init 1: direct change 2: button 3: notification 4: nightlight 5: other (NN)6: fx changed 7: hue 8: preset cycle 9: blynk
|
||||||
if (!colorChanged())
|
if (!colorChanged())
|
||||||
{
|
{
|
||||||
if (callMode == 6) notify(6);
|
if (callMode == 2) notify(2);
|
||||||
|
else if (callMode == 6) notify(6);
|
||||||
return; //no change
|
return; //no change
|
||||||
}
|
}
|
||||||
if (callMode != 5 && nightlightActive && nightlightFade)
|
if (callMode != 5 && nightlightActive && nightlightFade)
|
||||||
|
@ -6,15 +6,15 @@ void handleButton()
|
|||||||
{
|
{
|
||||||
if (buttonEnabled)
|
if (buttonEnabled)
|
||||||
{
|
{
|
||||||
if (digitalRead(buttonPin) == LOW && !buttonPressedBefore)
|
if (digitalRead(BTNPIN) == LOW && !buttonPressedBefore)
|
||||||
{
|
{
|
||||||
buttonPressedTime = millis();
|
buttonPressedTime = millis();
|
||||||
buttonPressedBefore = true;
|
buttonPressedBefore = true;
|
||||||
}
|
}
|
||||||
else if (digitalRead(buttonPin) == HIGH && buttonPressedBefore)
|
else if (digitalRead(BTNPIN) == HIGH && buttonPressedBefore)
|
||||||
{
|
{
|
||||||
delay(15); //debounce
|
delay(15); //debounce
|
||||||
if (digitalRead(buttonPin) == HIGH)
|
if (digitalRead(BTNPIN) == HIGH)
|
||||||
{
|
{
|
||||||
if (millis() - buttonPressedTime > 7000) {initAP();}
|
if (millis() - buttonPressedTime > 7000) {initAP();}
|
||||||
else if (millis() - buttonPressedTime > 700)
|
else if (millis() - buttonPressedTime > 700)
|
||||||
@ -51,9 +51,9 @@ void handleButton()
|
|||||||
auxActiveBefore = true;
|
auxActiveBefore = true;
|
||||||
switch (auxTriggeredState)
|
switch (auxTriggeredState)
|
||||||
{
|
{
|
||||||
case 0: pinMode(auxPin, INPUT); break;
|
case 0: pinMode(AUXPIN, INPUT); break;
|
||||||
case 1: pinMode(auxPin, OUTPUT); digitalWrite(auxPin, HIGH); break;
|
case 1: pinMode(AUXPIN, OUTPUT); digitalWrite(AUXPIN, HIGH); break;
|
||||||
case 2: pinMode(auxPin, OUTPUT); digitalWrite(auxPin, LOW); break;
|
case 2: pinMode(AUXPIN, OUTPUT); digitalWrite(AUXPIN, LOW); break;
|
||||||
}
|
}
|
||||||
auxStartTime = millis();
|
auxStartTime = millis();
|
||||||
}
|
}
|
||||||
@ -63,9 +63,9 @@ void handleButton()
|
|||||||
auxActiveBefore = false;
|
auxActiveBefore = false;
|
||||||
switch (auxDefaultState)
|
switch (auxDefaultState)
|
||||||
{
|
{
|
||||||
case 0: pinMode(auxPin, INPUT); break;
|
case 0: pinMode(AUXPIN, INPUT); break;
|
||||||
case 1: pinMode(auxPin, OUTPUT); digitalWrite(auxPin, HIGH); break;
|
case 1: pinMode(AUXPIN, OUTPUT); digitalWrite(AUXPIN, HIGH); break;
|
||||||
case 2: pinMode(auxPin, OUTPUT); digitalWrite(auxPin, LOW); break;
|
case 2: pinMode(AUXPIN, OUTPUT); digitalWrite(AUXPIN, LOW); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,14 @@
|
|||||||
* Color conversion methods
|
* Color conversion methods
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
void colorFromUint32(uint32_t in)
|
||||||
|
{
|
||||||
|
white = in >> 24 & 0xFF;
|
||||||
|
col[0] = in >> 16 & 0xFF;
|
||||||
|
col[1] = in >> 8 & 0xFF;
|
||||||
|
col[2] = in & 0xFF;
|
||||||
|
}
|
||||||
|
|
||||||
void colorHStoRGB(uint16_t hue, byte sat, byte* rgb) //hue, sat to rgb
|
void colorHStoRGB(uint16_t hue, byte sat, byte* rgb) //hue, sat to rgb
|
||||||
{
|
{
|
||||||
float h = ((float)hue)/65535.0;
|
float h = ((float)hue)/65535.0;
|
||||||
|
126
wled00/wled19_ir.ino
Normal file
126
wled00/wled19_ir.ino
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
/*
|
||||||
|
* Infrared sensor support for generic 24 key RGB remote
|
||||||
|
*/
|
||||||
|
|
||||||
|
IRrecv* irrecv;
|
||||||
|
//change pin in NpbWrapper.h
|
||||||
|
|
||||||
|
decode_results results;
|
||||||
|
|
||||||
|
unsigned long irCheckedTime = 0;
|
||||||
|
uint32_t lastValidCode = 0;
|
||||||
|
uint16_t irTimesRepeated = 0;
|
||||||
|
|
||||||
|
|
||||||
|
//relatively change brightness, minumum A=5
|
||||||
|
void relativeChange(byte* property, int8_t amount, byte lowerBoundary =0)
|
||||||
|
{
|
||||||
|
int16_t new_val = (int16_t) *property + amount;
|
||||||
|
if (new_val > 0xFF) new_val = 0xFF;
|
||||||
|
else if (new_val < lowerBoundary) new_val = lowerBoundary;
|
||||||
|
*property = new_val;
|
||||||
|
}
|
||||||
|
|
||||||
|
void decodeIr(uint32_t code)
|
||||||
|
{
|
||||||
|
if (code == 0xFFFFFFFF) //repeated code, continue brightness up/down
|
||||||
|
{
|
||||||
|
irTimesRepeated++;
|
||||||
|
if (lastValidCode == IR24_BRIGHTER)
|
||||||
|
{
|
||||||
|
relativeChange(&bri, 10); return;
|
||||||
|
}
|
||||||
|
else if (lastValidCode == IR24_DARKER)
|
||||||
|
{
|
||||||
|
relativeChange(&bri, -10, 5); return;
|
||||||
|
}
|
||||||
|
else if (lastValidCode == IR24_ON && irTimesRepeated > 7)
|
||||||
|
{
|
||||||
|
nightlightActive = true;
|
||||||
|
nightlightStartTime = millis();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
lastValidCode = 0; irTimesRepeated = 0;
|
||||||
|
|
||||||
|
if (code > 0xFFFFFF) return; //invalid code
|
||||||
|
else if (code > 0xFF0000) decodeIR44(code); //is in 44-key remote range
|
||||||
|
else if (code > 0xF70000 && code < 0xF80000) decodeIR24(code); //is in 24-key remote range
|
||||||
|
//code <= 0xF70000 also invalid
|
||||||
|
}
|
||||||
|
|
||||||
|
void decodeIR24(uint32_t code)
|
||||||
|
{
|
||||||
|
switch (code) {
|
||||||
|
case IR24_BRIGHTER : relativeChange(&bri, 10); break;
|
||||||
|
case IR24_DARKER : relativeChange(&bri, -10, 5); break;
|
||||||
|
case IR24_OFF : briLast = bri; bri = 0; break;
|
||||||
|
case IR24_ON : bri = briLast; break;
|
||||||
|
case IR24_RED : colorFromUint32(COLOR_RED); break;
|
||||||
|
case IR24_REDDISH : colorFromUint32(COLOR_REDDISH); break;
|
||||||
|
case IR24_ORANGE : colorFromUint32(COLOR_ORANGE); break;
|
||||||
|
case IR24_YELLOWISH : colorFromUint32(COLOR_YELLOWISH); break;
|
||||||
|
case IR24_YELLOW : colorFromUint32(COLOR_YELLOW); break;
|
||||||
|
case IR24_GREEN : colorFromUint32(COLOR_GREEN); break;
|
||||||
|
case IR24_GREENISH : colorFromUint32(COLOR_GREENISH); break;
|
||||||
|
case IR24_TURQUOISE : colorFromUint32(COLOR_TURQUOISE); break;
|
||||||
|
case IR24_CYAN : colorFromUint32(COLOR_CYAN); break;
|
||||||
|
case IR24_AQUA : colorFromUint32(COLOR_AQUA); break;
|
||||||
|
case IR24_BLUE : colorFromUint32(COLOR_BLUE); break;
|
||||||
|
case IR24_DEEPBLUE : colorFromUint32(COLOR_DEEPBLUE); break;
|
||||||
|
case IR24_PURPLE : colorFromUint32(COLOR_PURPLE); break;
|
||||||
|
case IR24_MAGENTA : colorFromUint32(COLOR_MAGENTA); break;
|
||||||
|
case IR24_PINK : colorFromUint32(COLOR_PINK); break;
|
||||||
|
case IR24_WHITE : colorFromUint32(COLOR_WHITE); effectCurrent = 0; break;
|
||||||
|
case IR24_FLASH : if (!applyPreset(1)) effectCurrent = FX_MODE_COLORTWINKLE; break;
|
||||||
|
case IR24_STROBE : if (!applyPreset(2)) effectCurrent = FX_MODE_RAINBOW_CYCLE; break;
|
||||||
|
case IR24_FADE : if (!applyPreset(3)) effectCurrent = FX_MODE_BREATH; break;
|
||||||
|
case IR24_SMOOTH : if (!applyPreset(4)) effectCurrent = FX_MODE_RAINBOW; break;
|
||||||
|
default: return;
|
||||||
|
}
|
||||||
|
lastValidCode = code;
|
||||||
|
colorUpdated(2); //for notifier, IR is considered a button input
|
||||||
|
}
|
||||||
|
|
||||||
|
void decodeIR44(uint32_t code)
|
||||||
|
{
|
||||||
|
//not implemented for now
|
||||||
|
}
|
||||||
|
|
||||||
|
void initIR()
|
||||||
|
{
|
||||||
|
if (irEnabled)
|
||||||
|
{
|
||||||
|
irrecv = new IRrecv(IR_PIN);
|
||||||
|
irrecv->enableIRIn();
|
||||||
|
}
|
||||||
|
//irrecv.disableIRIn();
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleIR()
|
||||||
|
{
|
||||||
|
if (irEnabled && millis() - irCheckedTime > 120)
|
||||||
|
{
|
||||||
|
irCheckedTime = millis();
|
||||||
|
if (irEnabled)
|
||||||
|
{
|
||||||
|
if (irrecv == NULL)
|
||||||
|
{
|
||||||
|
initIR(); return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (irrecv->decode(&results))
|
||||||
|
{
|
||||||
|
DEBUG_PRINTLN("IR recv");
|
||||||
|
#ifdef DEBUG
|
||||||
|
Serial.println((uint32_t)results.value, HEX);
|
||||||
|
#endif
|
||||||
|
decodeIr(results.value);
|
||||||
|
irrecv->resume();
|
||||||
|
}
|
||||||
|
} else if (irrecv != NULL)
|
||||||
|
{
|
||||||
|
delete irrecv; irrecv = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user