Pages: [1]   Go Down
Author Topic: Serial als string einlesen  (Read 1549 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: December 14, 2012, 08:17:51 am by ChuckNorris95 » Logged

Germany, Osnabrück
Online Online
God Member
*****
Karma: 30
Posts: 654
E-Technik Student - Master
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:

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.

               




Logged

Offline Offline
God Member
*****
Karma: 11
Posts: 599
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Was bewirkt..

Code:
Serial.flush();

..?

Gruß Chris
Logged


Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Es fehlt bei Deinem string aber das abschliessende 0-Byte.
Also eher
Code:
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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hab das jetzt so gemacht, geht aber nicht. Es schreibt einfach eine leere Zeile?  smiley-red

Code:
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;
}
« Last Edit: December 14, 2012, 10:15:58 am by ChuckNorris95 » Logged

Germany
Online Online
Faraday Member
**
Karma: 56
Posts: 2998
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
Name[i] = 0;
Serial.println(Name);
i=0;
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Pages: [1]   Go Up
Jump to: