INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Hilfe bei Schleife für Serial.read -> Ausgabe
01.05.2014, 10:39 (Dieser Beitrag wurde zuletzt bearbeitet: 01.05.2014 10:41 von itsy.)
Beitrag #1
Hilfe bei Schleife für Serial.read -> Ausgabe
Hallo,

ich würde gerne über die Konsole einige Einstellungen für ein Programm vornehmen.

Hierzu soll immer die vollständige Eingabe erfasst und in eine Variable geschrieben werden. Leider scheine ich irgendwo einen Denkfehler zu machen Undecided

Der Code im Loop:

while (Serial.available() == 0) {};
while (Serial.available()) command += (char)Serial.read();
Serial.println(command);

Er soll soll so lange warten, bis er einen Seriellen Eingang bekommt - das tut er auch.
Dann soll er eigentlich in die Schleife gehen, die den gesamten Inhalt des seriellen Eingangs in die Variable command schreibt - tut er aber nicht :-(
Es wird jedes Zeichen einzeln gelesen, dann geht er aus der Schleife, schreibt den Inhalt von command, liest das nächste Zeichen usw.

Ich möchte, dass er so lange in der Schleife bleibt, bis er alle Zeichen gelesen und in command geschrieben hat. Natürlich habe ich irgendwann die komplette Zeichenkette in command, aber wenn ich zum Beispiel mit dieser Eingabe abfrage, ob der Inhalt von command '1' oder '12' ist und er immer die komplette Loop durchläuft, dann wird er immer erst bei = '1' reagieren.

Noch problematischer wird es, wenn ich im Menü einige Ebenen habe in denen ich jeweils immer Abfragen vornehme. Diese Unterebenen werde ich dann niemals erreichen, weil er mir immer wieder in die Haupt-Loop geht.

Vielen Dank
itsy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.05.2014, 12:58
Beitrag #2
RE: Hilfe bei Schleife für Serial.read -> Ausgabe
Hallo,

habe grade ein weiteres Phänomen festgestellt, welches ich mir nicht erklären kann.

Wenn ich Werte im Eeprom speicher, dann sind sie immer noch vorhanden, wenn ich den gleichen Sketch erneut aufspiele.
Spiele ich einen anderen Sketch dazwischen auf, sind die Werte weg.

Da im Eeprom kein Programmcode gespeichert wird, verstehe ich nicht, warum mal die Werte erhalten bleiben und mal nicht - entweder der Eeprom wird bei Neuinstallation gelöscht oder nicht...

Viele Grüße
itsy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.05.2014, 13:11
Beitrag #3
RE: Hilfe bei Schleife für Serial.read -> Ausgabe
(01.05.2014 10:39)itsy schrieb:  Er soll soll so lange warten, bis er einen Seriellen Eingang bekommt - das tut er auch.
Dann soll er eigentlich in die Schleife gehen, die den gesamten Inhalt des seriellen Eingangs in die Variable command schreibt - tut er aber nicht :-(

Doch, das tut er.
Der PC liefert die Daten nur nicht schnell genug. Das nächste Byte ist offensichtlich noch nicht da. Daher läuft er hier weiter.
Ich programmiere solche Stellen lieber mit einem definierten Ende-Zeichen (z.B. Enter, #, $ oder was auch immer).
Dann musst du an dieser Stelle solange warten, bis dieses Zeichen aufgetreten ist.

Gruß, Alex
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.05.2014, 13:16
Beitrag #4
RE: Hilfe bei Schleife für Serial.read -> Ausgabe
Hallo Alex,

vielen Dank für Deine Antwort!

Bei meinem 3-Zeiler - wie würde ich dort Deine Version integrieren?

Viele Grüße
itsy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.05.2014, 13:26
Beitrag #5
RE: Hilfe bei Schleife für Serial.read -> Ausgabe
(01.05.2014 13:16)itsy schrieb:  Bei meinem 3-Zeiler - wie würde ich dort Deine Version integrieren?

Ungefähr so:

Code:
while (Serial.available() == 0);

while (true)
{
  if (Serial.available())
  {
    char c = (char)Serial.read();
    if (c == '#')
    {
      break;
    }
    command += c;
  }
}

Serial.println(command);
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.05.2014, 13:43
Beitrag #6
RE: Hilfe bei Schleife für Serial.read -> Ausgabe
Hallo itsy,

schreibe mal das in die loop():
Code:
char cc;
  String command;
  while (Serial.available() == 0) {};
  while (Serial.available())
  {
    cc = Serial.read();
    command = command + (String)cc;
  }
  Serial.print(command);

Der EEPROm erhält seine Daten eigentlich auch wenn der Strom weg ist.
Kann es sein, der Sketch den du hier gemeint hast
Code:
Spiele ich einen anderen Sketch dazwischen auf, sind die Werte weg.
mittels EEPROM.write() alle Bytes im EEPROM löscht?

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.05.2014, 16:38 (Dieser Beitrag wurde zuletzt bearbeitet: 01.05.2014 17:20 von itsy.)
Beitrag #7
RE: Hilfe bei Schleife für Serial.read -> Ausgabe
Hallo,

habt vielen Dank für Eure Antworten :-)
Ich denke, dass ich wohl wirklich mit einem definierten Abschlusszeichen arbeiten muss, damit es funktioniert.

Zu der anderen Frage:
Ich habe inzwischen gelesen, dass das Fusebit so gesetzt ist, dass beim Aufspielen eines neuen Sketches der EEPROM gelöscht wird. Ich weiß zwar nicht, warum er nicht gelöscht wird, wenn ich den gleichen Sketch erneut aufspiele, aber egal ...

Nun habe ich versucht die Fusebits zu setzen - also bin ich in meiner kleinen Welt hingegangen, habe einen Uno als ISP programmiert, meinen Mini drangehangen und zuvor im Arduinoverzeichnis in der boards.txt für den Mini die neuen Fusebits gesetzt - aber Pustekuchen - sooo einfach scheint es nicht zu gehen.

Nun suche ich nach einer Möglichkeit die Fusebits beim Arduino zu setzen - möglichst mit einem Ardu als ISP, um nicht hierfür extra einen 30€ Programmer kaufen zu müssen (man muss sich das mal auf das Bit umrechnen ;-) ).

Viele Grüße
itsy

Und sie dreht sich doch ... meine kleine Welt ;-)

Hatte wohl eine falsche Referenz erwischt!

Wenn man in der boards.txt das high-fuse-bit auf =0xd0 setzt, dann bleibt der EEPROM auch nach dem Aufspielen eines neuen Sketches erhalten :-)

mini328.bootloader.high_fuses=0xd0

Dann kann es ja los gehen ;-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  mit if aus do-while oder while Schleife aussteigen Nafetz 6 97 Gestern 21:41
Letzter Beitrag: Pit
  while Schleife nach sleep mode interrupt tklaus 13 245 23.11.2016 17:40
Letzter Beitrag: Tommy56
  Do-While-Schleife Abbruchbedinung Majera 14 252 22.11.2016 18:07
Letzter Beitrag: Pit
  Schleife Hannes 3 193 16.11.2016 00:54
Letzter Beitrag: Hannes
  Ausgabe Serial Monitor zu viele Byt`s Hannes 0 96 12.11.2016 20:29
Letzter Beitrag: Hannes
  Ausgabe auf WIFI Console vom UNO WIFI MZ-Lurre 0 90 17.10.2016 11:33
Letzter Beitrag: MZ-Lurre
  Hilfe: IR Remote Steuerung, MSGEQ7 + RGB-LED Streifen dastob 1 120 14.10.2016 21:40
Letzter Beitrag: hotsystems
Sad Ich brauche Hilfe Prosac 4 233 09.10.2016 18:39
Letzter Beitrag: Prosac
  Speicher sparen bei serial.print?? DL1AKP 3 193 02.09.2016 13:32
Letzter Beitrag: hotsystems
  at24c256 Hilfe Gandalf 6 249 29.08.2016 18:59
Letzter Beitrag: MKc

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste