Trasmissione dati tramite Infrarossi

Salve a tutti, sto cercando di programmare un telecomando (per una macchinina che farò in seguito) ad infrarossi che mi invii i valori dell'asse x e y ottenuti da un accellerometro adxl345. Utilizzo la libreria di KEN SHERIFF (spero si scriva cosi) per mandare il codice tramite un led IR connesso sul pin 3. ora il codice:

#include <Wire.h>
#include <IRremote.h>
#include <Adafruit_ADXL345.h>
#include <Adafruit_Sensor.h>
// infrared led on Pin 3
IRsend infrared;
Adafruit_ADXL345 accel = Adafruit_ADXL345(12345);
int accelleratore=0;
int sterzo=0;
unsigned int dati[2];

void setup(){
  Wire.begin();
  Serial.begin(9600);
  accel.setRange(ADXL345_RANGE_2_G);
  accel.setDataRate(ADXL345_DATARATE_100_HZ);
 
}

void loop(){
  sensors_event_t event; 
  accel.getEvent(&event);
  sterzo=100*event.acceleration.y;
  sterzo=map(sterzo,-1000,1000,0,510);
  dati[0]=sterzo;
  delay(50);
  accelleratore=100*event.acceleration.x;
  accelleratore=map(accelleratore,-1000,1000,0,510);
  dati[1]=accelleratore;
  infrared.sendRaw(dati,2,38);
  Serial.println(accelleratore);
  Serial.println (sterzo);
}

Ed ora il problema: sebbene la seriale mi dia i valori corretti dell'accellerometro perchè il led rimane spento???
P.S. anticipo immediatamente che controllo l'accensione del led tramite fotocamera del cellulare.

Forse perché la libreria infrarossi non manda arrays??
Ciao Uwe

A questo link (Controllare Arduino con gli infrarossi e usare Arduino come telecomando | McMajan) nella sezione Trasmissione, si parla di inviare un buffer di dati tramite un protocollo generico.

ma il led e' sul pin 2 o 3 ?

pin 3

e allora perche' lo dichiari sul 2

infrared.sendRaw(dati,2,38);

Il 2 indica la lunghezza del buffer (almeno da quanto dicono da questo link Controllare Arduino con gli infrarossi e usare Arduino come telecomando | McMajan)
Grazie

chiedo venia..
mi sbagliavo con un'altra cosa

Figurati, no problem.
Per completezza di informazione ho collegato il led IR ad una resistenza da 220 ohm, ed in seconda battuta, ho sostituito il led IR con un led rosso, ma lo stesso non funzionava.
Grazie ancora.

stavo appunto per dirtelo, di metterci un led normale

non ho il tuo hardware, e ho commentato un po' di roba

a me lampeggia

#include <Wire.h>
#include <IRremote.h>
#include <Adafruit_ADXL345.h>
#include <Adafruit_Sensor.h>
// infrared led on Pin 3
IRsend infrared;
//Adafruit_ADXL345 accel = Adafruit_ADXL345(12345);
int accelleratore=0;
int sterzo=0;
unsigned int dati[2];

void setup(){
  Wire.begin();
  Serial.begin(9600);
  //accel.setRange(ADXL345_RANGE_2_G);
  //accel.setDataRate(ADXL345_DATARATE_100_HZ);
 
}

void loop(){
 // sensors_event_t event; 
 // accel.getEvent(&event);
 // sterzo=100*event.acceleration.y;
  sterzo=map(sterzo,-1000,1000,0,510);
  dati[0]=sterzo;
  delay(50);
 // accelleratore=100*event.acceleration.x;
  accelleratore=map(accelleratore,-1000,1000,0,510);
  dati[1]=accelleratore;
  infrared.sendRaw(dati,2,38);
  Serial.println(accelleratore);
  Serial.println (sterzo);
}

La IRRemote dentro la sendRaw() abilita la spedizione, ma sfrutta il timer2:

void IRsend::enableIROut(int khz) {
  // Enables IR output.  The khz value controls the modulation frequency in kilohertz.
  // The IR output will be on pin 3 (OC2B).
  // This routine is designed for 36-40KHz; if you use it for other values, it's up to you
  // to make sure it gives reasonable results.  (Watch out for overflow / underflow / rounding.)
  // TIMER2 is used in phase-correct PWM mode, with OCR2A controlling the frequency and OCR2B
  // controlling the duty cycle.
  // There is no prescaling, so the output frequency is 16MHz / (2 * OCR2A)
  // To turn the output on and off, we leave the PWM running, but connect and disconnect the output pin.
  // A few hours staring at the ATmega documentation and this will all make sense.
  // See my Secrets of Arduino PWM at http://arcfn.com/2009/07/secrets-of-arduino-pwm.html for details.
  // Disable the Timer2 Interrupt (which is used for receiving IR)
  TIMER_DISABLE_INTR; //Timer2 Overflow Interrupt
  pinMode(TIMER_PWM_PIN, OUTPUT);
  digitalWrite(TIMER_PWM_PIN, LOW); // When not sending PWM, we want it low
  TIMER_CONFIG_KHZ(khz);
}

Non è che anche la libreria del ADXL345 usa lo stesso? Dalla prova di @Brunello sembrerebbe di si.
Fai come lui, prova a togliere per il momento il codice del ADXL.
Che Arduino usi, Mega o Uno ?

Ho una mega., ma la prova l'ho fatta con uno stand alone xche la mega mi serviva per leggere l'array con la seriale

@ brunello, ma ti lampeggia anche se levi i commenti?

Se levo i commenti non me lo compila.

Visto che e' uno standalone, il led lo hai collegato al piedino 5 del 328 ?

scusa il ritardo nella risposta. Certo il pin è il numero 5. Ora provo a riscrivere lo scketh senza usare la libreria.

Nuova versione del "telecomando" con la libreria dell'adxl345 ed irremote:

#include <IRremote.h>

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_ADXL345.h>
int x=0;
int y=0;
unsigned int dati[2];
/* Assign a unique ID to this sensor at the same time */
Adafruit_ADXL345 accel = Adafruit_ADXL345(12345);
IRsend infrared;

void displaySensorDetails(void)
{
  sensor_t sensor;
  accel.getSensor(&sensor);
  Serial.println("------------------------------------");
  Serial.print  ("Sensor:       "); Serial.println(sensor.name);
  Serial.print  ("Driver Ver:   "); Serial.println(sensor.version);
  Serial.print  ("Unique ID:    "); Serial.println(sensor.sensor_id);
  Serial.print  ("Max Value:    "); Serial.print(sensor.max_value); Serial.println(" m/s^2");
  Serial.print  ("Min Value:    "); Serial.print(sensor.min_value); Serial.println(" m/s^2");
  Serial.print  ("Resolution:   "); Serial.print(sensor.resolution); Serial.println(" m/s^2");  
  Serial.println("------------------------------------");
  Serial.println("");
  delay(500);
}

void displayDataRate(void)
{
  Serial.print  ("Data Rate:    "); 
  
  switch(accel.getDataRate())
  {
    case ADXL345_DATARATE_3200_HZ:
      Serial.print  ("3200 "); 
      break;
    case ADXL345_DATARATE_1600_HZ:
      Serial.print  ("1600 "); 
      break;
    case ADXL345_DATARATE_800_HZ:
      Serial.print  ("800 "); 
      break;
    case ADXL345_DATARATE_400_HZ:
      Serial.print  ("400 "); 
      break;
    case ADXL345_DATARATE_200_HZ:
      Serial.print  ("200 "); 
      break;
    case ADXL345_DATARATE_100_HZ:
      Serial.print  ("100 "); 
      break;
    case ADXL345_DATARATE_50_HZ:
      Serial.print  ("50 "); 
      break;
    case ADXL345_DATARATE_25_HZ:
      Serial.print  ("25 "); 
      break;
    case ADXL345_DATARATE_12_5_HZ:
      Serial.print  ("12.5 "); 
      break;
    case ADXL345_DATARATE_6_25HZ:
      Serial.print  ("6.25 "); 
      break;
    case ADXL345_DATARATE_3_13_HZ:
      Serial.print  ("3.13 "); 
      break;
    case ADXL345_DATARATE_1_56_HZ:
      Serial.print  ("1.56 "); 
      break;
    case ADXL345_DATARATE_0_78_HZ:
      Serial.print  ("0.78 "); 
      break;
    case ADXL345_DATARATE_0_39_HZ:
      Serial.print  ("0.39 "); 
      break;
    case ADXL345_DATARATE_0_20_HZ:
      Serial.print  ("0.20 "); 
      break;
    case ADXL345_DATARATE_0_10_HZ:
      Serial.print  ("0.10 "); 
      break;
    default:
      Serial.print  ("???? "); 
      break;
  }  
  Serial.println(" Hz");  
}

void displayRange(void)
{
  Serial.print  ("Range:         +/- "); 
  
  switch(accel.getRange())
  {
    case ADXL345_RANGE_16_G:
      Serial.print  ("16 "); 
      break;
    case ADXL345_RANGE_8_G:
      Serial.print  ("8 "); 
      break;
    case ADXL345_RANGE_4_G:
      Serial.print  ("4 "); 
      break;
    case ADXL345_RANGE_2_G:
      Serial.print  ("2 "); 
      break;
    default:
      Serial.print  ("?? "); 
      break;
  }  
  Serial.println(" g");  
}

void setup(void) 
{
  Serial.begin(9600);
  Serial.println("Accelerometer Test"); Serial.println("");
  
  /* Initialise the sensor */
  if(!accel.begin())
  {
    /* There was a problem detecting the ADXL345 ... check your connections */
    Serial.println("Ooops, no ADXL345 detected ... Check your wiring!");
    while(1);
  }

  /* Set the range to whatever is appropriate for your project */
  accel.setRange(ADXL345_RANGE_16_G);
  // displaySetRange(ADXL345_RANGE_8_G);
  // displaySetRange(ADXL345_RANGE_4_G);
  // displaySetRange(ADXL345_RANGE_2_G);
  
  /* Display some basic information on this sensor */
  displaySensorDetails();
  
  /* Display additional settings (outside the scope of sensor_t) */
  displayDataRate();
  displayRange();
  Serial.println("");
}

void loop(void) 
{
  /* Get a new sensor event */ 
  sensors_event_t event; 
  accel.getEvent(&event);
  x=100*event.acceleration.x;
  y=100*event.acceleration.y;
  //y=map(y,-1000,1000,0,510);
  dati[0]=y;
  //x=map(x,-1000,1000,0,510);
  dati[1]=x;
  infrared.sendRaw(dati,2,38);
  Serial.println(x);
  Serial.println (y);
  delay(100);
}