HELP telecomando ad infrarossi

salve ragazzi volevo chiedervi una cosa io mi ritrovo un telecomando ad infrarossi che pilotava quegli elicotterini che vendono a 10/15€ regalo a mio nipote solo che l'elicottero non è infrangibile e mio nipote lo ha sbattuto su tutti i muri di casa quindi l'elicottero è disintegrato ma il telecomando è nuovo e funzionante.
premetto che sono nuovo di arduino e non ho ancora molta dimestichezza nel programmare ma grazie al forum e ad internet ho scritto questo codice per decodificare il segnale del telecomando

#include <IRremote.h>

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop() 
{
  if (irrecv.decode(&results))
  {
    Serial.println(results.value, DEC);
    irrecv.resume(); // Receive the next value
  }
  
}

allora ho collegato il ricevitore infrarossi uscito in un kit che ho acquistato su internet con annesso telecomando tipo autoradio e provando con il telecomando uscito nel kit riesco ad decodificare il segnale mentre con telecomandi che ho per casa e il telecomando dell'ex elicottero mi escono solo tanti "zeri".
vorrei capire come fare per decodificare il segnale e poi usare il telecomando del'ex elicottero per far girare un motore o aumentare o diminuire l'intensità di un led!
grazie per l'aiuto

I telecomandi non funzionanti useranno codici (codifica) di trassmissione che non sono inseriti nella libreria.
Con quella libreria non puoi usarli.
Ciao Uwe

ha ho capito e non c'è nessun modo per decodificare il treno di inpulsi PWM che arrivano ad arduino e convertirli in un segnale che mi modula un uscita PWM?

Ragazzi ho trovato questo codice l'ho trasmesso ed effettivamente mi escono dei numeri ma non so assolutamente a cosa servono e a che si riferiscono potete aiutarmi ? tali nuneri possono servirmi al mio intento?

/*
 *  File....... IRanalyzer.pde 
 *  Purpose.... Records up to 128 signal changes
 *  Author..... Walter Anderson 
 *  E-mail..... wandrson@walteranderson.us 
 *  Started.... 18 May 2007 
 *  Updated.... 18 May 2007 
 * 
 *
 */ 
#include <avr/interrupt.h>
#include <avr/io.h>

#define TIMER_RESET  TCNT1 = 0
#define SAMPLE_SIZE  64

int IRpin = 2;
unsigned int TimerValue[SAMPLE_SIZE];
char direction[SAMPLE_SIZE];
byte change_count;
long time;

void setup() {
  Serial.begin(115200);
  Serial.println("Analyze IR Remote");
  TCCR1A = 0x00;          // COM1A1=0, COM1A0=0 => Disconnect Pin OC1 from Timer/Counter 1 -- PWM11=0,PWM10=0 => PWM Operation disabled
  // ICNC1=0 => Capture Noise Canceler disabled -- ICES1=0 => Input Capture Edge Select (not used) -- CTC1=0 => Clear Timer/Counter 1 on Compare/Match
  // CS12=0 CS11=1 CS10=1 => Set prescaler to clock/64
  TCCR1B = 0x03;          // 16MHz clock with prescaler means TCNT1 increments every 4uS
  // ICIE1=0 => Timer/Counter 1, Input Capture Interrupt Enable -- OCIE1A=0 => Output Compare A Match Interrupt Enable -- OCIE1B=0 => Output Compare B Match Interrupt Enable
  // TOIE1=0 => Timer 1 Overflow Interrupt Enable
  TIMSK1 = 0x00;          
  pinMode(IRpin, INPUT);
}

void loop()
{
  Serial.println("Waiting...");
  change_count = 0;
  while(digitalRead(IRpin) == HIGH) {}                                 
  TIMER_RESET;
  TimerValue[change_count] = TCNT1;
  direction[change_count++] = '0';
  while (change_count < SAMPLE_SIZE) {
    if (direction[change_count-1] == '0') {
      while(digitalRead(IRpin) == LOW) {}
      TimerValue[change_count] = TCNT1;
      direction[change_count++] = '1';
    } else {
      while(digitalRead(IRpin) == HIGH) {}
      TimerValue[change_count] = TCNT1;
      direction[change_count++] = '0';
    }
  }
  Serial.println("Bit stream detected!");
  change_count = 0;
  time = (long) TimerValue[change_count] * 4;
  Serial.print(time);
  Serial.print("\t");
  Serial.println(direction[change_count++]);
  while (change_count < SAMPLE_SIZE) {
    time = (long) TimerValue[change_count] * 4;
    Serial.print(time);
    Serial.print("\t");
    Serial.println(direction[change_count-1]);
    Serial.print(time);
    Serial.print("\t");
    Serial.println(direction[change_count++]);    
  }
  Serial.println("Bit stream end!");
  delay(2000);
}

l'ho preso da qui Arduino Playground - InfraredReceivers

please aiuto!

Ho trovato anche questo codice

int ir_pin = 7;				 //Sensor pin 1 wired through a 220 ohm resistor
int led_pin = 13;				   //"Ready to Receive" flag, not needed but nice
int debug = 1;				   //Serial connection must be started to debug
int start_bit = 2000;			 //Start bit threshold (Microseconds)
int bin_1 = 1000;				   //Binary 1 threshold (Microseconds)
int bin_0 = 400;				     //Binary 0 threshold (Microseconds)


void setup() {
 pinMode(led_pin, OUTPUT);		 //This shows when we're ready to receive
 pinMode(ir_pin, INPUT);
 digitalWrite(led_pin, LOW);	 //not ready yet
 Serial.begin(9600);
}

void loop() {
 int key = getIRKey();		 //Fetch the key
 if (key != -1) {
   Serial.print("Key Recieved: ");
   Serial.println(key);
 }
}


int getIRKey() {
 int data[12];
 digitalWrite(led_pin, HIGH);     //Ok, i'm ready to recieve
 while(pulseIn(ir_pin, LOW) < 2200) { //Wait for a start bit
 }
 data[0] = pulseIn(ir_pin, LOW);	 //Start measuring bits, I only want low pulses
 data[1] = pulseIn(ir_pin, LOW);
 data[2] = pulseIn(ir_pin, LOW);
 data[3] = pulseIn(ir_pin, LOW);
 data[4] = pulseIn(ir_pin, LOW);
 data[5] = pulseIn(ir_pin, LOW);
 data[6] = pulseIn(ir_pin, LOW);
 data[7] = pulseIn(ir_pin, LOW);
 data[8] = pulseIn(ir_pin, LOW);
 data[9] = pulseIn(ir_pin, LOW);
 data[10] = pulseIn(ir_pin, LOW);
 data[11] = pulseIn(ir_pin, LOW);
 digitalWrite(led_pin, LOW);

 if(debug == 1) {
   Serial.println("-----");
 }
 for(int i=0;i<=11;i++) {		     //Parse them
   if (debug == 1) {
	   Serial.println(data[i]);
   }
   if(data[i] > bin_1) {		     //is it a 1?
	 data[i] = 1;
   }  else {
	 if(data[i] > bin_0) {	     //is it a 0?
	   data[i] = 0;
	 } else {
	  data[i] = 2;			   //Flag the data as invalid; I don't know what it is!
	 }
   }
 }

 for(int i=0;i<=11;i++) {		     //Pre-check data for errors
   if(data[i] > 1) {
	 return -1;				   //Return -1 on invalid data
   }
 }

 int result = 0;
 int seed = 1;
 for(int i=11;i>=0;i--) {		    //Convert bits to integer
   if(data[i] == 1) {
	 result += seed;
   }
   seed = seed * 2;
 }

 return result;				     //Return key number
}

l'ho preso qui http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1176098434

qualcuno sa aiutarmi grazie ancora

ketrono:
Ragazzi ho trovato questo codice l'ho trasmesso ed effettivamente mi escono dei numeri ma non so assolutamente a cosa servono e a che si riferiscono potete aiutarmi ? tali nuneri possono servirmi al mio intento?

l'ho preso da qui http://www.arduino.cc/playground/Code/InfraredReceivers

please aiuto!

I numeri dovrebbero corrispondere ai tasti premuti. Ogni tasto potrebbe aver un codice di 1 o pi´numeri a 1 Byte.

Ciao Uwe
Ciao Uwe

Che ricevitore usi?

Prova a scrivere i risultati in esadecimale

#include <IRremote.h>

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop() 
{
  if (irrecv.decode(&results))
  {
    Serial.println(results.value, DEC);
    irrecv.resume(); // Receive the next value
  }
  
}

E poi usali di conseguenza per gestire le varie operazioni sui pin