Serial wird nur einmal asugeführt?

Hallo, ich habe ein eigenartiges Problem:

void setup() {
  Serial.begin(115200);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(13, OUTPUT);
   
   
}

void loop()
{
  byte adress;
  byte r_value;
  byte g_value;
  byte b_value;

  while(Serial.available() >=3)
    {
      digitalWrite(13, LOW);
delay(200);
     
          r_value=Serial.read();
          g_value=Serial.read();
          b_value=Serial.read();
          

     
          analogWrite(9, int(r_value));
          analogWrite(10, int(g_value));
          analogWrite(11, int(b_value));
      }
    digitalWrite(13, HIGH);
    
}

Ein C# Programm sendet jetzt 3 Bytes an meinen Arduino, der daraufhin die Farben einer RGB Led anpasst. Das funktioniert auch super soweit, ich sende z.B: 0,0,255 und die Led wird blau. Sende ich daraufhin aber erneut 3 Bytes z.B 255,0,0 passiert gar nichts mehr, die Led bleibt blau. Die an Pin13 angeschlossene "Kontroll-Led" wird auch nicht mehr dunkel, was sie aber werden müsste, sobald >=3 Bytes vorhanden sind.

Bestimmt ein ganz dummer Fehler oder?

Danke für eure Hilfe!

Serial.read wird schon mehrfach ausgeführt, nur Deine Auswertung ist nicht zielführend. Wenn Du 0,0,255 sendest, so kommt beim Arduino folgendes an: 1. while-loop: 48 (die erste Null) 44 (das erste Komma) 48 (die zweite Null)

  1. while-loop: 44 (das zweite Komma) 50 (die Zwei aus 255) 53 (die erste Fünf aus 255)

So wie Dein Sketch ist, wertest Du die Eingabe einfach falsch aus ;)

mime hat Deinen Fehler schon ausführlich erklärt - Dein Programm sendet eben nicht nur 3 Bytes.

Du könntest arduinoseitig Dein Programm so lassen, wenn du anstelle der ASCII-Werte und Kommas einfach nur 3 Bytes an den Arduino sendest, für jede Farbe eins. In ein Byte passen ja 0..255 (oder hexadezimal ausgedrückt: 0x00 .. 0xff).

Gruß, mmi