From f3a8aa8d59ef6dd194d3ddb6e5361e5c4b9a2862 Mon Sep 17 00:00:00 2001 From: Nekojimi Date: Sat, 3 Dec 2022 17:51:58 +0000 Subject: [PATCH] Add support for new IR codes. --- project-lamp.ino | 125 +++++++++++++++++++++++++++++------------------ 1 file changed, 77 insertions(+), 48 deletions(-) diff --git a/project-lamp.ino b/project-lamp.ino index 9747018..804d11e 100644 --- a/project-lamp.ino +++ b/project-lamp.ino @@ -3,9 +3,11 @@ #include #define NUM_LEDS 1 -#define DATA_PIN 4 +#define DATA_PIN 3 #define IR_RECEIVE_PIN 2 +#undef ENABLE_LED_FEEDBACK +#define ENABLE_LED_FEEDBACK 0 CRGBW COL_RED (255, 0, 0, 0); CRGBW COL_GREEN ( 0,255, 0, 0); @@ -33,19 +35,22 @@ CRGBW desaturate(CRGBW col) struct ColourCode { uint32_t code; + uint32_t altCode; CRGBW colour; CRGBW altColour; - ColourCode(uint32_t c, CRGBW col) + ColourCode(uint32_t c, uint32_t c2,CRGBW col) { code = c; + altCode = c2; colour = col; altColour = desaturate(col); } - ColourCode(uint32_t c, CRGBW colA, CRGBW colB) + ColourCode(uint32_t c, uint32_t c2, CRGBW colA, CRGBW colB) { code = c; + altCode = c2; colour = colA; altColour = colB; } @@ -53,45 +58,65 @@ struct ColourCode const ColourCode colourCodes[] = { - {0x97483BFB, COL_RED}, - {0x86B0E697, COL_GREEN}, - {0x9EF4941F, COL_BLUE}, - {0xA3C8EDDB, COL_SUM, COL_WHITE}, - {0x5BE75E7F, COL_AMBER}, - {0xF377C5B7, COL_LIME}, - {0xC101E57B, COL_AZURE}, - {0xD7E84B1B, COL_ORANGE}, - {0xEE4ECCFB, COL_CYAN}, - {0x51E43D1B, COL_UV}, - {0x2A89195F, COL_PEACHY}, - {0xF63C8657, COL_SPRING}, - {0x44C407DB, COL_MAGENTA}, - {0x488F3CBB, COL_YELLOW}, - {0x13549BDF, COL_VIOLET}, - {0x35A9425F, COL_ROSE} + {0xE619FF00, 0xFB04EF00, COL_RED}, + {0xE41BFF00, 0xFA05EF00, COL_GREEN}, + {0xEE11FF00, 0xF906EF00, COL_BLUE}, + {0xEA15FF00, 0xF807EF00, COL_SUM, COL_WHITE}, + {0xE817FF00, 0xF708EF00, COL_AMBER}, + {0xED12FF00, 0xF609EF00, COL_LIME}, + {0xE916FF00, 0xF50AEF00, COL_AZURE}, + {0xBF40FF00, 0xF30CEF00, COL_ORANGE}, + {0xB34CFF00, 0xF20DEF00, COL_CYAN}, + {0xFB04FF00, 0xF10EEF00, COL_UV}, + {0xF50AFF00, 0xEF10EF00, COL_PEACHY}, + {0xE11EFF00, 0xEE11EF00, COL_SPRING}, + {0xF10EFF00, 0xED12EF00, COL_MAGENTA}, + {0xE31CFF00, 0xEB14EF00, COL_YELLOW}, + {0xEB14FF00, 0xEA15EF00, COL_VIOLET}, + {0xF00FFF00, 0xE916EF00, COL_ROSE} }; -const uint32_t CODE_BRIGHTER = 0xE5CFBD7F; -const uint32_t CODE_DIMMER = 0xA23C94BF; -const uint32_t CODE_OFF = 0xE721C0DB; -const uint32_t CODE_ON = 0xF0C41643; +const uint32_t CODE_BRIGHTER = 0xFF00EF00; +const uint32_t CODE_DIMMER = 0xFE01EF00; +const uint32_t CODE_OFF = 0xFD02EF00; +const uint32_t CODE_ON = 0xFC03EF00; +const uint32_t CODE_FLASH = 0xF40BEF00; +const uint32_t CODE_STROBE = 0xF00FEF00; +const uint32_t CODE_FADE = 0xEC13EF00; +const uint32_t CODE_SMOOTH = 0xE817EF00; const int NUM_COLOURCODES = sizeof(colourCodes) / sizeof(ColourCode); CRGBW leds[NUM_LEDS]; CRGB *ledsRGB = (CRGB *) &leds[0]; -IRrecv irrecv(IR_RECEIVE_PIN); +//IRrecv irrecv(IR_RECEIVE_PIN);/ uint8_t brightness = 128; uint32_t lastCode = 0; decode_results results; +void colorFill(CRGBW c){ + for(int i = 0; i < NUM_LEDS; i++){ + leds[i] = c; + FastLED.show(); + delay(50); + } +} + +void colorFill(CRGB c){ + for(int i = 0; i < NUM_LEDS; i++){ + leds[i] = c; + FastLED.show(); + delay(50); + } +} void setup() { FastLED.addLeds(ledsRGB, getRGBWsize(NUM_LEDS)); - FastLED.setBrightness(128); + colorFill(COL_SUM); + FastLED.setBrightness(255); FastLED.show(); pinMode(LED_BUILTIN, OUTPUT); @@ -109,80 +134,84 @@ void setup() { // In case the interrupt driver crashes on setup, give a clue // to the user what's going on. Serial.println("Enabling IRin"); - irrecv.enableIRIn(); // Start the receiver +// irrecv.enableIRIn(); // Start the receiver/ + IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); Serial.print(F("Ready to receive IR signals at pin ")); Serial.println(IR_RECEIVE_PIN); } -void colorFill(CRGBW c){ - for(int i = 0; i < NUM_LEDS; i++){ - leds[i] = c; - FastLED.show(); - delay(50); - } -} - -void colorFill(CRGB c){ - for(int i = 0; i < NUM_LEDS; i++){ - leds[i] = c; - FastLED.show(); - delay(50); - } -} + void interpretColourCode(uint32_t code) { for (int i = 0; i < NUM_COLOURCODES; i++) { ColourCode col = colourCodes[i]; - if (col.code == code) + if (col.code == code || col.altCode == code) { if (code == lastCode) { + Serial.println(F("Colour code OK - Secondary")); colorFill(col.altColour); lastCode = 0; } else { + Serial.println(F("Colour code OK - Primary")); colorFill(col.colour); lastCode = code; } - break; + return; + } + else + { +// Serial.print(code, HEX); +// Serial.print(F(" != ")); +// Serial.println(col.code, HEX); } } + Serial.println(F("CODE?!?!")); } void loop() { - if (irrecv.decode(&results)) + if (IrReceiver.decode()) { - Serial.println(results.value, HEX); - irrecv.resume(); // Receive the next value - switch(results.value) + uint32_t data = IrReceiver.decodedIRData.decodedRawData; + Serial.println(data, HEX); + IrReceiver.resume(); // Receive the next value + switch(data) { case CODE_BRIGHTER: brightness += 32; FastLED.setBrightness(brightness); FastLED.show(); + Serial.println(F("Brighter")); break; case CODE_DIMMER: brightness -= 32; FastLED.setBrightness(brightness); FastLED.show(); + Serial.println(F("Dimmer")); break; case CODE_OFF: FastLED.setBrightness(0); FastLED.show(); + Serial.println(F("Off")); break; case CODE_ON: FastLED.setBrightness(brightness); FastLED.show(); + Serial.println(F("On")); break; default: - interpretColourCode(results.value); + interpretColourCode(data); + Serial.println(F("Set colour")); } + if (brightness <= 0) + brightness = 255; } delay(100); }