Besoin Aide Pour bouton Poussoir

Tout est ds le titre
En tant que novice de 2 semaine,
j'ai compris les base et presque réussi a finir mon premier projet
Mais je n'arrive pas à insérer le bouton poussoir pour servir de marche-arrêt
Vous remercie de toute aide

Voila le code

// Déclare les broches sur lesquelles sont câblées les LEDs
const int BROCHE_LED_1 = 13;
const int BROCHE_LED_2 = 12;
const int BROCHE_LED_3 = 11;
const int BROCHE_LED_4 = 10;
const int BROCHE_LED_5 = 9;
const int BROCHE_LED_6 = 8;
const int BROCHE_LED_7 = 7;

// Nombre de millisecondes entre deux changements d'état des LED
const unsigned long BLINK_INTERVAL_1 = 1000;
const unsigned long BLINK_INTERVAL_2 = 500;
const unsigned long BLINK_INTERVAL_3 = 2000;
const unsigned long BLINK_INTERVAL_4 = 750;
const unsigned long BLINK_INTERVAL_5 = 1250;
const unsigned long BLINK_INTERVAL_6 = 2500;
const unsigned long BLINK_INTERVAL_7 = 3000;

// Fonction setup(), appelée au démarrage de la carte Arduino
void setup() {

// Configure les broches des LEDs en sortie
pinMode(BROCHE_LED_1, OUTPUT);
pinMode(BROCHE_LED_2, OUTPUT);
pinMode(BROCHE_LED_3, OUTPUT);
pinMode(BROCHE_LED_4, OUTPUT);
pinMode(BROCHE_LED_5, OUTPUT);
pinMode(BROCHE_LED_6, OUTPUT);
pinMode(BROCHE_LED_7, OUTPUT);

// Configure l'état initial des LEDs
digitalWrite(BROCHE_LED_1, LOW);
digitalWrite(BROCHE_LED_2, LOW);
digitalWrite(BROCHE_LED_3, LOW);
digitalWrite(BROCHE_LED_4, LOW);
digitalWrite(BROCHE_LED_5, LOW);
digitalWrite(BROCHE_LED_6, LOW);
digitalWrite(BROCHE_LED_7, LOW);

}

// Fonction loop(), appelée continuellement en boucle tant que la carte Arduino est alimentée
void loop() {

// Sous traite les différentes tâches
task_led1();
task_led2();
task_led3();
task_led4();
task_led5();
task_led6();
task_led7();
}

void task_led1() {
static unsigned long previousMillisLed1 = 0;
static byte etatBrocheLed1 = LOW;

unsigned long currentMillis = millis();

// Si BLINK_INTERVAL_1 ou plus millisecondes se sont écoulés
if(currentMillis - previousMillisLed1 >= BLINK_INTERVAL_1) {

// Garde en mémoire la valeur actuelle de millis()
previousMillisLed1 = currentMillis;

// Inverse l'état de la LED 1
etatBrocheLed1 = !etatBrocheLed1;
digitalWrite(BROCHE_LED_1, etatBrocheLed1);
}
}

void task_led2() {
static unsigned long previousMillisLed2 = 0;
static byte etatBrocheLed2 = LOW;

unsigned long currentMillis = millis();

// Si BLINK_INTERVAL_2 ou plus millisecondes se sont écoulés
if(currentMillis - previousMillisLed2 >= BLINK_INTERVAL_2) {

// Garde en mémoire la valeur actuelle de millis()
previousMillisLed2 = currentMillis;

// Inverse l'état de la LED 2
etatBrocheLed2 = !etatBrocheLed2;
digitalWrite(BROCHE_LED_2, etatBrocheLed2);
}
}

void task_led3() {
static unsigned long previousMillisLed3 = 0;
static byte etatBrocheLed3 = LOW;

unsigned long currentMillis = millis();

// Si BLINK_INTERVAL_3 ou plus millisecondes se sont écoulés
if(currentMillis - previousMillisLed3 >= BLINK_INTERVAL_3) {

// Garde en mémoire la valeur actuelle de millis()
previousMillisLed3 = currentMillis;

// Inverse l'état de la LED 3
etatBrocheLed3 = !etatBrocheLed3;
digitalWrite(BROCHE_LED_3, etatBrocheLed3);
}
}

void task_led4() {
static unsigned long previousMillisLed4 = 0;
static byte etatBrocheLed4 = LOW;

unsigned long currentMillis = millis();

// Si BLINK_INTERVAL_4 ou plus millisecondes se sont écoulés
if(currentMillis - previousMillisLed4 >= BLINK_INTERVAL_4) {

// Garde en mémoire la valeur actuelle de millis()
previousMillisLed4 = currentMillis;

// Inverse l'état de la LED 4
etatBrocheLed4 = !etatBrocheLed4;
digitalWrite(BROCHE_LED_4, etatBrocheLed4);
}
}

void task_led5() {
static unsigned long previousMillisLed5 = 0;
static byte etatBrocheLed5 = LOW;

unsigned long currentMillis = millis();

// Si BLINK_INTERVAL_5 ou plus millisecondes se sont écoulés
if(currentMillis - previousMillisLed5 >= BLINK_INTERVAL_5) {

// Garde en mémoire la valeur actuelle de millis()
previousMillisLed5 = currentMillis;

// Inverse l'état de la LED 5
etatBrocheLed5 = !etatBrocheLed5;
digitalWrite(BROCHE_LED_5, etatBrocheLed5);
}
}

void task_led6() {
static unsigned long previousMillisLed6 = 0;
static byte etatBrocheLed6 = LOW;

unsigned long currentMillis = millis();

// Si BLINK_INTERVAL_6 ou plus millisecondes se sont écoulés
if(currentMillis - previousMillisLed6 >= BLINK_INTERVAL_6) {

// Garde en mémoire la valeur actuelle de millis()
previousMillisLed6 = currentMillis;

// Inverse l'état de la LED 6
etatBrocheLed6 = !etatBrocheLed6;
digitalWrite(BROCHE_LED_6, etatBrocheLed6);
}
}

void task_led7() {
static unsigned long previousMillisLed7 = 0;
static byte etatBrocheLed7 = LOW;

unsigned long currentMillis = millis();

// Si BLINK_INTERVAL_7 ou plus millisecondes se sont écoulés
if(currentMillis - previousMillisLed7 >= BLINK_INTERVAL_7) {

// Garde en mémoire la valeur actuelle de millis()
previousMillisLed7 = currentMillis;

// Inverse l'état de la LED 7
etatBrocheLed7 = !etatBrocheLed7;
digitalWrite(BROCHE_LED_7, etatBrocheLed7);
}
}

Il faudrait savoir ce que tu veux faire avec ce bouton : allumer une LED, allumer toutes les LED, un appui sur le bouton lance l'exécution de tes clignotements et un autre appui l'arrête...

De plus tel que ton code est écrit, il ne fera pas ce que tu en attends, à mon avis.

Tel qu'il est, il appelle les fonctions l'une après l'autre. Chaque fonction effectue ceci :

  • Iniitaliser l'état de la LED à "éteint"
  • Initialiser le chrono à 0
  • Si le temps donné par milli() est supérieur à 0, allumer la LED
  • Fin de la fonction

Et ces fonctions sont appelées en boucle, car lorsque ton programme arrive à la fin de a loop, il recommence. Donc il ne va pas faire clignoter la LED, il va la laisser allumée constamment. Tes sauvegardes de la valeur courante de millis et de l'état de la LED ne servent à rien puisque tu les réinitialises à chaque fois que la fonction démarre

Et ceci pour toutes les LED puisque tu appelles tes fonctions à la suite.

Pour que ça marche, il ne faut pas mettre ça dans des fonctions, ou bien jouer avec des variables globales pour éviter que tout ce que tu veux garder en mémoire disparaisse à la fin des fonctions.

Commence par faire marcher les LED, tu verras ensuite pour le bouton...

Et modifie ton post pour faire apparaître le code dans les balises CODE, STP

lesept:
Et ces fonctions sont appelées en boucle, car lorsque ton programme arrive à la fin de a loop, il recommence. Donc il ne va pas faire clignoter la LED, il va la laisser allumée constamment. Tes sauvegardes de la valeur courante de millis et de l'état de la LED ne servent à rien puisque tu les réinitialises à chaque fois que la fonction démarre

Tu as loupé le mot-clé static dans les fonctions. L'initialisation n'est faite qu'une seule fois au lancement du programme.
Le code me paraît correct.

@culbuto12
Par contre, faire 7 fonctions quasiments identiques, c'est du délire. Tu peux t'en sortir avec une seule fonction en utilisant des tableaux.

biggil:
Tu as loupé le mot-clé static dans les fonctions. L'initialisation n'est faite qu'une seule fois au lancement du programme.

C'est vrai, je ne l'ai jamais utilisé donc je l'ai loupé. Tant mieux pour culbuto si son code marche !

lesept:
C'est vrai, je ne l'ai jamais utilisé donc je l'ai loupé. Tant mieux pour culbuto si son code marche !

bonjour
merci pour vos reponses
oui le code fonctionne

pour les tableaux j'en ai pas utilisé car j'en suis pas encore là ds ma formation

j'ai réussi pour le bouton mais les led on baisser en intensité est-ce normal??

j'utilise des resistance de 220 pour les led et j'ai mi 10M pour le bouton est-ce que ca joue sur l'intensité ?

je voudrai poser ce bouton mais je sais pas comment le brancher et comment mettre la resistance ou si il y en a deja une dedans

celui ci :

Peux-tu préciser comment il est branché ? Quelle broche, où est la résistance, quelles instructions ?

lesept:
Peux-tu préciser comment il est branché ? Quelle broche, où est la résistance, quelles instructions ?

bonsoir
te remercie mais on m'a donné la reponse et c'est bon pour le montage et le programme

maintenant je dois changer de carte car la UNO est trop grande et le monter sur batterie.

Vous conseiller quoi en batterie et carte jai un emplacement de moitié par rapport a une UNO

Je n'en ai besoin que pour le jeux de led et rien d'autre et il dois tenir au moins 2H et rechargeable via l'usb de la carte