 static unsigned char _isRecent = BYTE1_RECENT_BOOT;
 static unsigned char _isBattLow;
 static unsigned char _hygroVal;
+static volatile unsigned char _adcBusy;
 
 // The WDT is used solely to wake us from sleep
 ISR(WDT_vect) { wdt_disable(); }
-
-static void sleep(uint8_t wdt_period, boolean include_adc) {
+ISR(ADC_vect) { _adcBusy = 0; }
+
+static unsigned int analogReadSleep(unsigned char pin)
+{
+  _adcBusy = 1;
+  ADMUX = (DEFAULT << 6) | pin;
+  bitSet(ADCSRA, ADIE);
+  set_sleep_mode(SLEEPMODE_ADC);
+  while (_adcBusy)
+    sleep_mode();
+  return ADC;
+}
+
+static void sleep(uint8_t wdt_period, boolean include_adc)
+{
   set_sleep_mode(SLEEP_MODE_PWR_DOWN);
 
   // Disable ADC

    // If using digital lines you will supply your own resistor for the fixed half.
    digitalWrite(_pinProbeSupplyBase + pin, HIGH);
  }
  // takes about 15uS to stabilize and the enabling process takes 6us per pin at 16MHz
  delayMicroseconds(10);
}

static void checkTemps(void)


#ifdef LMREMOTE_SERIAL
  #define SLEEPMODE_TX    1
  #define SLEEPMODE_ADC   SLEEP_MODE_IDLE
#else
  #define SLEEPMODE_TX    2
  #define SLEEPMODE_ADC   SLEEP_MODE_ADC
#endif

static unsigned int _previousReads[RF_PINS_PER_SOURCE];
