Hello tout le monde !
Je suis nouveau ici parce que je souhaite me tourner vers vos connaissances. Je débute en Arduino et je bute sur un programme que j'ai modifié/développé.
Il s'agit d'un afficheur 4 digits / 7 segments sur lequel j'incrémente des chiffres de 10 en 10 ou de 100 en 100 grâce à deux boutons. Tout fonctionne jusqu'à ce que j'ajoute un autre afficheur 4 digits / 7 segments pour grossir mon chiffre (passer des milliers au dizaine de milliers).
Sauf que quand j'arrive à 1000, mon 5ème digit affiche le même chiffre que le 4ème au lieu de rester à zéro et passer à 1 quand je passe les 9900 ! En gros, je passe directement des centaines au dizaine de milliers.
Que dois-je modifier dans mon programme ? En sachant que mon câblage est juste. C'est vraiment sur la programmation que je bute.
Merci d'avance !!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179 int bp2 = 11; //Bouton 2 pour incrémenter de 10 int bp3 = 12; //Bouton 3 pour incrémenter de 100 int var1 = 0; int var2 = 0; int var3 = 0; int var4 = 0; int var5 = 0; boolean etat_bouton; int memoire_plus2 = LOW; int bouton_changeP2 = false; int memoire_plus3 = LOW; int bouton_changeP3 = false; int dataPin = 8; int latchPin = 9; int clockPin = 10; const byte table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c ,0x39,0x5e,0x79,0x71,0x00}; int dig1 = 7; int dig2 = 6; int dig3 = 5; int dig4 = 4; int dig5 = 3; void setup() { Serial.begin(9600); pinMode(bp2, INPUT); pinMode(bp3, INPUT); pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(dig1, OUTPUT); pinMode(dig2, OUTPUT); pinMode(dig3, OUTPUT); pinMode(dig4, OUTPUT); pinMode(dig5, OUTPUT); } void loop(){ /* Incrémentation de 100 */ etat_bouton = digitalRead(bp2); if((etat_bouton != memoire_plus2) && (etat_bouton == HIGH)) { //on incrémente la variable qui indique quelle partie du programme devra être exécutée (affiche le résultat sur les afficheurs) if (var2 != 10){ var2++; } if (var2 == 10){ var3 += 1; var2 = 0; var1 = 0; } if(var3 == 9 && var2 != 0 || var3 == 9 && var1 != 0) { var5 = 0; var4 += 1; var3 = 0; var2 = 0; var1 = 0; } bouton_changeP2=true; } else bouton_changeP2=false; memoire_plus2 = etat_bouton; //on enregistre l'état du bouton pour le tour suivant /* Incrémentation de 10 */ etat_bouton = digitalRead(bp3); if((etat_bouton != memoire_plus3) && (etat_bouton == HIGH)) { //on incrémente la variable qui indique quelle partie du programme devra être exécutée (affiche le résultat sur les afficheurs). if (var3 != 10){ var3++; } if(var3 == 10){ var1 = 0; var2++; } if (var3 == 10){ var5 = 0; var4 += 1; var3 = 0; var2 = 0; var1 = 0; } bouton_changeP3=true; } else bouton_changeP3=false; memoire_plus3 = etat_bouton; //on enregistre l'état du bouton pour le tour suivant //Unité (Digits le plus à droite correspondant au "Digit4") digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, table[var1]); digitalWrite(latchPin, HIGH); //On lui dit sur quelle afficheur il doit afficher notre valeur //L'état fonctionne comme une fonction NO, si la value est à 1, le Digit est éteint et inverssement digitalWrite(dig5, 1); digitalWrite(dig1, 1); digitalWrite(dig2, 1); digitalWrite(dig3, 1); digitalWrite(dig4, 0); //Et on laisse un petit delay avant de passer au suivant (pas trop grand afin de permettre un multiplexage "fluide") delay(5); //Dizaine digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, table[var2]); digitalWrite(latchPin, HIGH); digitalWrite(dig5, 1); digitalWrite(dig1, 1); digitalWrite(dig2, 1); digitalWrite(dig3, 0); digitalWrite(dig4, 1); delay(5); //Centaine digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, table[var3]); digitalWrite(latchPin, HIGH); digitalWrite(dig5, 1); digitalWrite(dig1, 1); digitalWrite(dig2, 0); digitalWrite(dig3, 1); digitalWrite(dig4, 1); delay(5); //Millier digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, table[var4]); digitalWrite(latchPin, HIGH); digitalWrite(dig5, 1); digitalWrite(dig1, 0); digitalWrite(dig2, 1); digitalWrite(dig3, 1); digitalWrite(dig4, 1); delay(5); //Dizaine de milliers digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, table[var5]); digitalWrite(latchPin, HIGH); digitalWrite(dig5, 0); digitalWrite(dig1, 1); digitalWrite(dig2, 1); digitalWrite(dig3, 1); digitalWrite(dig4, 1); delay(5); }
Partager