Bonjour tout le monde, j'ai créé une petite minuterie (pas plus de 1'40 hein^^) après avoir lu le tuto de Eskimon sur les afficheurs 7 segments. Cependant, la carte se reset systématiquement toutes les 5 à 30 secondes. Pour une minuterie, ce n'est pas génial… Savez-vous d'où cela peut-il venir? Je vous joins le programme et une photo du montage (vous ne verrez rien, c'est un gros bordel: peut-être que cela vient là?). J'utilise un câble USB tout pourri que j'ai trouvé dans une armoire, mais il semblait bien marcher jusque-là. De plus, j'ai essayé d'upload un programme qui gérait juste l'allumage d'une LED (qui s'allumait bien avec le programme de minuterie), et la LED ne s'allume même pas! De toute façon je vais défaire le montage et tester la carte sur un autre pour voir si c'est bien un défaut de la carte ou du câble.
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 | const int A = 7; const int B = 5; const int C = 1; const int D = 6; const int seg_1 = 8; const int seg_2 = 10; const int btn_1 = 2; const int btn_2 = 3; const int inhib = 11; const int led_1 = 12; const int led_2 = 9; char nombre; char dizaine; char unite; char chiffre; boolean afficheur; boolean decompte_actif; int time; int time2; int etat_1; int etat_2; void setup(){ pinMode(A, OUTPUT); pinMode(B, OUTPUT); pinMode(C, OUTPUT); pinMode(D, OUTPUT); pinMode(seg_1, OUTPUT); pinMode(seg_2, OUTPUT); pinMode(inhib, OUTPUT); pinMode(led_1, OUTPUT); pinMode(led_2, OUTPUT); digitalWrite(A, LOW); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, LOW); digitalWrite(seg_1, LOW); digitalWrite(seg_2, LOW); digitalWrite(inhib, LOW); digitalWrite(led_1, HIGH); digitalWrite(led_2, HIGH); nombre = 0; afficheur = LOW; time = millis(); } void loop(){ reglage(); decompte(); fin(); } void reglage(){ attachInterrupt(0, moins, FALLING); attachInterrupt(1, plus, FALLING); while(!decompte_actif){ if(millis() - time >= 10){ afficheur = !afficheur; afficher(nombre, afficheur); time = millis(); } etat_1 = digitalRead(btn_1); etat_2 = digitalRead(btn_2); if(!etat_1 && !etat_2){ time2 = millis(); decompte_actif = !decompte_actif; attachInterrupt(0, rien, FALLING); attachInterrupt(1, rien, FALLING); } } } void decompte(){ while(decompte_actif){ if(millis() - time >= 10){ afficheur = !afficheur; afficher(nombre, afficheur); time = millis(); } if(millis() - time2 >= 1000){ nombre--; time2 = millis(); if(nombre < 0){ decompte_actif = !decompte_actif; etat_1 = HIGH; etat_2 = HIGH; digitalWrite(inhib, HIGH); } } } } void fin(){ while(etat_1 && etat_2){ digitalWrite(led_1, LOW); delay(200); digitalWrite(led_1, HIGH); digitalWrite(led_2, LOW); delay(200); digitalWrite(led_2, HIGH); etat_1 = digitalRead(btn_1); etat_2 = digitalRead(btn_2); } digitalWrite(inhib, LOW); time = millis(); } void afficher(int nombre, boolean afficheur){ digitalWrite(A, LOW); digitalWrite(B, LOW); digitalWrite(C, LOW); digitalWrite(D, LOW); dizaine = nombre / 10; unite = nombre - (dizaine * 10); if(afficheur){ chiffre = unite; digitalWrite(seg_1, LOW); digitalWrite(seg_2, HIGH); } else{ chiffre = dizaine; digitalWrite(seg_1, HIGH); digitalWrite(seg_2, LOW); } if(chiffre >= 8){ digitalWrite(D, HIGH); chiffre -= 8; } if(chiffre >= 4){ digitalWrite(C, HIGH); chiffre -= 4; } if(chiffre >= 2){ digitalWrite(B, HIGH); chiffre -= 2; } if(chiffre >= 1){ digitalWrite(A, HIGH); } } void plus(){ nombre++; if(nombre > 99){nombre = 0;} } void moins(){ nombre--; if(nombre < 0){nombre = 99;} } void rien(){ } |