I'm having trouble understanding the code from the debounce tutorial, specifically the void loop().
Below is code from the tutorial with my interpretation of what its doing in plain english. I'm really lost on the millis() part. Would be awesome sauce if someone could translate to noobanese for me.
const int buttonPin = 2;
const int ledPin = 4;
int buttonState;
int lastButtonState = LOW;
int ledState = HIGH;
long lastDebounceTime = 0;
long debounceDelay = 50;
void setup() {
 Serial.begin(9600);
 pinMode(buttonPin, INPUT);
 pinMode(ledPin, OUTPUT);
 digitalWrite(ledPin, ledState);
}
void loop() {
 int reading = digitalRead(buttonPin); // read the button
 if (reading != lastButtonState) {   // check if the button has been pressed, if true then...
  lastDebounceTime = millis();    // change the lastDebounceTime equal to amount of time passed since loop started
 }
 if ((millis() - lastDebounceTime) > debounceDelay) { // check if ...confused... is greater than 50ms, if true then...
  if (reading != buttonState) {   // check if the reading we took earlier is not the buttonState, if true then...
   buttonState = reading;      // change the buttonState to match the reading
   if (buttonState == HIGH) {    // check if the new buttonState is HIGH, if true then...
    ledState = !ledState;     // invert the ledState
   }
  }
 }
 digitalWrite(ledPin, ledState);   // turn on or off the LED
 lastButtonState = reading;      // change lastButtonState to current reading in prep for next loop
}