Forum: Mikrocontroller und Digitale Elektronik einzelnes struct an structarray zurückgeben


von Marion (Gast)


Lesenswert?

Hallo,

ich habe ein struct Array.
1
struct cHSV
2
{
3
  union {
4
    struct {
5
      union {
6
        uint8_t hue;
7
      uint8_t h; };
8
      union {
9
        uint8_t saturation;
10
        uint8_t sat;
11
      uint8_t s; };
12
      union {
13
        uint8_t value;
14
        uint8_t val;
15
      uint8_t v; };
16
    };
17
    uint8_t raw[3];
18
  };
19
};
20
const int NUM_LEDS = 10;
21
struct cHSV leds[NUM_LEDS];

Nun würde ich gerne mit einer Funktionen eine Led ändern.
1
leds[0] = setHSV(hue, sat, val);
1
struct cHSV setHSV( uint8_t hue, uint8_t sat, uint8_t val)
2
{
3
  struct cHSV hsv;
4
  hsv.hue = hue;
5
  hsv.hue = sat;
6
  hsv.hue = val;
7
  return hsv;
8
}


Aufgerufen werden soll das ganze so, innerhalb einer anderen Funktionen. 
Das geht leider nicht, die Leds bleiben unberührt.
1
leds[0] = setHSV(hue, sat, val);

von Marion (Gast)


Lesenswert?

1
struct cHSV setHSV(uint8_t hue, uint8_t sat, uint8_t val)
2
{
3
  struct cHSV hsv[1];
4
  hsv[0].hue = hue;
5
  hsv[0].sat = sat;
6
  hsv[0].val = val;
7
  
8
  return *hsv;
9
}

So geht es. Kann man das ganze auch ohne, dass ich hsv[1] machen muss. 
Also nur hsv?

von Peter II (Gast)


Lesenswert?

Marion schrieb:
> So geht es. Kann man das ganze auch ohne, dass ich hsv[1] machen muss.
> Also nur hsv?
was kommt denn für ein Fehler?

von Karl H. (kbuchegg)


Lesenswert?

Marion schrieb:
>
1
> struct cHSV setHSV(uint8_t hue, uint8_t sat, uint8_t val)
2
> {
3
>   struct cHSV hsv[1];
4
>   hsv[0].hue = hue;
5
>   hsv[0].sat = sat;
6
>   hsv[0].val = val;
7
> 
8
>   return *hsv;
9
> }
>
> So geht es. Kann man das ganze auch ohne, dass ich hsv[1] machen muss.
> Also nur hsv?

Natürlich.
Das geht schon so, wie du das im Eröffnungsposting gezeigt hast.
Wenn nicht, liegt der Fehler im Code, den du nicht gezeigt hast.

von Karl H. (kbuchegg)


Lesenswert?

Oops
1
struct cHSV setHSV( uint8_t hue, uint8_t sat, uint8_t val)
2
{
3
  struct cHSV hsv;
4
  hsv.hue = hue;
5
  hsv.hue = sat;
6
  hsv.hue = val;
7
  return hsv;
8
}

Lauter Zuweisungen an hsv.hue?

Fehler im Code oder Tippfehler im geposteten Ausschnitt, der so gar 
nicht in deinem Programm steht?

von Marion (Gast)


Lesenswert?

Das war es, hatte beim c&p die Änderungen für hue vergessen. Somit wurde 
val auch nie gesetzt. val == 0 > Led AUS ;)

Danke

von Peter II (Gast)


Lesenswert?

ich halte es aber nicht für sinnvoll stucts zu kopieren.

Warum nicht in die SetFunktion ein zeiger auf die struct mitgeben?
1
setHSV(leds, hue, sat, val);

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.