     
   }
   
-  
+  // Read the battery level
+  if (now - vcc_last > 1000) {
+    vcc = batteryVcc(); 
+  }
+  
+  // Change the display if there is no serial data from the transmitter
   if (now - comms_last > 250) {
     memset(&monitor, 0, sizeof(monitor_t));
   }

      switch (ack_payload.key) {
        case 255:
          monitor.pps = ack_payload.val;
          break;
        case 253:
          monitor.vcc_tx = ack_payload.val;
          break;
          
        case 0:
          monitor.vcc_rx = ack_payload.val;
          break;


unsigned long comms_last = 0;
unsigned long display_last = 0;
unsigned long vcc_last = 0;
int vcc = 0;

void batterySetup()
{
  // Read 1.1V reference against AVcc
  // set the reference to Vcc and the measurement to the internal 1.1V reference
  #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
    ADMUX = _BV(MUX5) | _BV(MUX0);
  #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
    ADMUX = _BV(MUX3) | _BV(MUX2);
  #else
    ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #endif  
}

long batteryVcc() {

  ADCSRA |= _BV(ADSC); // Start conversion
  while (bit_is_set(ADCSRA,ADSC)); // measuring
 
  uint8_t low  = ADCL; // must read ADCL first - it then locks ADCH  
  uint8_t high = ADCH; // unlocks both
 
  long result = (high<<8) | low;
 
  result = 1125300L / result; // Calculate Vcc (in mV); 1125300 = 1.1*1023*1000
  return result; // Vcc in millivolts
}


void setup()
{
  batterySetup();
  Serial.begin(115200);
  u8g.setRot180();
  memset(&monitor, 0, sizeof(monitor_t));
