Probleme mit meiner for Schleife

Hallo!

Ich habe eine Zahl von 0 bis 255. Wenn ich die Funktion aufrufe sollen maximal 16 LEDs aufleuchten, welche über 4 shiftregister angeschlossen sind.

Diese Duo LEDs sollen drei Gruppen bilden, einmal Grün, gelb und rot.

Hier mein Code. Am Anfang teile ich den Wert durch 17, dadurch ergibt sich ein maximaler wert von 15, also perfekt für mich (LED 0 bis 15.)

void setLED(int value){
  int ledgroup = (value/17);

int green=ledgroup;
  for (int i=0;   i <=5 || i<= green; i++){
    ledgroup--;
   ShiftPWM.SetGroupOf2(i,255,0);
  }
int yellow=ledgroup;
  for (int i=6;   i <=11 || i<= yellow; i++){
    ledgroup--;
    ShiftPWM.SetGroupOf2(i,255,255);
  }
  int red=ledgroup;
  for (int i=12;   i <=15 || i<= red; i++){
    ledgroup--;
    ShiftPWM.SetGroupOf2(i,0,255);
  }

Jedoch habe ich das Problem das es nicht funktioniert.

Wenn ich bspw. In jeder Schleife das Shiftpwm durch

Serial.println("step1");
       Serial.println(ledgroup,DEC);

Ersetze, sehe ich maximal einmal step1, dann scheint es sich irgendwie aufzuhängen :-/

Woran kann es liegen, bzw wie kann man das besser machen?

Bitte den gesamten Sketch, nicht nur einen Auszug.
Grüße Uwe

void Setup{
Serial.begin(9600);
setLED(230);
}

void loop{}

void setLED(int value){
  int ledgroup = (value/17);

int green=ledgroup;
  for (int i=0;   i <=5 || i<= green; i++){
    ledgroup--;
   Serial.println("step1");
       Serial.println(ledgroup,DEC);
  }
int yellow=ledgroup;
  for (int i=6;   i <=10 || i<= yellow; i++){
    ledgroup--;
   Serial.println("step2");
       Serial.println(ledgroup,DEC);
  }
  int red=ledgroup;
  for (int i=12;   i <=14 || i<= red; i++){
    ledgroup--;
   Serial.println("step3");
       Serial.println(ledgroup,DEC);
  }
}

Hab ihn nur Testweise ins Setup geschrieben weil ich ihn nur Testweise einmal ausführen wollte. Im Loop verhält er sich genauso, dort hängt er sich auch nach "step1" auf.

Gibt es denn sonst noch eine bessere Möglichkeit diese Werte quasi auf drei Funktionen aufzuteilen?

Gedacht habe ich mir das so dass die erste Funktion bei einem Wert von 8 quasi 6 mal ausgeführt, dann zur nächsten Springt und dort noch 2 mal ausgeführt wird. Also die erste Funktion mindestens x mal, maximal 5 mal, dann zur nächsten, mindesten x-5 mal und maximal 5 mal etc..

Ersetze in Deinen For-Schleifen den ODER-Operator (||) durch einen AND-Operator (&&), dann dürfte das Deiner Vorstellung näher kommen. So wie das jetzt ausformuliert ist, wird die erste Schleife bis zum Wert ledgroup hochgezählt, die restlichen kommen nie zum Zug.

EDIT: Zudem solltest Du die Initial-Werte überdenken. Du zählst ledgroup runter, aber vergleichst nach der ersten Schleife mit 6, obwohl Dein Wert dann bereits um 6 verkleinert ist.