Easy Version Tracking

See the code in action on Tinkercad

/* Incorporate Versioning into code */

//Version Start
#define MAJOR_Ver "1"          //Major release version
#define MINOR_Ver "02"         //Minor release version
char *buildVer = "v" MAJOR_Ver "." MINOR_Ver;
//Version End

//BuildTime Start
/* Example of __DATE__ string: "Oct 23 2018"
 * char *dateArray = (__DATE__);
 *                              01234567890
 * This function is only used during compile time and has no effect on Arduino processing load
 * The purpose is to document when the board was programmed
 */
#define YEAR_CH0 (__DATE__[ 7])
#define YEAR_CH1 (__DATE__[ 8])
#define YEAR_CH2 (__DATE__[ 9])
#define YEAR_CH3 (__DATE__[10])

#define MONTH_IS_JAN (__DATE__[0] == 'J' && __DATE__[1] == 'a')
#define MONTH_IS_FEB (__DATE__[0] == 'F')
#define MONTH_IS_MAR (__DATE__[0] == 'M' && __DATE__[2] == 'r')
#define MONTH_IS_APR (__DATE__[1] == 'p')
#define MONTH_IS_MAY (__DATE__[2] == 'y')
#define MONTH_IS_JUN (__DATE__[1] == 'u' && __DATE__[2] == 'n')
#define MONTH_IS_JUL (__DATE__[2] == 'l')
#define MONTH_IS_AUG (__DATE__[2] == 'g')
#define MONTH_IS_SEP (__DATE__[0] == 'S')
#define MONTH_IS_OCT (__DATE__[0] == 'O')
#define MONTH_IS_NOV (__DATE__[0] == 'N')
#define MONTH_IS_DEC (__DATE__[0] == 'D')
#define MONTH_CH0 \
((MONTH_IS_OCT || MONTH_IS_NOV || MONTH_IS_DEC) ? '1' : '0')
#define MONTH_CH1 \
( \
(MONTH_IS_JAN) ? '1' : \
(MONTH_IS_FEB) ? '2' : \
(MONTH_IS_MAR) ? '3' : \
(MONTH_IS_APR) ? '4' : \
(MONTH_IS_MAY) ? '5' : \
(MONTH_IS_JUN) ? '6' : \
(MONTH_IS_JUL) ? '7' : \
(MONTH_IS_AUG) ? '8' : \
(MONTH_IS_SEP) ? '9' : \
(MONTH_IS_OCT) ? '0' : \
(MONTH_IS_NOV) ? '1' : \
(MONTH_IS_DEC) ? '2' : \
/* error default */'?' \
)

#define DAY_CH0 ((__DATE__[4] >= '0') ? (__DATE__[4]) : '0')
#define DAY_CH1 (__DATE__[5])

#define SPACE (__DATE__[3])

// Example of __TIME__ string: "21:06:19"
// Array position:              01234567

#define HOUR_CH0 (__TIME__[0])
#define HOUR_CH1 (__TIME__[1])

#define MIN_CH0 (__TIME__[3])
#define MIN_CH1 (__TIME__[4])

#define SEC_CH0 (__TIME__[6])
#define SEC_CH1 (__TIME__[7])

#define COLON (__TIME__[2])

char buildTime[] = {YEAR_CH0, YEAR_CH1, YEAR_CH2, YEAR_CH3, SPACE, MONTH_CH0, MONTH_CH1, SPACE, DAY_CH0, DAY_CH1, SPACE, HOUR_CH0, HOUR_CH1, COLON, MIN_CH0, MIN_CH1, COLON, SEC_CH0, SEC_CH1  };
//BuildTime End



// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  dispText(buildVer, strlen(buildVer));
  lcd.setCursor(0, 1);
  dispText(buildTime, sizeof(buildTime));
}

void loop() { }

void dispText(char textArray[], uint8_t n) {
  for (int i = 0; i < n; ++i) {
      lcd.print(textArray[i]);
   }
}