Problème avec le Barregraphe

L'auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

Je suis ce tutoriel: https://zestedesavoir.com/tutoriels/686/arduino-premiers-pas-en-informatique-embarquee/743_gestion-des-entrees-sorties/3423_un-simple-bouton/

J'essaie de faire le barregraphe mais mon circuit ne se comporte pas comme je le voudrais.

Voici une vidéo de mon circuit ainsi que son comportement: https://youtu.be/X7JxwN02-jY

Voici mon programme:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
const int led_1 = 8;
const int led_2 = 11;
const int led_3 = 12;
const int led_4 = 13;
const int bouton_1 = 6;
const int bouton_2 = 3;
int num_led_high = 0;

void setup(){
  pinMode(led_1, OUTPUT);
  pinMode(led_2, OUTPUT);
  pinMode(led_3, OUTPUT);
  pinMode(led_4, OUTPUT);
  pinMode(bouton_1, INPUT_PULLUP);
  pinMode(bouton_2, INPUT_PULLUP);
}

void loop(){
  if(digitalRead(bouton_1)==LOW){ 
    num_led_high++;

    if(num_led_high > 4){
      num_led_high = 4;
    }

    if(num_led_high == 1){
      digitalWrite(led_1,HIGH);
    }
    else if(num_led_high == 2){
      digitalWrite(led_2,HIGH);
    }
    else if(num_led_high == 3){
      digitalWrite(led_3,HIGH);
    }
    else if(num_led_high == 4){
      digitalWrite(led_4,HIGH);
    }
  }
  else{
    digitalWrite(led_1,LOW);
  }

  if(digitalRead(bouton_2) == LOW){  
    num_led_high--;

    if(num_led_high < 0){
      num_led_high = 0;
    }

    if(num_led_high == 0){
      digitalWrite(led_1,LOW);
    }
    else if(num_led_high == 1){
      digitalWrite(led_2,LOW);
    }
    else if(num_led_high == 2){
      digitalWrite(led_3,LOW);
    }
    else if(num_led_high == 4){
      digitalWrite(led_4,LOW);
    }
  }
}

En espérant que vous puissiez m'aider,

Cordialement,

sushi

Édité par sushi

+0 -0

Cette réponse a aidé l'auteur du sujet

Salut,

J'ai l'impression que ton problème ne vient pas (directement) de ton code : il me semble que ta carte redémarre à chaque appui sur un bouton (la led ON s'éteint puis se rallume). Du coup, si c'est bien ça, la led en pin 13 clignote un peu le temps que la carte relance ton programme (la broche 13 est celle reliée à la led incorporée sur la carte, donc c'est normal que son état puisse varier au démarrage). Ensuite, lorsque ton programme se lance, toutes les sorties sont à 0 donc les 4 leds s'allument ! ;)

Vérifie tes branchements, c'est peut-être un court-circuit car tu n'as pas mis la résistance de 10k pour les boutons j'ai rien dit, tu as mis les pull-ups internes.

EDIT : et ligne 59 je pense que c'est un 3 à la place du 4

Édité par PG06

“I don't love studying. I hate studying. I like learning. Learning is beautiful.” – Natalie Portman

+0 -0

Cette réponse a aidé l'auteur du sujet

Je n'ai pas regardé la vidéo donc je prend le risque de répondre sans tout les éléments

Tu changes tes compteurs sur un état plutôt que sur un changement d'état. Si bien que même si tu penses appuyer vite sur ton bouton tu vas passer plusieurs fois dans chaque conditions le temps de l'appui, donc ton compteur va s'incrémenter super vite et tes leds ne vont pas afficher ce que tu penses être juste.

Tu as bien travaillé cependant. Si tu ne vois pas ce que je veux dire essaie d'aller voir la correction du TP :)

ZdS, le best du Zeste ! Tuto Arduino, blog, etc

+0 -0
Auteur du sujet

J'ai regardé la correction et j'ai fini par comprendre le problème.

Voici mon programme modifié:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
const int led_1 = 8;
const int led_2 = 11;
const int led_3 = 12;
const int led_4 = 9;
const int bouton_1 = 6;
const int bouton_2 = 3;
int num_led_high = 0;
//NB: Ne pas oublier que le temps d'appuyer sur un bouton
//    Le programme peut boucler plusieurs fois
//    D'où la nécessité de sauvegarder l'état du bouton pour la prochaine boucle
int save_etat_bouton_1 = HIGH;
int save_etat_bouton_2 = HIGH;

void setup(){
  pinMode(led_1, OUTPUT);
  pinMode(led_2, OUTPUT);
  pinMode(led_3, OUTPUT);
  pinMode(led_4, OUTPUT);
  pinMode(bouton_1, INPUT_PULLUP);
  pinMode(bouton_2, INPUT_PULLUP);
}

void loop(){
  int etat_bouton_1 = digitalRead(bouton_1);
  int etat_bouton_2 = digitalRead(bouton_2);

  if((etat_bouton_1 == LOW) && (etat_bouton_1 != save_etat_bouton_1)){ 
    num_led_high++;

    if(num_led_high > 4){
      num_led_high = 4;
    }

    if(num_led_high == 1){
      digitalWrite(led_1,HIGH);
    }
    else if(num_led_high == 2){
      digitalWrite(led_2,HIGH);
    }
    else if(num_led_high == 3){
      digitalWrite(led_3,HIGH);
    }
    else if(num_led_high == 4){
      digitalWrite(led_4,HIGH);
    }
  }

  if((etat_bouton_2 == LOW) && (etat_bouton_2 != save_etat_bouton_2)){
    num_led_high--;

    if(num_led_high < 0){
      num_led_high = 0;
    }

    if(num_led_high == 0){
      digitalWrite(led_1,LOW);
    }
    else if(num_led_high == 1){
      digitalWrite(led_2,LOW);
    }
    else if(num_led_high == 2){
      digitalWrite(led_3,LOW);
    }
    else if(num_led_high == 3){
      digitalWrite(led_4,LOW);
    }
  }

  save_etat_bouton_1 = etat_bouton_1;
  save_etat_bouton_2 = etat_bouton_2;
}

J'ai aussi changé le port 13 et je n'ai plus ce problème de LED verte qui s'allume toute seule (merci PG06).

Mais mon circuit se comporte toujours de la même manière, comme l'a remarqué PG06, dès que j'appuie sur l'un des boutons, les LEDs de la carte arduino s'éteignent, ça doit faire court-circuit, mais je ne sais pas où!

Merci pour votre aide!

+0 -0

Essaye de mettre juste un bouton et une led, ou même simplement juste un bouton. Est-ce que ça redémarre toujours ? (parce que visiblement le problème apparait au moment de l'appui…)

EDIT : tu peux aussi essayer de mettre des résistances de pull-up en plus de celles internes pour tester.

Édité par PG06

“I don't love studying. I hate studying. I like learning. Learning is beautiful.” – Natalie Portman

+0 -0
Auteur du sujet

C'est bon mon programme marche.

En fait, les boutons n'ont pas besoin d'être alimentés. Quand j'appuie sur le bouton, le circuit se ferme et forcément le 5V est relié à la masse et donc il a court-circuit.

De plus, comme le circuit est simple, je n'ai pas besoin de mettre les filtres.

Voilà la photo de mon circuit qui marche:

barregraphe

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte