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?
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.
:
Bearbeitet durch User
Ja aber das ging irgendwie mit Strings und Format oder so einfacher
Sebastian schrieb: > Ja aber das ging irgendwie mit Strings und Format oder so einfacher auch das kann man machen mit Formatvorgabe %02d Ich bin ja eher der Fan von Brot für die Welt, nicht Brot verteilen sondern Hilfe zur Selbsthilfe geben!
:
Bearbeitet durch User
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.
Ja natürlich das mache ich später nicht mehr in der isr das war nur zum testen
Joachim B. schrieb: > auch das kann man machen mit Formatvorgabe %02d Sebastian schrieb: > ja genau das meinte ich danke Joachim Ihr redet aber schon von sprintf() ?
1 | char foo[6]; |
2 | |
3 | sprintf(foo, "%02d:%02d", minute, sekunde); |
4 | Serial.println(foo); |
Die Serial Klasse kann doch keine Formatierung, oder hab ich da was verschlafen :-) ?
Adam P. schrieb: > Die Serial Klasse kann doch keine Formatierung, oder hab ich da was > verschlafen :-) ? Für die AVR Boards ist das richtig. Für andere Boards muss man schauen. Aber auch printf() lässt sich nutzen.
Arduino Fanboy D. schrieb: > Aber auch printf() lässt sich nutzen. printf() mit Arduino? Ja aber nicht einfach so... dann musst du es manuell umbiegen, die Ausgabe - halt wie beim AVR.
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(){} |
Arduino Fanboy D. schrieb: > Yes! Genau das meinte ich, bezweifel stark, dass ein typischer Arduino User dies versteht. :-) aber hey, Arduino IDE / Lib. ist nicht das Ende der Welt... es geht noch tiefer :-D
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.