0

My program is a bit large and I'm worried about stability.

I need to print data to both a file and to my LCD. It's like this:

if (hour<10) {
    dataFile.print("0");
}
dataFile.print(hour, DEC);
dataFile.print(":");
if (minute<10) {
    dataFile.print("0");
}
dataFile.print(minute, DEC);
dataFile.print(":");
if (second<10) {
    dataFile.print("0");
}

Then

if (hour<10) {
    lcd.print("0");
}
lcd.print(hour, DEC);
lcd.print(":");
if (minute<10) {
    lcd.print("0");
}
lcd.print(minute, DEC);
lcd.print(":");
if (second<10) {
    lcd.print("0");
}

What is a smart way to make this shorter? Should I write a function to add the leading zero then another that does something like:

void printboth (thing) {
    dataFile.print(thing);
    lcd.print(thing);
}

good idea?

1

You could format the data with snprintf:

char timestamp[9];
snprintf(timestamp, 9, "%02d:%02d:%02d", hour, minute, second);
dataFile.print(timestamp);
lcd.print(timestamp);

%02d in the snprintf format means "print at least 2 digits of this value and pad with leading zeros".

  • 1
    While true, note that *printf() will increase code size a lot. – Ignacio Vazquez-Abrams Aug 1 '15 at 21:47
  • Define "a lot". I make it an increase of 1046 bytes and the program is far more readable. – Majenko Aug 1 '15 at 21:53
  • I'm making changes with the main goal of making the sketch smaller – futurebird Aug 2 '15 at 1:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.