Forum: Mikrocontroller und Digitale Elektronik Arduino serielle Kommunikation


von Stefan B. (sebzat)


Lesenswert?

Hallo,
ich möchte zu meinen Datenlogger einen Datumstempel hinzufügen. Es gibt 
ja die Funktion setTime(Datum+Uhrzeit). Mit der geht das ja alles sehr 
gut. Ich finde es nur nervig, dass man jedesmal das Datum erst im Sketch 
eintragen und anschließend den Sketch auf das Arduino übertragen muss.
Ich wollte jetzt über den serial Monitor eine Abfrage dazu 
programmieren.
Jedoch wartet der Arduino nicht auf die Eingabe und schreibt sofort 255.
Ich muss zugeben, dass ich nicht so fit bin mit c und auch deswegen mich 
mit dem Arduino befasse. Hab jetzt schon viel gesucht im Web, jedoch 
ohne Erfolg.
Vlt such ich auch unter den falschen Stichwörtern.

Mein Code:
1
 Serial.print("Jahr in jj: ");
2
    jj = Serial.read();
3
    Serial.println(jj);
4
    Serial.print("Monat in MM: ");
5
    mm = Serial.read();
6
    Serial.println(mm);
7
    Serial.print("Tag in TT: ");
8
    tt = Serial.read();
9
    Serial.println(tt);
10
    Serial.print("Stunde in HH: ");
11
    hh = Serial.read();
12
    Serial.println(hh);
13
    Serial.print("Minute in mm: ");
14
    mo = Serial.read();
15
    Serial.println(mo);
16
    Serial.print("Sekune in SS: ");
17
    ss = Serial.read();
18
    Serial.println(ss);
19
    
20
  
21
  setTime(hh,mm,ss,tt,mo,jj);

danke schon mal

von Wusel D. (stefanfrings_de)


Lesenswert?

I have no arduino experience. However, read() functions are usually made 
to read a single byte and they do not wait if a byte is avaiable.

You probably want to set a timeout and read many bytes until a carriage 
return (Enter-key) has been received. You should also checkout the 
documentation about the available() function.

von Markus M. (mark_m)


Lesenswert?

Die "Serial.read()" Methode liest sofort den Serial Input Buffer aus. 
Stehen dort keine Daten, dann ist der Returnwert -1 (255).

Du kannst jetzt so oft "Serial.read()" aufrufen bis der Rückgabewert 
nicht mehr -1 ist oder du nutzt die Methode  "Serial.available()" vor 
dem Aufruf von "Serial.read()".

So steht es auch in den Beispielen zur Klasse "Serial".

http://arduino.cc/en/Serial/Read

Dann gibt es noch die Methode "SerialEvent". Diese wird automatisch 
aufgerufen, sobald Daten auf der Seriellen Schnittstelle eintreffen.

http://arduino.cc/en/Tutorial/SerialEvent

Du musst als in den Griff bekommen, nur dann Daten zu lesen, wenn auch 
welche eingetroffen sind.


Grüsse

von Stefan B. (sebzat)


Lesenswert?

ok danke
ich hatte schon sowas vermutet.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.