How to construct this program

Hello.
I do not have the required knowledge for this task, and I do not know what I am looking for.

The program is supposed to produce a light-show on a LED-matrix. This is an animation that lasts for some seconds.
The Arduino's input is an IR controller.
The IR controller is supposed to change which light-show is displayed, at any moment.

From my knowledge, this means the program either have to constantly check for new inputs, or break out of the loop when a new IR signal is received.

I am currently on my 9th program, but they all end up slow and rough, or non-functional.
I added the base program, from after my knowledge is required.
The IR library uses a Timer2 interrupt, so I assume a timer can't be used again.

/////////////////////////////////////// include //////////////////////////////////////////
#include "IRremote.h"
/////////////////////////////////////// konstanter ///////////////////////////////////////
int receiver = 10; //reciver input
/////////////////////////////////////// objekter /////////////////////////////////////////
IRrecv irrecv(receiver);
decode_results results;
//////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////// setup ////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
void setup(){
  Serial.begin(9600);
  Serial.println("IR Receiver Raw Data + Button Decode Test");
  irrecv.enableIRIn(); // Start the receiver
}
//////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////// loop /////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
void loop(){
  if (irrecv.decode(&results)) // have we received an IR signal?
  {
  //Serial.println(results.value, HEX);  UN Comment to see raw values
    translateIR();
    irrecv.resume(); // receive the next value
  }
}
//////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////// translateIR //////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
void translateIR(){
  switch(results.value){
  case 0xFD10EF:  
    Serial.println(" CH-            "); 
    break;

  case 0xFF629D:  
    Serial.println(" CH             "); 
    break;

  case 0xFD50AF:  
    Serial.println(" CH+            "); 
    break;

  case 0xFF22DD:  
    Serial.println(" PREV           "); 
    break;

  case 0xFF02FD:  
    Serial.println(" NEXT           ");
    break;

  case 0xFDA05F:  
    Serial.println(" PLAY/PAUSE     "); 
    break;

  case 0xFD906F:  
    Serial.println(" VOL-           "); 
    break;

  case 0xFD807F:  
    Serial.println(" VOL+           "); 
    break;

  case 0xFDB04F:  
    Serial.println(" EQ             "); 
    break;

  case 0xFD30CF:  
    Serial.println(" 0              ");
    break;

  case 0xFF9867:  
    Serial.println(" 100+           ");
    break;

  case 0xFFB04F:  
    Serial.println(" 200+           "); 
    break;

  case 0xFD08F7:  
    Serial.println(" 1              "); 
    break;

  case 0xFD8877:  
    Serial.println(" 2              ");  
    break;

  case 0xFD48B7:  
    Serial.println(" 3              "); 
    break;

  case 0xFD28D7:  
    Serial.println(" 4              "); 
    break;

  case 0xFDA857:  
    Serial.println(" 5              ");
    break;

  case 0xFD6897:  
    Serial.println(" 6              "); 
    break;

  case 0xFD18E7:  
    Serial.println(" 7              "); 
    break;

  case 0xFD9867:  
    Serial.println(" 8              "); 
    break;

  case 0xFD58A7:  
    Serial.println(" 9              "); 
    break;

}

Have a nice day.

I've not tried the program but from a cursory inspection it's just a decoder. You point the ir transmitter at the receiver and it will display on screen the code being transmitted.

[Yes, its the base program as was explained in the posting!]

You need to store the latest arrived IR message and then use it to select
which LED loop to run in loop().

I'd suggest having a loop function for each LED pattern, and in each loop function
call a common routine to test for a new IR message, and if so record the message
and break out of the loop if its a different one.

MarkT:
[Yes, its the base program as was explained in the posting!]

You need to store the latest arrived IR message and then use it to select
which LED loop to run in loop().

I'd suggest having a loop function for each LED pattern, and in each loop function
call a common routine to test for a new IR message, and if so record the message
and break out of the loop if its a different one.

The routine called to check for new updates can't do the whole translateIR(); often enough, to pick up a IR signal on the first push of the IR remote. What do you suggest?

Concept is done. Thank you.

/////////////////////////////////////// include //////////////////////////////////////////
#include "IRremote.h"
/////////////////////////////////////// konstanter ///////////////////////////////////////
int receiver = 10;
byte Kol[4] = {4, 5, 6, 7};
byte Lag[2] = {2, 3};
/////////////////////////////////////// objekter /////////////////////////////////////////
IRrecv irrecv(receiver);
decode_results results;
/////////////////////////////////////// variabler ////////////////////////////////////////
int           SisteIR = 0;
int     TidsVariabel = 60;
int            Teller = 0;
int  TellerVariabel = 100;

//////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////// setup ////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
void setup(){
  Serial.begin(9600);
  Serial.println("IR Receiver Raw Data + Button Decode Test");
  irrecv.enableIRIn(); // Start the receiver
/////////////////////////////////////// pinmode //////////////////////////////////////////
  pinMode(Kol[4, 5, 6, 7], OUTPUT);
  pinMode(Lag[2, 3], OUTPUT);
}
//////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////// loop /////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
void loop(){
  if (irrecv.decode(&results)) // have we received an IR signal?
  {
  //Serial.println(results.value, HEX);  UN Comment to see raw values
    translateIR();
    irrecv.resume(); // receive the next value
  }
  VisProgram();
}
//////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////// translateIR //////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
void translateIR(){
  switch(results.value){
  case 0xFD10EF:  
    Serial.println(" CH-            "); 
    SisteIR = 1;
    break;

  case 0xFF629D:  
    Serial.println(" CH             "); 
    SisteIR = 2;
    break;

  case 0xFD50AF:  
    Serial.println(" CH+            "); 
    SisteIR = 3;
    break;

  case 0xFF22DD:  
    Serial.println(" PREV           "); 
    SisteIR = 4;
    break;

  case 0xFF02FD:  
    Serial.println(" NEXT           ");
    SisteIR = 5; 
    break;

  case 0xFDA05F:  
    Serial.println(" PLAY/PAUSE     "); 
    SisteIR = 6;
    break;

  case 0xFD906F:  
    Serial.println(" VOL-           "); 
    SisteIR = 7;
    TidsVariabel = TidsVariabel - 10;
    break;

  case 0xFD807F:  
    Serial.println(" VOL+           "); 
    SisteIR = 8;
    TidsVariabel = TidsVariabel + 10;
    break;

  case 0xFDB04F:  
    Serial.println(" EQ             "); 
    SisteIR = 9;
    break;

  case 0xFD30CF:  
    Serial.println(" 0              ");
    SisteIR = 10; 
    break;

  case 0xFF9867:  
    Serial.println(" 100+           ");
     SisteIR = 11; 
    break;

  case 0xFFB04F:  
    Serial.println(" 200+           "); 
    SisteIR = 12;
    break;

  case 0xFD08F7:  
    Serial.println(" 1              "); 
    SisteIR = 13;
    break;

  case 0xFD8877:  
    Serial.println(" 2              ");  
    SisteIR = 14;
    break;

  case 0xFD48B7:  
    Serial.println(" 3              "); 
    SisteIR = 15;
    break;

  case 0xFD28D7:  
    Serial.println(" 4              "); 
    SisteIR = 16;
    break;

  case 0xFDA857:  
    Serial.println(" 5              ");
    SisteIR = 17;
    break;

  case 0xFD6897:  
    Serial.println(" 6              "); 
    SisteIR = 18;
    break;

  case 0xFD18E7:  
    Serial.println(" 7              "); 
    SisteIR = 19;
    break;

  case 0xFD9867:  
    Serial.println(" 8              "); 
    SisteIR = 20;
    break;

  case 0xFD58A7:  
    Serial.println(" 9              "); 
    SisteIR = 21;
    break;
 default:
    break;
    }
}
//////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////// VisProgram ///////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
void VisProgram(){
  switch(SisteIR){
    case 21:  
    Program2();
  break;
  case 20:
    Program1();
    break;
  }
}
//////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////// TestIRDelay //////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
void TestIRDelay(int Teller){
  while(Teller < 100){ // Teller < timer
    if (irrecv.decode(&results)){break;translateIR();}
        Serial.println("hey ho her teller jeg");
        Teller++;
        if (Teller >= 100){break;}
  }
}
//////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////// Program //////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
void Program1(){
    digitalWrite(Lag[0], HIGH);
    digitalWrite(Kol[0], HIGH);
    digitalWrite(Kol[1], HIGH);
    digitalWrite(Kol[2], HIGH);
    digitalWrite(Kol[3], HIGH);
    TestIRDelay(TidsVariabel);
    digitalWrite(Kol[3], LOW);
    digitalWrite(Kol[2], LOW);
    digitalWrite(Kol[1], LOW);
    digitalWrite(Kol[0], LOW);
    digitalWrite(Lag[0], LOW); 
    TestIRDelay(TidsVariabel);
}
void Program2(){
    digitalWrite(Lag[1], HIGH);
    digitalWrite(Kol[0], HIGH);
    digitalWrite(Kol[1], HIGH);
    digitalWrite(Kol[2], HIGH);
    digitalWrite(Kol[3], HIGH);
    TestIRDelay(TidsVariabel);
    digitalWrite(Kol[3], LOW);
    digitalWrite(Kol[2], LOW);
    digitalWrite(Kol[1], LOW);
    digitalWrite(Kol[0], LOW);
    digitalWrite(Lag[1], LOW); 
    TestIRDelay(TidsVariabel);
}  
  
  /*
  Serial.println(SisteIR);
  Serial.println(ProgramStadium);
  delay(500);
  if(SisteIR == 6){
    if(ProgramStadium = 0){
      Program_1_1();
      translateIR();
      PlussProgramStadium(3);
    }
    else if(ProgramStadium == 1){
      Program_1_2();
      translateIR();
      PlussProgramStadium(3);
    }
    else if(ProgramStadium == 2){
      Program_1_1();
      translateIR();
      PlussProgramStadium(3);
    }
    else if(ProgramStadium == 3){
      Program_1_2();
      translateIR();
      PlussProgramStadium(3);
    }
  }
}
//////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////// Program_1_1 //////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////
void Program_1_1(){
  digitalWrite(Lag[0], HIGH);
  digitalWrite(Kol[0], HIGH);
  digitalWrite(Kol[1], HIGH);
  digitalWrite(Kol[2], HIGH);
  digitalWrite(Kol[3], HIGH);
}
void Program_1_2(){
  digitalWrite(Kol[3], LOW);
  digitalWrite(Kol[2], LOW);
  digitalWrite(Kol[1], LOW);
  digitalWrite(Kol[0], LOW);
  digitalWrite(Lag[0], LOW);
}
void Program_1_3(){
  digitalWrite(Lag[1], HIGH);
  digitalWrite(Kol[0], HIGH);
  digitalWrite(Kol[1], HIGH);
  digitalWrite(Kol[2], HIGH);
  digitalWrite(Kol[3], HIGH);
}
void Program_1_4(){
  digitalWrite(Kol[3], LOW);
  digitalWrite(Kol[2], LOW);
  digitalWrite(Kol[1], LOW);
  digitalWrite(Kol[0], LOW);
  digitalWrite(Lag[1], LOW);
}
void PlussProgramStadium(int var){
  if (ProgramStadium >= var){ProgramStadium = 0;}
  else {ProgramStadium++;}
  ProgramValg();
}*/