use a push button as a toggle switch

Hello everyone!
I am trying to use a push button as a toggle switch: i want that when I push only one time (avoiding to continue to take your finger on the button) the led continue to stay on and, only when repush the button it goes off.

int led=5;
int button=7;
int val=0;
int old_val=0;
int state=0;

void setup ()
{
pinMode(led,OUTPUT);
pinMode(button,INPUT);

}

void loop()
{ val=digitalRead(button);
if( (val==HIGH) && (old_val==LOW)) {
state=1-state;}
old_val=val;
if (state==1) { digitalWrite(led, HIGH);}
else {digitalWrite (led,LOW);}

}

this is one of the codes I've tried.
Hoping someone can help me! Thank you all for the attention

See:
https://www.arduino.cc/en/tutorial/switch

/* 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;
}
2 Likes

Thanks a lot !!