führende Null bei Zeitausgabe

Hallo zusammen,
Das Netz ist voll von Beiträgen zur führenden Null, aber ich habe nichts weiterführendes gefunden. Der Sketchabschnitt lautet:
Serial.print(now.hour(), DEC);
Serial.print(":");
Serial.print(now.minute(), DEC);
Serial.print(";");
Serial.print(" “);
Serial.print(temp,2);
Serial.print(’;’);
Serial.print(” ");
Serial.print( hum,2)
Nun Möchte ich, dass die Zeit mit führender Null ausgegeben wird. Ich habe schon versucht: "if (now.minute < 10) Serial.print (“0”); in allen Variationen, es geht nicht. Es muß doch hier eine Anweisung in einem Satz geben, der mir die “Null” anzeigt. Ihr werdet schon gemerkt haben, dass ich nicht programmieren kann - ich möchte ja auch nur einen Sketch abändern!
Vielen Dank für hilfreiche Antworten!
MfG
Horst

Hallo,

es muss if (now.minute() < 10) Serial.print(‘0’); heißen und nicht if (now.minute < 10)!

Gruß…

Ich machs so:

   void Write_Time_Serial(){
       RTC.getTime();
         if (RTC.day < 10) {
           Serial.print("0");
           Serial.print(RTC.day, DEC);
         }else{
            Serial.print(RTC.day, DEC);
         }
         Serial.print(".");   
         if (RTC.month < 10){
           Serial.print("0");
           Serial.print(RTC.month, DEC);
         }else{
           Serial.print(RTC.month, DEC);
         }
         Serial.print("."); 
         Serial.print(RTC.year, DEC);
         Serial.print(" ");    
         if (RTC.hour < 10){
           Serial.print("0");
           Serial.print(RTC.hour, DEC);
         } else{
            Serial.print(RTC.hour, DEC);
         }
         Serial.print(":");
         if (RTC.minute < 10)  {
           Serial.print("0");
           Serial.print(RTC.minute, DEC);
         } else {
           Serial.print(RTC.minute, DEC);
         }
         Serial.println();
   }

Guten Morgen,

kannst du mir bitte sagen was dein RTC ist. Ist das dein gesamter Code?
Ich habe mir gerade mal die RTC/Time Bilbiothek heruntergeladen. Ich nehme an, dass du diese benutzt.

Verstehe da leider nicht welche getTime-Methode gerufen wird. RTC diese Methode nicht sondern nur RTC.get().
Hier ist ein Beispiel von RTC mit führenden Nullern.

Vielleicht hätte ich vorher fragen sollen: was genau geht denn nicht?
Der Post nach mir erklärt es ja wunderbar wie du die Zeitformatieren kannst.

Das sieht viel zu umständlich aus:

void printTimeSerial(uint8_t hour, uint8_t min, uint8_t sec)
{
  char s[20];
  sprintf(s,"%02u:%02u:%02u",hour, min, sec); 
  Serial.println(s); 
}

printTimeSerial(11, 45, 1);

Ausgabe ist dann 11:45:01

Das lässt sich auch beliebig mit Leerzeichen und weiteren Variablen auffüllen

% ist ein Platzhalter für eine Variable die dahinter hinzugefügt wird.
%5u = unsignt int mit 5 Zeichen, sprich wenn die Zahl "234" ausgegeben werden müsste steht da " 234"
%05u = unsignt int mit 5 zeichen und vorgestellter "0". Bsp: "234" wird zu "00234"

Mehr Informationen:
http://home.fhtw-berlin.de/~junghans/cref/FUNCTIONS/format.html

Wichtig:
Mit float Zahlen klappt das in der Arduino Umgebung nicht. Diese müsste man per Hand zerlegen.

1 Like

Hallo,

float geht auch, den Tip bekam ich mal von Serenifly. :wink:

dtostrf(_Kanal_1, 5, 2, _AD_Channel_1);  // Input, Gesamtstellen inkl. Komma, Nachkommastellen, Output

_Kanal_1 ist float und _AD_Channel_1 ist ein char array

_AD_Channel_1[6]; // Buffer zum zwischen speichern der formatierten Spannung

Und wenn man zum Bsp. den Punkt durch ein Komma ersetzen möchte, ich mach das wegen Excel, dann kann man das so machen. Hatte ich mal im Netz gefunden.

Zeichen_in_charArray_ersetzen(_AD_Channel_1, '.', ',');  // ersetzt den Punkt durch ein Komma

void Zeichen_in_charArray_ersetzen (char* zeichenkette, char charSearch, char charReplace)
{
  int i = 0;
  while ( zeichenkette[i] != '\0')  {
    if ( zeichenkette[i] == charSearch )  {   // suche nach Zeichen 'charSearch' und
      zeichenkette[i] = charReplace;          // ersetze es durch 'charReplace'
    }
  i++;
  }
}

devpap7:
Guten Morgen,

kannst du mir bitte sagen was dein RTC ist. Ist das dein gesamter Code?

Ich verwende ein DS1307 Modul, aber auch DS3231 Module.
Die Lib ist die DS1307new.h https://code.google.com/p/ds1307new/.

Und, nein, das ist nicht der gesamte Code, das ist nur eine Funktion zur seriellen Ausgabe.
Warum schaust du dir nicht mal die in der Lib mitgelieferten Beispiele an?
Da ist doch auch die Formatierung mit dabei.

Alles klar. Muss aber zugeben ich habe dich mit dem Themenstarter verwechselt. Danke dennoch für den Link.