/*
Si l'interrupteur est sur ON, la broche A0 reçoit +5V, la led verte s'illumine,
la génération de signaux commence
A La broche 13 on a en sortie un signal carre de 4 hertz qui est
ON pendant 3 secondes puis OFF pendant 5 secondes ceci indéfiniment
tant que la broche A0 reçoit +5V
La LED Rouge en sortie 13 sert à visualiser la séquence
Je me suis fait aider par COPILOT pour générer le squetch et le résultat
souhaité a été obtenu assez rapidement apres quelques précisions dans
ma formulation
21 Juin 2024 Freddy B.
*/
const int ledPin = 13; // La sortie du signal carré
const int switchPin = A0; // La broche de l'interrupteur
unsigned long previousMillis = 0; // Stocke la dernière fois que le signal a changé d'état
unsigned long sequenceMillis = 0; // Stocke la dernière fois que la séquence a changé
const long interval = 125; // Durée des états HIGH et LOW en millisecondes pour 4 Hz
const long onTime = 3000; // Durée de l'état ON en millisecondes (3 secondes)
const long offTime = 5000; // Durée de l'état OFF en millisecondes (5 secondes)
bool ledState = LOW; // État actuel de la sortie
bool sequenceState = false; // État actuel de la séquence, démarrage avec la séquence désactivée
void setup() {
pinMode(ledPin, OUTPUT); // Initialise la broche 13 comme une sortie
pinMode(switchPin, INPUT); // Initialise la broche A0 comme une entrée
}
void loop() {
unsigned long currentMillis = millis(); // Prend le temps actuel
int switchState = digitalRead(switchPin); // Lit l'état de l'interrupteur
// Vérifie si l'interrupteur est en position ON (5V)
if (switchState == HIGH) {
// Gère le signal carré de 4 Hz
if (sequenceState && currentMillis - previousMillis >= interval) {
ledState = !ledState; // Change l'état
previousMillis = currentMillis; // Mémorise le temps du changement d'état
digitalWrite(ledPin, ledState); // Met à jour la sortie
}
// Gère la séquence de 3 secondes ON et 5 secondes OFF
if (sequenceState && currentMillis - sequenceMillis >= onTime) {
sequenceState = false; // Désactive la séquence
sequenceMillis = currentMillis; // Mémorise le temps du changement d'état
digitalWrite(ledPin, LOW); // Éteint la LED
} else if (!sequenceState && currentMillis - sequenceMillis >= offTime) {
sequenceState = true; // Active la séquence
sequenceMillis = currentMillis; // Mémorise le temps du changement d'état
}
} else {
digitalWrite(ledPin, LOW); // Assurez-vous que la LED est éteinte lorsque l'interrupteur est OFF
sequenceState = false; // Réinitialise l'état de la séquence
}
}