Problème d'intensité d'éclairage led avec clignotement, millis() et bouton poussoir

a marqué ce sujet comme résolu.
Auteur du sujet

Re-bonsoir,

Bon je suis presque arrivée à obtenir le résultat voulu dans le TP baignade d’Eskimon, je bloque sur la fin mais je pense que je vais laisser tomber pour le moment et me concentrer sur la compréhension des notions introduites dans la correction.

Ceci dit, j’aimerais bien avoir un éclaircissement sur un mystère. En travaillant la partie "clignotement" du TP, j’ai réussi à écrire un code qui fait clignoter une led quand on appuie sur un bouton et l’éteint quand on appuie sur l’autre. Problème : la led clignote très faiblement. En retirant sa résistance elle clignote un peu plus fort mais ce n’est pas folichon. Ce qui est étrange, c’est que je ne rencontre aucun problème avec les autres codes, notamment avec Blink, BlinkWithoutDelay ou encore le même code mais sans clignotement. Problème de résistance, problème de code ? C’est très étrange en tout cas.

Voici le code en question ci-dessous. Si nécessaire, j’enverrai demain une photo de mon montage mais en gros, la seule chose qui diffère d’avec le tuto c’est que je n’utilise pas de concdensateur sur mes boutons, n’ayant pas encore acquis ce composant… Mais je ne pense pas que le problème vienne de là.

 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
72
73
74
75
76
77
78
79
80
81
82
83
//Constantes

const int boutonSOS = 2;
const int boutonOK = 3;
const int ledRouge = 6;

//comptage
int compteur = 0;
int etatBouton;
int memSOS = HIGH;
int memOK = HIGH;

//Clignotement
long previousMillis = 0;
long interval = 1000;

//entrées/sorties
void setup()
{
  pinMode(boutonSOS, INPUT);
  pinMode(boutonOK, INPUT);
  pinMode(ledRouge, OUTPUT);
}

void loop()
{
  //Lecture bouton d'incrémentation
  etatBouton = digitalRead(boutonSOS);

  // Si le bouton a un état différent que celui enregistré ET que cet état est "appuyé"
  if((etatBouton != memSOS) && (etatBouton == LOW))
  {
       //Incrémentation
    compteur++;
  }
  //Enregistrement état bouton pour tour suivant
  memSOS = etatBouton;


  //Lecture bouton de décrémentation
  etatBouton = digitalRead(boutonOK);

   // Si le bouton a un état différent que celui enregistré ET que cet état est "appuyé"
  if((etatBouton != memOK) && (etatBouton == LOW))
  {
    //Décrémentation  
    compteur--;
  }
  //Enregistrement état bouton pour tour suivant
  memOK = etatBouton;

  //Limites à ne pas dépasser
  if(compteur < 0)
  {
    compteur = 0;
  }

  if(compteur > 1)
  {
    compteur = 1;
  }

clignotement(compteur);
}

void clignotement(int valeurRecue)
{
  //extinction de toutes les Leds
  digitalWrite(ledRouge, HIGH);

  if(valeurRecue >= 1)
  {
      unsigned long currentMillis = millis();  
      if(currentMillis - previousMillis > interval)
      {
        previousMillis = currentMillis;
         if (digitalRead(ledRouge) == HIGH)
            digitalWrite(ledRouge, LOW);
         else
            digitalWrite(ledRouge, HIGH);
      }
  }
}

D’avance merci pour vos éclaircissements !

Édité par ache

+0 -0

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

A chaque loop tu fais "extinction de toutes les Leds", et tu ne rallume la LED que au changement d’interval. En fait, tu as de la chance que l’exécution du code soit assez lente pour te laisser le temps de voir la LED allumée.

+2 -0
Auteur du sujet

Ah d’accord ! Je vais modifier pour voir le résultat. Merci !

[Edit] : C’est super, j’ai modifié mon code et ça marche ! :-) Un grand merci !

Édité par sakura

+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