Led avec bouton et minuterie

Bonjour marts84 et à ton fils :wink:

Je te donne un exemple ou les fonctions LED et bouton sont ensemble.
Première chose dans ton programme, comme indiqué par @anon35827816 les temporisations avec delay() sont dites bloquantes, c'est à dire que ton Arduino ne peut plus rien faire pendant cette durée, même pas lire le bouton pour un éventuel arrêt de la séquence. Ceci se règle avec l'emploi des millis().
Dans les exemples de l'IDE Arduino il y a dans 01.Basics le sketch Blink (avec delay()), compares le avec le 02.Digital BlinkWithoutDelay.
Dans le câblage de ton bouton, tu le testes avec un if (digitalRead(buttonPin)==HIGH), ce qui suppose que tu as mis une résistance de PULL_DOWN sur la pin 2.
Il est préférable de faire l'inverse, initialiser l'entrée par un pinMode(boutonPin, INPUT_PULLUP); et bénéficier de la PULL_UP interne de l'Arduino. Il faut, par contre, câbler ton bouton, d'un côté sur GND et de l'autre sur la pin 2. Tu économises une résistance.
Si tu veux conserver ton câblage, dans mon programme, changes les digitalRead(boutonPin) == LOW en digitalRead(boutonPin) == HIGH et initialises l'entrée par un pinMode(boutonPin, INPUT);

Le programme:

/*
    Name:       ARDFR_marts84_BoutonLed.ino
    Created:	27.09.2021
    Author:     jpbbricole
*/

const int ledPin = 3;     // Pin de la LED
const int buttonPin = 2;     // Pin de la LED

const int allumageTemps = 30000;     // Temps d'allumage en millisecondes
unsigned long allumageTimer = 0;     // Chrono d'allumage

void setup()
{
	pinMode(ledPin, OUTPUT);     // Port de la LED en sortie
	digitalWrite(ledPin, LOW);     // Eteindre la LED
	pinMode(buttonPin, INPUT_PULLUP);     //Entrée du bouton, avec un LOW quand pressé.
}

void loop()
{
	// Si le bouton est pressé et l'allumage n'est pas en fonction
	if (digitalRead(buttonPin) == LOW && allumageTimer == 0)
	{
		delay(250);     // "anti-rebonds" du bouton
		digitalWrite(ledPin, HIGH);     // Allumer la LED
		allumageTimer = millis();     // Démarrage du chrono
	} 

	// Si allumage en fonction et allumageTemps échu
	if (allumageTimer != 0 && (millis()-allumageTimer >= allumageTemps))
	{
		digitalWrite(ledPin, LOW);     // Eteindre la LED
		allumageTimer = 0;     // Arrêt du chrono
	}
			
	// Si le bouton est pressé et l'allumage est en fonction
	if (digitalRead(buttonPin) == LOW && allumageTimer != 0)
	{
		delay(250);     // "anti-rebonds" du bouton
		digitalWrite(ledPin, LOW);     // Eteindre la LED
		allumageTimer = 0;     // Arrêt du chrono
	}
}

Cordialement
jpbbricole