For some reason when I include the function "showCurrentPreset();" in my code then it no longer successfully decodes the IR signal. Commenting out this line lets it work correctly. Does anyone know how to fix this?
I'm working on an arduino controlled LED lighting setup. The problem line is right at the very bottom of my code.
static int activePreset = -1;
#include <FastLED.h> //add
#include <IRremote.h>
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
#define BRIGHTNESS 255
#define NUM_LEDS 899
#define DATA_PIN 5
const int RECV_PIN = 3;
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long key_value = 0;
CRGB leds[NUM_LEDS]; //Add
void setup(){
Serial.begin(9600);
irrecv.enableIRIn();
irrecv.blink13(true);
FastLED.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS)
.setCorrection(TypicalLEDStrip)
.setDither(BRIGHTNESS < 255);
// set master brightness control
FastLED.setBrightness(BRIGHTNESS);
}
/////////////////////////////////// Setting up various zones
void zone1(int red, int green, int blue){
for (int i=0;i<=25;i++){
leds[i].r = red;
leds[i].g = green;
leds[i].b = blue;
}
}
void zone2(int red, int green, int blue){
for (int i=26;i<=56;i++){
leds[i].r = red;
leds[i].g = green;
leds[i].b = blue;
}
}
void zone3(int red, int green, int blue){
for (int i=57;i<=197;i++){
leds[i].r = red;
leds[i].g = green;
leds[i].b = blue;
}
}
void zone4(int red, int green, int blue){
for (int i=198;i<=407;i++){
leds[i].r = red;
leds[i].g = green;
leds[i].b = blue;
}
}
void zone5(int red, int green, int blue){
for (int i=408;i<=599;i++){
leds[i].r = red;
leds[i].g = green;
leds[i].b = blue;
}
}
void zone6(int red, int green, int blue){
for (int i=600;i<=707;i++){
leds[i].r = red;
leds[i].g = green;
leds[i].b = blue;
}
}
void zone7(int red, int green, int blue){
for (int i=708;i<=899;i++){
leds[i].r = red;
leds[i].g = green;
leds[i].b = blue;
}
}
////////////////////////////////////////////////////////////////////// What the buttons do!!
void showCurrentPreset()
{
switch (activePreset)
{
case 0: showProgram0(); break;
case 1: showProgram1(); break;
//... other programs here
default: showDefault(); break;
}
}
void showProgram0()
{
// paste the inside of your infinite loop from preset0() here
static uint16_t sPseudotime = 0;
static uint16_t sLastMillis = 0;
static uint16_t sHue16 = 0;
uint8_t sat8 = beatsin88( 87, 220, 250);
uint8_t brightdepth = beatsin88( 341, 96, 224);
uint16_t brightnessthetainc16 = beatsin88( 203, (25 * 256), (40 * 256));
uint8_t msmultiplier = beatsin88(147, 23, 60);
uint16_t hue16 = sHue16;//gHue * 256;
uint16_t hueinc16 = beatsin88(113, 1, 3000);
uint16_t ms = millis();
uint16_t deltams = ms - sLastMillis ;
sLastMillis = ms;
sPseudotime += deltams * msmultiplier;
sHue16 += deltams * beatsin88( 400, 5,9);
uint16_t brightnesstheta16 = sPseudotime;
for( uint16_t i = 0 ; i < NUM_LEDS; i++) {
hue16 += hueinc16;
uint8_t hue8 = hue16 / 256;
brightnesstheta16 += brightnessthetainc16;
uint16_t b16 = sin16( brightnesstheta16 ) + 32768;
uint16_t bri16 = (uint32_t)((uint32_t)b16 * (uint32_t)b16) / 65536;
uint8_t bri8 = (uint32_t)(((uint32_t)bri16) * brightdepth) / 65536;
bri8 += (255 - brightdepth);
CRGB newcolor = CHSV( hue8, sat8, bri8);
uint16_t pixelnumber = i;
pixelnumber = (NUM_LEDS-1) - pixelnumber;
nblend( leds[pixelnumber], newcolor, 64);
}
FastLED.show();
}
void showProgram1()
{
// paste what was in preset1()
zone1(255, 128, 171);
zone2(255, 128, 171);
zone3(103, 58, 183);
zone4(255, 128, 171);
zone5(255, 0, 0);
zone6(103, 58, 183);
zone7(255, 0, 0);
FastLED.show();
}
void showDefault()
{
// paste what was in presetOff()
zone1(0,0,0);
zone2(0,0,0);
zone3(0,0,0);
zone4(0,0,0);
zone5(0,0,0);
zone6(0,0,0);
zone7(0,0,0);
FastLED.show();
}
// get rid of the presetX() functions and replace with:
void setCurrentPreset(int newPreset)
{
activePreset = newPreset;
}
// then your loop() looks like:
void loop(){
if (irrecv.decode(&results)){
setCurrentPreset(1);
Serial.println(results.value, HEX);
if (results.value == 0XFFFFFFFF)
results.value = key_value;
switch(results.value){
case 0xFFA25D:
Serial.println("On/Off");
setCurrentPreset(-1);
break;
case 0xFF629D:
// Serial.println("Vol+");
//brightnessUp();
break;
case 0xFFE21D:
// Serial.println("Func/Stop");
break;
case 0xFF22DD:
// Serial.println("|<<");
break;
case 0xFF02FD:
// Serial.println(">||");
break ;
case 0xFFC23D:
// Serial.println(">>|");
break ;
case 0xFFE01F:
// Serial.println("-");
//brightnessDown();
break ;
case 0xFFA857:
// Serial.println("Vol-");
//brightnessDown();
break ;
case 0xFF906F:
// Serial.println("+");
//brightnessUp();
break ;
case 0xFF6897:
// Serial.println("0");
setCurrentPreset(0);
break ;
case 0xFF9867:
// Serial.println("EQ");
break ;
case 0xFFB04F:
// Serial.println("St/Rept");
break ;
case 0xFF30CF:
// Serial.println("1");
setCurrentPreset(1);
break ;
case 0xFF18E7:
// Serial.println("2");
//preset2();
break ;
case 0xFF7A85:
// Serial.println("3");
//preset3();
break ;
case 0xFF10EF:
// Serial.println("4");
//preset4();
break ;
case 0xFF38C7:
// Serial.println("5");
break ;
case 0xFF5AA5:
// Serial.println("6");
break ;
case 0xFF42BD:
// Serial.println("7");
break ;
case 0xFF4AB5:
// Serial.println("8");
break ;
case 0xFF52AD:
// Serial.println("9");
break ;
}
key_value = results.value;
irrecv.resume();
}
// same thing as now but with presetX() calls replaced with setCurrentPreset()
showCurrentPreset(); ///////////////// THE PROBLEM LINE!!!!!!!
}
User contributions licensed under CC BY-SA 3.0