   if (reading != lastButtonState) lastDebounceTime = millis();
   lastButtonState = reading;
   digitalWrite(LED_PIN, !reading);
-  
+
   if ((reading != buttonState) && ((millis() - lastDebounceTime) > DEBOUNCE_DELAY))
   {
     buttonState = reading;

  // Shift our readval by the voltageEpsilon, constrain to fit within a byte, then save to the array
  readval_shifted = (byte)constrain((readval - voltageEpsilon), 0, 255);
  voltageBins[currentVoltageBin] = readval_shifted;
  
  // Nudge voltageEpsilon as required to avoid overflow the next time around
  if (readval_shifted > 200)
  {

      timediff /= 60;
      timespec = 'h';
    }

    if (timediff > 23)
    {
      timediff /= 24;
      timespec = 'd';
    }

    lcd.setCursor(0, 1);
    snprintf(outstr, 17, "L%3d.%1d @%3d%c %3c", (int)low_temp.temperature, (int)(low_temp.temperature * 10) % 10, timediff, timespec, 'C');
    lcd.print(outstr);

  } else {

    // Startup message and color test
    lcd.setCursor(0, 0);
    lcd.print(STARTUP_MESSAGE_0);
    lcd.setCursor(0, 1);
    lcd.print(STARTUP_MESSAGE_1);

    // read, but ignore, button presses
    processButton();
    buttonIsPressed = FALSE;

    next_color = VIOLET_COLOR;

  }

  // Manage colors
  getColorByName(&new_color, next_color);
  fadeTowardsColor(&current_color, &new_color);
  setColor(&current_color);

  // Sleep for a bit
  delay(SLEEP_TIME);
}
