 
 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));

  if (now - display_last > 50) {
    displayUpdate();
  }
  
}

void displayUpdate()

    
  }
  
  // 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));
  }
