Serial.print() Zeit richtig anzeigen

Gast #6527811
Lesenswert?
• ▲
▼
Hallo ich bin wieder auf ein kleines Problem gestoßen und zwar habe ich 
einen Timer so eingestellt das dieser alle 100ms in die ISR springt und 
die Zeit berechnet. Aktuell um einfach nur zu prüfen habe ich die 
Ausgabe in der ISR drin stehen siehe hier

ISR(TIMER1_COMPA_vect) { // called by timer1
  i++;
  if (i==10){
    Serial.print(minute);
    Serial.print(":");
    Serial.println(sekunde);
    sekunde++;
    i=0;
    if (sekunde>59){
      minute++;
      sekunde=0;

Jetzt wird mir natürlich im Monitor die Zeit gezählt aber solange die 
Minuten bzw. sekunden nur eine Stelle haben sieht das ganze natürlich 
doof aus wie bekomme ich das hin das es vernünftig angezeigt wird? Ich 
könnte das ganze natürlich mit einer if abfrage lösen aber ich meine 
damals bei BAscom konnte man da irgendwie ein Format beim Printbefehl 
eingeben geht das bei Arduino auch?
#6527818
Lesenswert?
• ▲
▼
Sebastian schrieb:
> etzt wird mir natürlich im Monitor die Zeit gezählt aber solange die
> Minuten bzw. sekunden nur eine Stelle haben sieht das ganze natürlich
> doof aus

dann frage doch vor dem print ob Minute und Sekunde <10 ist
und "printe" erst eine '0' und dann Minute und/oder Sekunde

Wenn Minute und Sekunde >=10 ist "printe" normal

if (i>9 && i<60){
 Serial.print(minute);
}
else{
 Serial.print("0");
 Serial.print(minute);
}

erweitere das zu Sekunde, Minute, Stunde, Tag, Monat, Ja(h)r.
Gast #6527867
Lesenswert?
• ▲
▼
War da nicht die Einschränkung, dass man keine serielle Ausgaben 
innerhalb der ISR machen darf? Ich meine mich zu erinnern, dass sich die 
Sache aufhängt, wenn der Ausgabepuffer voll läuft.

Ich würde die Zahlen innerhalb der ISR berechnen, die Anzeige aber 
innerhalb der Hauptschleife loop() machen. Dann ist auch egal, wie lange 
das dauert.
Gast #6529525
Lesenswert?
• ▲
▼
Adam P. schrieb:
> Ja aber nicht einfach so...
> dann musst du es manuell umbiegen, die Ausgabe - halt wie beim AVR.

Yes!
1
int printCHAR(char character, FILE *stream)
2
{
3
  (void)stream;
4
  Serial.write(character);
5
  return 0;
6
}
7
//               { 0, 0, flags, 0, 0, put, get, 0 }
8
FILE outStream   { 0, 0, _FDEV_SETUP_WRITE, 0, 0, printCHAR, nullptr, 0 } ;
9
// Das Makro FDEV_SETUP_STREAM tut nicht mit C++
10

11
void setup() 
12
{
13
  stdout = &outStream;
14
  Serial.begin(9600);
15

16
  byte value = 7;
17
  printf("test 0x%02X\r\n",value);
18
  printf("test %02d\r\n",value);
19
}
20

21
void loop(){}
Gast #6529585
Lesenswert?
• ▲
▼
Adam P. schrieb:
> bezweifel stark, dass ein typischer Arduino User dies versteht.
Ich denke nicht, dass man Arduino User(überhaupt Menschen) in den Sack 
"typisch" stecken sollte.
Es sei denn man möchte den Knüppel rausholen und drauf kloppen.

Man nimmt ihnen durch Projektion den Raum für Entwicklung.
Übles Beispiel:
Beitrag "Re: Programmierung Arduino Nano"
Da sieht man, wie ein (vermutlich) erwachsener Mann ein (vermutlich) 
Kind mit der Nase in den Dreck stößt.
(aus dem Forum vertreibt)

---
Wenn 10% aller mitlesenden  Arduino User das Beispiel verstehen/anwenden 
können, dann hat sich das posten gelohnt.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.