Chavear a saída On/Off ao pressionar um botão e ao soltar o mesmo.

Boa noite a todos, gostaria de ajuda para resolver o seguinte problema. Gostaria que ao pressionar um botão e mantê-lo pressionado a saída chaveasse On/Off e que ao soltar o botão novamente a saída chaveasse novamente. Estudei algumas soluções como a postada abaixo, mas não consegui uma solução para o meu problema.

/* switch

Each time the input pin goes from LOW to HIGH (e.g. because of a push-button
press), the output pin is toggled from LOW to HIGH or HIGH to LOW. There's
a minimum delay between toggles to debounce the circuit (i.e. to ignore
noise).

David A. Mellis
21 November 2006
*/

int inPin = 8; // the number of the input pin
int outPin = 13; // the number of the output pin

int state = HIGH; // the current state of the output pin
int reading; // the current reading from the input pin
int previous = LOW; // the previous reading from the input pin

// the follow variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
unsigned long time = 0; // the last time the output pin was toggled
unsigned long debounce = 200UL; // the debounce time, increase if the output flickers

void setup()
{
pinMode(inPin, INPUT);
pinMode(outPin, OUTPUT);
}

void loop()
{
reading = digitalRead(inPin);

// if the input just went from LOW and HIGH and we've waited long enough
// to ignore any noise on the circuit, toggle the output pin and remember
// the time
if (reading == HIGH && previous == LOW && millis() - time > debounce)
{
if (state == HIGH)
state = LOW;
else
state = HIGH;

time = millis();
}

digitalWrite(outPin, state);

previous = reading;
}

Precisas de ver a função millis().