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
  Serial.write fraju 5 251 23.07.2017 21:57
Letzter Beitrag: Mathias
  Ublox Neo 6M und Nextion ! Bitte um Hilfe. b3ta 19 596 13.07.2017 14:52
Letzter Beitrag: Tommy56
  Anfänger sucht erfahrene Hilfe Customizer 21 1.009 11.07.2017 21:37
Letzter Beitrag: Customizer
  Bitte um Hilfe Arduino Nano-MAX7219-PIR_Sensor Opa_Klaus 35 1.347 20.05.2017 21:11
Letzter Beitrag: Opa_Klaus
  Brauche Hilfe für meine Abfüllanlage/ millis() Slash96 8 489 10.05.2017 21:04
Letzter Beitrag: MicroBahner
  Array mit Serial.read befüllen Gonmaus 4 389 01.05.2017 09:13
Letzter Beitrag: Gonmaus
  serial monitor, Ausgabe übereinander möglich?? silversurfer123 4 264 18.04.2017 19:19
Letzter Beitrag: silversurfer123
Question Problem beim Hochladen auf AtTiny45. Hilfe -.- Jonas Lindenblatt 17 1.022 16.04.2017 12:58
Letzter Beitrag: Jonas Lindenblatt
  Interrupt und Software Serial BennIY 6 423 29.03.2017 22:25
Letzter Beitrag: BennIY
  Zeitschaltuhr Hilfe für RTC Anfänger 4Jordy 4 378 24.03.2017 15:23
Letzter Beitrag: MicroBahner

Gehe zu:


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