int*-Wert anzeigen lassen

Hallo,

für eine Lampenschaltung, benötige ich einen umgewandelten Farbwert von HSB auf RGB.

Ich habe diese Libary gefunden und es scheitert bei mir leider schon an den einfachsten Dingen :confused:

Da ich mit Arduino noch ziemlich am Anfang stehe, versuche ich mich mit dieser Lib. langsam heranzutasten und habe mir ein kleines Sketch geschrieben um zu schauen, wie der Ausgabewert ausschaut:

/*
  Converts HSB colors values to RGB color values
 
Integer Method:
  void H2R_HSBtoRGB(int hue, int saturation, int brightness, int* rbg_array);

Value Range:
    hue: 0 - 359
    saturation: 0 - 99
    brightness: 0 - 99

*/

#include <HSBColor.h>

int hue;
int saturation;
int brightness;
int* rbg_array;

void H2R_HSBtoRGB(int hue, int saturation, int brightness, int* rbg_array);

void setup(void) {
  Serial.begin(115200);
  
  hue = 300;
  saturation = 99;
  brightness = 99;
 
}
 
void loop(void) {
  
  H2R_HSBtoRGB;
  
  Serial.println(rbg_array);
  delay(5000);
  
}

Beinm kompilieren erscheint die Fehlermeldung:

call of overloaded 'println(int*&)' is ambiguous

Also muss int* rbg_array, wegen dem * wohl definiert werden.
Wie müsste hier die schreibweise von Serial.println(rbg_array) lauten ?

Vielen Dank!

Gruß
mendowser

Lerne den Zusammenhang zwischen Arrays und Zeigern. Array-Variablen sind Zeiger auf das erste Element. Daher haben Funktionen denen ein Array übergeben wird einen Zeiger als Parameter.

int* rbg_array ist lediglich ein Zeiger. Kein Speicher für eigentliche Daten. Die Funktion will ein Array aus int der Größe 3. Das siehst du wenn du dir mal die Implementierung anschaust.

Oder einfach die Beschreibung durchlesen:

The RGB values are saved into the integer array that is passed as the fourth parameter of each method. RGB values will range between 0 and 255. Make sure the array can accommodate three integers, otherwise the sketch won't work (though it may compile).

Also so:

int rbg_array[3];

Ist von der Library her aber nicht sauber gemacht. Da wäre es vernünftiger ein struct aus den 3 Werten zu haben

Weil heute Weihnachten ist (ungetestet):

// Wie Serenifly schon schrieb
int rbg_array[3]; // Irgendwohin müssen die RGB-Werte ja geschrieben werden
...
// 
void printArr(int * arr, byte len) {
  for(byte i=0; i < len;i++) {
    Serial.print(arr[i]);
    Serial.print(" ");
  }
  Serial.println("");
}

// Aufruf
printArr(rgb_arr,sizeof(rgb_arr));

Irgendwie vermisse ich noch die Funktion H2R_HSBtoRGB sowie deren Aufruf mit den Parametern.

Gruß Tommy

Tommy56:
Irgendwie vermisse ich noch die Funktion H2R_HSBtoRGB sowie deren Aufruf mit den Parametern.

Die Funktion ist in der Library. Das passt soweit. Aber der zweite Punkt stimmt. Den Prototyp muss man nicht nochmal hinschreiben. Der steht ja schon im Header

Also das in einer anderen Funktion (wie loop()):

H2R_HSBtoRGB(hue, saturation, brightness, rbg_array);

Danach stehen die Werte im Array und können ausgelesen werden.

Wieso muss man das Ziel-Array als Parameter übergeben? Weil eine Funktion keine Zeiger auf lokale Variablen zurückgeben kann. Und zwar weil der Speicher für die lokalen Variablen natürlich nach dem Ende der Funktion ungültig ist. Also muss der Speicher für solche Sachen außerhalb der Funktion existieren. C String Funktionen arbeiten nach dem gleichen Prinzip.