Go Down

Topic: Serial als string einlesen (Read 1 time) previous topic - next topic

ChuckNorris95

Dec 14, 2012, 02:13 pm Last Edit: Dec 14, 2012, 02:17 pm by ChuckNorris95 Reason: 1
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

Jomelo

Code: [Select]


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.

               





Chris72622

Was bewirkt..

Code: [Select]
Serial.flush();

..?

Gruß Chris
https://github.com/jeffThompson/DarkArduinoTheme

mkl0815

Es fehlt bei Deinem string aber das abschliessende 0-Byte.
Also eher
Code: [Select]

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 : http://arduino.cc/en/Serial/Flush

ChuckNorris95

#4
Dec 14, 2012, 04:10 pm Last Edit: Dec 14, 2012, 04:15 pm by ChuckNorris95 Reason: 1
hab das jetzt so gemacht, geht aber nicht. Es schreibt einfach eine leere Zeile?  :smiley-red:

Code: [Select]

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;
}

michael_x

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:

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

mkl0815

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

Go Up