Hi inka,
die variable (array) "uint8_t RP6data[32]", die auch so definiert wird und dann in der zeile:
I2CTWI_readBytes(I2C_RP6_BASE_ADR,RP6data, 30);
auch als RP6data beschrieben/gefüllt wird...
aber wie gesagt, das muss ich erstmal verstanden haben...
Das ist ja eine Funktion aus der RP6I2CmasterTWI-Library.
Im Header der Lib ist die Funktion als Prototyp so deklariert:
Code:
void I2CTWI_readBytes(uint8_t targetAdr, uint8_t * messageBuffer, uint8_t numberOfBytes);
Das heißt: Als 2. Parameter wird der messageBuffer als Adresse (im Speicher, also nicht als Wert) übergeben. In der Lib besteht der messageBuffer aus der Feldvariablen RP6data, so dass man die Funktion so aufrufen kann, wie du oben angeführt hast. Das geht so aber nur, wenn RP6data in der Parameterliste einer Funktion auftaucht.
Grundsätzlich würde ich einer einzelnen Variablen nicht den Namen einer Feldvariable geben, dann bleibt's übersichtlich.
Für dein Programm:
Ich würde die read_IR_value() Funktion so ändern:
Code:
uint8_t read_IR_value(void)
{ uint8_t temp;
I2CTWI_transmitByte(I2C_RP6_BASE_ADR, 30); // Start with register 30
I2CTWI_readBytes(I2C_RP6_BASE_ADR, temp, 1);
return temp;
}
Die Funktion hat dadurch einen Byte-Rückgabewert und wird so aufgerufen: Wert = read_IR_value();
Wenn du diese Werte dann in eine Feldvariable übernehmen willst:
Code:
i = 0;
// Schleife:
ir_value[i] = read_IR_value();
i++;
Wenn du diese zwei Zeilen mehrfach aufrufst (z.B. in einer Schleife), wird dein Wert (IR-Empfang ja oder nein) nacheinander in die Feldvariable ir_value gepackt.
Du must natürlich dafür sorgen, das sie ausreichend dimensioniert ist und i also nicht zu hoch wird.
ein kleiner erfolg auf dem weg zu einer funktionierenden bake
Klingt gut!
Lesezeichen