Fehlermeldung:initializer fails to determine size of ...

Grüße,

ich arbeite gerade an einer Infrarotkommunikation, die Temperaturdaten (MCP9808) übertragen soll. Die Daten von den Sensoren werden mittels I2C eingelesen. Beide Funktionen, d.h. die Temperaturdaten erfassen und ausgeben und die Kommunikation funktionieren einzeln schon.

Ich habe aber Probleme die beiden Programme nun miteinander zu verknüpfen. Ich erhalte immer die Fehlermeldung “initializer fails to determine size of ‘data’”.

Prinzipiell lässt sich der Sketch kompilieren, wenn ich in void loop() statt char data zu schreiben char* data verwende. Ich erhalte aber auf Empfängerseite trotzdem kein sinnvolles Ergebnis.

Hier noch mein Sketch (Sender), ich vermute das der Fehler in der Funktion void sendIRData (char IRData) liegt.

Ich hoffe mir kann jemand sagen, wie ich meinen Code anpassen kann.

Mit freundlichen Grüßen

#include <Wire.h>
#include <SoftwareSerial.h>

const int rxpin=3; //PD2 als RX Pin
const int txpin=2; // PD3~ als TX Pin

const int SN = 206; // Bezeichner für den Start der Nachricht
const int EN = 219; // Bezeichner für das Ende der Nachricht

const long F_CARRIER_IR = 38000L; //Trägerfrequenz für die Modulierung

#define pwmpin 11 // Pin für die Modulierung

SoftwareSerial irsend(rxpin, txpin);

void setup() 
{
  //Baudrate für serielle Kommunikation über Infrarot
  irsend.begin(2400);

  TCCR2A = _BV(WGM21) | _BV(COM2A0);
  /*
  TCCR2A = Timer/Counter Control Register A
  WGM21 = Waveform Generation Mode konfiguriert als CTC (Clear Timer on Compare Match)
  COM2A0 = Toggle OC2A on Compare Match
  _BV = verändert Bit in Byte Wert
   */

  TCCR2B = _BV(CS20);
  /*
  TCCR2B = Timer/Counter Control Register B
  CS20 = kein Prescaling der Taktquelle für Timer/Counter Register bzw. Prescaling 1
   */

  OCR2A = (F_CPU/(F_CARRIER_IR*2L)-1);
  /*
  OCR2A = Output Compare Register
  Inhalt von OCR2A wird mit dem Timer/Counter Register verglichen, um PWM zu erzeugen
   */
   
  //Baudrate für den Betrieb der Temperaturensoren
  Serial.begin(9600);

  //Initialisierung der I2C Kommunikation
  Wire.begin();

  //Register der Sensoren MCP9808 vorbereiten
  for(int i=24; i<=24; i++)
    {
      //Temperaturregister (CONFIG, S.18) vorbereiten
      Wire.beginTransmission(i);
      Wire.write(0x01); //Registerpointer
      Wire.write(0x00); //Registerdaten
      Wire.write(0x00); //Registerdaten
      Wire.endTransmission();
  
      //Aufloesungsregister (RESOLUTION, S.29) vorbereiten
      Wire.beginTransmission(i);
      Wire.write(0x08); //Registerpointer
      Wire.write(0x03); //Registerdaten
      Wire.endTransmission();
    }
  
}

void sendIRData (char IRData[]) 
{
  int index = 0;
  byte checksum = 0;
  
  irsend.print((char)SN);
  
  while(IRData[index] != 0) 
  {
    irsend.print(IRData[index]);
    checksum = checksum + (byte)IRData[index];
    index++;
  }
  irsend.print((char)EN);
  irsend.print((char)checksum);
}

void loop() 
{

//Array definieren in das MSB und LSB geschrieben werden
byte sdata[2];

//Variablen zur Temperaturberechnung
int temp = 0;
float cTemp = 0;

  for (int j=24; j<=24; j++)
  {
      //Daten aus Temperaturregister (S.24) lesen und in array schreiben
      Wire.beginTransmission(j);
      Wire.write(0x05); //Registerpointer (read only)
      Wire.endTransmission();
      
      if(Wire.requestFrom(j, 2));
      {
        for(byte k=0; k<=2; k++)
        sdata[k]=Wire.read();
      }
  
    //Konvertierung der Daten von 16Bit zu 13Bit (S.25)
    int temp = ((sdata[0] & 0x1F) * 256 + sdata[1]);
    if(temp > 4095)
    {
    temp -= 8192;
    }
    float cTemp = temp * 0.0625;
    
    //Konvertierung float zu char
    char mybuffer[255];
    dtostrf(cTemp,6,2,mybuffer);

    //Serial.println(mybuffer);
    
    //Infarot Übertragung
    char data[] = mybuffer;
    sendIRData(data);
}

delay(1000);

}
char data[] = mybuffer;

Sowas geht nicht. In C sind Arrays keine Objekte wie in reinen OOP Sprachen! Was willst du da überhaupt mit einer extra Variablen? sendIRData(myBuffer) reicht doch

255 Bytes sind dafür übrigens nicht nötig

Und deine Vermutung war falsch. Wenn du genau hinsiehst, siehst du dass der Compiler die fehlerhafte Zeile anzeigt: 122.
Das ist nicht immer richtig, aber es schadet nichts da mal nachzuschauen

Danke für die Antwort. Der Code kann jetzt kompiliert werden, es war auch noch ein kleiner Logik Fehler im Code ich hab vergessen den PWM Pin als Output zu definieren :stuck_out_tongue: .