Serial als string einlesen

Hi

Bin ganz neu hier. Bin auf der Suche, wie man bei Serial.read den Text als string einliest?
wäre extrem froh wenn jemand vlt ein kleines Beispielprogramm hat, und das reinstellen könnte

Vielen Dank für Antworten

void loop(void)
{
  unsigned char string[50];  //legt einen string an mit maximal 50 zeichen
  
  // es gibt nun ganz viele möglichkeiten das einzulesen, z.b. mit while, for, oder einfach mit einer globalen variable und in der loop
  while (Serial.available() > 0 && i<50) {
      // einlesen
      string[i] = Serial.read();
      i++;
  }
  Serial.flush();

  // mach etwas mit dem string

}

Wenn du mit Zeigern arbeitest, kannst du dir die Variable i auch sparen, aber das ist ein anderes Thema.

Was bewirkt..

Serial.flush();

..?

Gruß Chris

Es fehlt bei Deinem string aber das abschliessende 0-Byte.
Also eher

while (Serial.available() > 0 && i<49) {
      // einlesen
      string[i] = Serial.read();
      i++;
  }
string[i] = 0;

Serial.flush() bewirkt das alles was noch im Puffer steht gesendet wird. Bringt beim reinen Empfangen also gar nix.
Siehe auch : Serial.flush() - Arduino Reference

hab das jetzt so gemacht, geht aber nicht. Es schreibt einfach eine leere Zeile? :blush:

String Name;
int i;


void setup(){
  Serial.begin(9600);
}

void loop(){
  
  Serial.println("Geben Sie oben Ihren Namen ein.");  
  delay(10000);
  while (Serial.available() > 0 && i<49) {
      // einlesen
      Name[i] = Serial.read();
      i++;
  }
  Serial.flush();
  Serial.println(Name);
  Name[i] = 0;
}

Mir wäre 10 sek zu kurz, um meinen Namen einzugeben und Send zu drücken.
Da ein Arduino Programm sowieso ewig läuft, würde ich versuchen, ganz ohne delay auszukommen.
( Höchstens, um nach dem ersten Zeichen lange genug auf weitere zu warten )

i wird übrigens nie zurückgesetzt.

Die richtige Reihenfolge wäre:

Name[i] = 0;
Serial.println(Name);
i=0;

Erstaunlich das es überhaupt geht. Denn "Name" ist als String deklariert, nicht als char[] oder char*.
Aber, es funktioniert ja auch nicht :slight_smile: