#include <IRremote.h> 

#define Button_F 0xFF18E7 //Forward
#define Button_B 0xFF4AB5//Backward  
#define Button_R 0xFF5AA5//Right 
#define Button_L 0xFF10EF//Left
#define Button_OK 0xFF38C7 //OK
#define Button_1 0xFFA25D//B1
#define Button_2 0xFF629D//B2
#define Button_3 0xFFE21D//B3
#define Button_4 0xFF22DD//B4
#define Button_5 0xFF02FD//B5
#define Button_6 0xFFC23D //B6
#define Button_7 0xFFE01F //B7
#define Button_8 0xFFA857 //B8
#define Button_9 0xFF906F //B9
#define Button_0 0xFF9867 //B0
#define Button_AS 0xFF6897 //B*
#define Button_COM 0xFFB04F //B#

int receiver = 2; 
uint32_t Previous; 
IRrecv irrecv(receiver); 
decode_results results;
////////////////////////////////////////////////////////////
uint32_t cycles = 0;
int state =0;
////////////////////////////////////////////////////////////

void setup() {
  
 Serial.begin(9600);
 
 irrecv.enableIRIn(); 

pinMode(A0, OUTPUT);
pinMode(A1, OUTPUT);
}


void loop() {
  
 cycles ++;
 if (irrecv.decode(&results)) { 
 if (results.value==0xFFFFFFFF) { 
     results.value=Previous;
      }

   cycles = 0;
   switch(results.value) {
           case Button_L : Serial.println("LEFT"); break;
           case Button_R : Serial.println("RIGHT"); break;  
           case Button_F : Serial.println("FORWARD"); break;
           case Button_B : Serial.println("BACKWARD"); break;
           case Button_1 : state=2; break; 
           case Button_2 : state=0; break;
           case Button_3 : Serial.println("3"); break;
           case Button_4 : Serial.println("4"); break;
           case Button_5 : Serial.println("5"); break;
           case Button_6 : Serial.println("6"); break;
           case Button_7 : Serial.println("7"); break;
           case Button_8 : Serial.println("8"); break;
           case Button_9 : Serial.println("9"); break;
           case Button_0 : Serial.println("0"); break;
           case Button_OK : state=1; break;  
           case Button_AS : Serial.println("ASTERISCO"); break;
           case Button_COM : Serial.println("COMODIN"); break;               
      }

  Serial.println (results.value, HEX); 
 irrecv.resume(); 
 }
 Previous=results.value;
  
  switch(state){
      case 0: digitalWrite(A0,LOW);digitalWrite(A1,LOW);break;
      case 1: digitalWrite(A0,HIGH);digitalWrite(A1,HIGH);if(cycles > 8300){state=0;};break;
      case 2: digitalWrite(A0,HIGH);digitalWrite(A1,HIGH);break;
}

 }
