Eteindre une led malgré l'appui d'un bouton

Bonjour à tous,
je me mets progressivement à arduino mais malheureusement j'ai quelques laucunes ... :frowning:
Je souhaite que lorsqu'on maintient un bouton poussoir appuyé, une led, contrôlée via un relais, s'allume et s'éteigne automatiquement après 5 secondes.
Lors du relachement du bouton, la led s'allume 1 seconde puis s'eteind.

Le montage est fait mais je patauge entre millis, delay, etc...
Merci par avance.

Bonjour et bienvenue,

Merci de prendre quelques minutes pour lire "Les bonnes pratiques du forum francophone" et les appliquer.

SI tu as déjà un code copie le dans ton message, en respectant les consignes données dans le lien ci-dessus.

1 Like

comme l'a indiqué @fdufnews, le mieux est que tu donne le code que tu as fait, pour que l'on puisse comment le changer.

Sinon normalement on ne mélange pas "millis" et "delay", bien qu'il est des fonction initialement différentes.
la fonction millis, renvoi le temps qui s'est écoulé depuis la mise sous tension du microcontrôleur.
la fonction delay, arrête l'exécution du microcontroleur pendant un temps donnée.

Il est possible d'utiliser millis, pour effectuer le même genre de temporisation que delay, mais sans arrêter le microcontrôleur et continuer à exécuter d'autre choses pendant ce temps.

Pour ton cas et commencer dans l'Arduino, il est plus simple d'utiliser delay.
Bien que le soucis avec delay, c'est qu'il est fort probable que si tu veux faire évoluer ton code, il faudra surement t'en passer.

Bonjour, j'uilise wokwi qui fonctionne pas trop mal meme si de temps en temps l'appui à l'air un peu perdu... : Simulation d'un appui long avec relais Copy 2 - Wokwi ESP32, STM32, Arduino Simulator
mais en reel cela ne marche pas ... ma led clignotte toutes les secondes...

Essaie ça.

Bonjour fishbrainz

Simplifies toi la vie, utilises la bibliothèque Button.h, autant prendre les bonnes habitudes tout de suite :wink:
Et ça donne ceci:

#include <Button.h>     // https://www.arduino.cc/reference/en/libraries/button/
const int buttonPin = 2; // Le pin où le bouton est connecté
const int relayPin = 12; // Le pin où le relais est connecté

Button bouton(buttonPin); // Connect your button between pin buttonPin and GND

unsigned long relaisTempo = 0;     // Temporisation du relais
unsigned long relaisMills = 0;     // Temporisation du relais, chrono

void setup()
{
	Serial.begin(115200);
	bouton.begin();
	pinMode(relayPin, OUTPUT); // Initialise le pin du relais comme sortie
	digitalWrite(relayPin, LOW); // Assurez-vous que la LED est éteinte au démarrage
}

void loop()
{

	if (bouton.pressed())
	{
		relaisTempo = 5000;
		relaisMills = millis();     // Démarrage du chrono
		digitalWrite(relayPin, HIGH); // Le relais tire
	}
	
	if (bouton.released())
	{
		relaisTempo = 1000;
		relaisMills = millis();     // Démarrage du chrono
		digitalWrite(relayPin, HIGH); // Le relais tire
	}

	//--------------------------------- Temporisation
	if (relaisTempo != 0)     // Si temporisation en cours
	{
		if (millis() - relaisMills >= relaisTempo)
		{
			digitalWrite(relayPin, LOW); // Le relais tombe
			relaisTempo = 0;     // Temporisation terminée
		}
	}
}

A+
Cordialement
jpbbricole

Un grand merci !!!! Ca marche !!!! :star_struck:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.