Uhrzeit durch RTC immer Zweisstellig

Hallo
Ich habe ein Problem welches sich mit der Uhrzeit durch eine RTC befasst, an sich klappt alles mir wird Uhrzeit, Datum aber auch Luftfeuchte und Temperatur durch einen Dht22 angezeigt.
Wenn jedoch bei MInute Sekunde oder Stunde die Zahl unter 10 st werden mir keine NUllstellen davor angezeigt, welche ich haben will. z.b 12:9:2 soll eigentlich sein 12:09:02
Ich würde mich sehr über Hilfe freuen... hier noch mein Sketch :slight_smile:

#include <RTClib.h>
#include <DHT.h> // Bibliothek
#include <Wire.h>
//#include <Wire.h>  
//#include <LiquidCrystal_I2C.h> // Using version 1.2.1
//#define FLOATTOSTR(s,f,d) sprintf((s),"%0d,%d",(int)(f),abs((int)(((f)-(int)(f))*pow(10,(d)))))

// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
//LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  
#define DHTPIN 9 // Pin 9 als Datenpin 
#define DHTTYPE DHT22 //Sensor Typ wird festgelegt
DHT dht(DHTPIN, DHTTYPE);
RTC_DS1307 RTC;
void setup() 
{
Serial.begin(9600); 
Serial.println("DHT22 - Test!");
//lcd.begin(16,2); // sixteen characters across - 2 lines
// lcd.backlight();
dht.begin();
Wire.begin();
   RTC.begin();
    RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));
   if (! RTC.isrunning()) 
 {
   Serial.println("RTC is NOT running!");
   //sets the RTC to the date & time this sketch was compiled
   RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
void loop() 
{

float h = dht.readHumidity(); //Luftfeuchte auslesen | FLOAT sehr genauer Datentyp (7 Nachkommastellen)
float t = dht.readTemperature(); //Temperatur auslesen
/* float zahl = h;
float zahl1 = t;
char str[20];
char str1[21];
FLOATTOSTR(str1, zahl1, 2);
FLOATTOSTR(str, zahl, 2); */
delay(1000);


// Prüfen ob eine gültige Zahl zurückgegeben wird. Wenn NaN (not a number) zurückgegeben wird, dann Fehler ausgeben.
if (isnan(t) || isnan(h)) 
{
Serial.println("DHT22 konnte nicht ausgelesen werden");
} 
else
{
  Serial.print("Luftfeuchtigkeit: "); //Im seriellen Monitor den Text und 
 Serial.print(h); //die Dazugehörigen Werte anzeigen
 Serial.println(" %");
 Serial.print("Temperatur: ");
 Serial.print(t);
 Serial.println(" °C");
DateTime now = RTC.now();  
   Serial.print(now.year(), DEC);
   Serial.print('/');
   Serial.print(now.month(), DEC);
   Serial.print('/');
   Serial.print(now.day(), DEC);
   Serial.print(' ');
   Serial.print(now.hour(), DEC);
   Serial.print(':');
   Serial.print(now.minute(), DEC);
   Serial.print(':');
   Serial.print(now.second(), DEC);
   Serial.println();
 /*// lcd.setCursor(0,0);
//lcd.print("Luftf.:"); 
 //lcd.print(str);
// lcd.print(h);
lcd.print("%");
lcd.setCursor(0,1);
lcd.print("Temp.:"); 
lcd.print(str1);
//lcd.print(t);
lcd.write("\337");
lcd.print("C"); */

}
}

Versuche mal sowas:

if(now.second() < 10) Serial.print(' ');
Serial.print(now.second(), DEC);

anstatt z.B.

 Serial.print(' ');
 Serial.print(now.hour(), DEC);
 Serial.print(':');

probier mal:

  Serial.print(' '); 
  Serial.print(now.hour() / 10 , DEC);
  Serial.print(now.hour() % 10 , DEC);
  Serial.print(':');

Oder erst mal mit sprintf in einem Puffer aufarbeiten

char buffer[50]; /* nur mal so geschätzt */

.....

sprintf("Datum : %02d.%02d.%04d Zeit: %02d:%02d:%02d",now.day(),now.month(),now.year(),now.hour(),now.minute(),now.second());
Serial.print(buffer);

agmue's Vorschlag schreibt die Zahlen immerhin rechtsbündig,
aber genaugenommen meint er natürlich

  if(now.second() < 10) Serial.write('0');
  Serial.print(now.second(), DEC);

Hi,

hätte hier noch eine Lösung um das Ergebniss auch in einem String abzulegen. Hab das irgendwo so ähnlich gefunden.

aber sprintf macht das ja eigendlich auch.

Kann es sein das in dem angegeben Beispiel in der Zeile sprintf der buffer fehlt ?

sprintf(buffer,"Datum.......

Heinz

//------------------- aktuelle DatumZeit in String ----------------
String DatumZeit() {
  String dz = "";

  dz += year();
  dz += "-";
  dz += chk_digit( month());
  dz += "-";
  dz += chk_digit(day());
  dz += " ";

  dz += chk_digit(hour()) + ":";
  dz += chk_digit(minute()) + ":";
  dz += chk_digit(second());

  return dz;
}
// -----------Digit auffüllen je zwei Stellen----------------
String chk_digit(int digit) {
  String a = "";
  if (digit < 10) {
    a = "0"; a += + digit;
  }
  else {
    a = digit;
  }
  return a;
}

Doppelpost

@Mod
Die Antwort vom anderen Thread bitte hier hin kopieren.

(dann kann Dieser, mein Post, auch mit weg)

MfG

PS: @Mod
Besten Dank für die schnelle Moderation

postmaster-ino:
Doppelpost
@Mod
Die Antwort vom anderen Thread bitte hier hin kopieren.
(dann kann Dieser, mein Post, auch mit weg)
MfG

Kann bleiben, so versteht man es.
Hab die beiden Topics zusammengefaßt.
Grüße Uwe

Danke habe die Lösung durch eure Hilfe gefunden