Bonjour à tous,
je me mets progressivement à arduino mais malheureusement j'ai quelques laucunes ...
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.
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.
Simplifies toi la vie, utilises la bibliothèque Button.h, autant prendre les bonnes habitudes tout de suite
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
}
}
}