Hc 06 modul will nicht richtig

Hallo,
ich hab mir ein HC 06 auf ebay gekauft und versucht es auszuprobieren.
Ich hab das Skript auf mein arduino uno geladen

#include <SoftwareSerial.h>


SoftwareSerial blue(2, 3); //RX, TX
int R = 7;
int G = 6;
int B = 5;

int index = 0;
String content = "";
char character;

void setup()
{
   blue.begin(9600);
   blue.println("connected");

}

void loop()
{

  while(blue.available()) 
  {
      character = char(blue.read());
      content.concat(character);
  }
  
  if (content == "")
  {
  digitalWrite(R, LOW);
  digitalWrite(G, LOW);
  digitalWrite(B, HIGH);
  }
  else if(content == "Turn Led on>")
  {
  blue.println(content);
  digitalWrite(R, LOW);
  digitalWrite(B, LOW);
  digitalWrite(G, HIGH);
  delay(2000);
  }
  else
  {
  blue.println(content);
  digitalWrite(G, LOW);
  digitalWrite(B, LOW);
  digitalWrite(R, HIGH);
  delay(2000);
  }
  content = "";
}

an den Pins 5,6,7 hab ich jeweils die Pins einer RGB-Led gelegt. Diese haben eine gemeinsame Anode.

wenn ich nun per Serial Monitor Turn Led on> sende, wird meine Led rot und das ausgegebene sieht so aus:

Turn
 e@?¹ù

wo hab ich mein Denkfehler?

Hallo,
definier die Länge des Strings mal vorher.
Möglicherweise sendet die IDE auch noch ein LF.
Gruß
Reinhard

Danke für deine Antwort, ich hab das definieren versucht, kein Unterschied.
Dann hab ich ein delay von 10 nach content.concat() eingefügt. Es geht nun.
Hast du eine Erklärung warum?

Und ausserdem wird das zurückgegebene nach dem 70 Zeichen wieder zu dem unsinnigem Zeug.
Ist aber nicht weiter schlimm.

Die Daten laufen mit 9600 Baud rein, wahrscheinlich wird der Eingangsbuffer schneller ausgelesen als die Zeichen reinkommen, er ist als kurzzeitig leer und die Schleife wird verlassen. Das delay(10) verhindert das. Du solltest besser mit einem Stringdelimiter arbeiten und die Zeichen so lange einlesen, bis der Delimiter erkannt wird.

Ganz einfach. Die serielle Übertragung ist langsam. Bei 9600 Baud (und mehr solltest du bei SoftwareSerial nicht verwenden) dauert ein Zeichen etwa 1ms! Du versuchst also Zeichen einzulesen die noch unterwegs sind.

Besser liest man daher bis zu einem Terminator ein. z.B. ein Linefeed oder Carriage Return. Den SerialMonitor kann man so einstellen, dass das immer mitgeschickt wird. Hier ist eine bessere Auslese-Routine, die auch auf die schlechten und ineffizienten String Objekte verzichtet:

Da ist auch erklärt wie man bei C-Strings vergleicht. Das geht da nicht mit == !!