Bonjour, j’ai réalisé un compte à rebours Arduino avec l’aide d’une personne, car j’en avais besoin rapidement.
Malheureusement, je ne comprends pas tout ce code et la personne ne peut plus m’aider.
Je ne comprends pas la fonction de Halfsecond, cette variable sert à quoi puisque c’est en seconde et minute ? Pouvez vous m’expliquer comment fonction le void TimingISR() ? J’y comprends vraiment rien, alors que tout le décompte se fait là Et juste après il y a encore le halfsecond, mais là je suis vraiment perdu si l’intérêt de ce calcul.
Merci beaucoup
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 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | //******************************************************** // Afficheur 4 chiffres 7 segments // avec Driver TM1637 et Arduino // demo_7segment_i2c_clock // // Affiche une horloge 12:00 sous format hh:mm ou mm:ss // //******************************************************** #include <TimerOne.h> #include "TM1637.h" //librairie du driver du 7 segments #define ON 1 #define OFF 0 #define hhmm 1 //0 pour afficher HH:MM et 1 pour MM:SS int8_t TimeDisp[] = {0x00,0x00,0x00,0x00}; //Tableau des 4 chiffres unsigned char ClockPoint = 1; unsigned char Update; unsigned char halfsecond = 2; unsigned char second = 30; unsigned char _second; unsigned char minute = 1; unsigned char _minute = 0; unsigned char hour = 12; //Heure 12:00:00 pour initialiser boolean Flag_ReadTime; signed char temps = 90; int b_start; boolean etat_start; //Etat int b_pause; boolean etat_pause; int b_reset; boolean etat_reset; // branchement I2C sur CLK -> pinA5 et DIO -->Pin A4 #define CLK 2 #define DIO 3 //3 TM1637 tm1637(CLK,DIO); //Objet tm1637 void setup() { Serial.begin(9600); tm1637.set(2); //0 éclairage faible réglable jusqu'à 7 le plus intense tm1637.init(); //Initialisation du driver tm1637.point(POINT_ON); //Affichage de départ ABCD (le module peut afficher abcdef) //TimeDisp[0] = 10; //Affichage a //TimeDisp[1] = 11; //b //TimeDisp[2] = 12; //c //TimeDisp[3] = 13; //d //tm1637.display(TimeDisp); //delay(5000); //Pendant 5 sec //Horloge mise à jour 2 fois par seconde pour faire clignotter le : Timer1.initialize(500000); // timing pour 500ms Timer1.attachInterrupt(TimingISR); //declare l'interruption qui déclenche TimingISR Serial.println("Please send command to control the stopwatch:"); Serial.println("S - start"); Serial.println("P - pause"); Serial.println("R - reset"); stopwatchPause(); // Bouton chrono b_start = 8; etat_start = 0; b_pause = 9; etat_pause = 0; b_reset = 10; etat_reset = 0; // définition des modes pinMode(b_start, INPUT_PULLUP); pinMode(b_pause, INPUT_PULLUP); pinMode(b_reset, INPUT_PULLUP); } void loop() { // Déclenchement chrono/pause/reset etat_start = digitalRead(b_start); if(etat_start == LOW) { stopwatchStart(); } etat_pause = digitalRead(b_pause); if(etat_pause == LOW) { stopwatchPause(); } etat_reset = digitalRead(b_reset); if(b_reset == LOW) { stopwatchReset(); } //Commande chrono char command; command = Serial.read(); switch(command) { //case 'S':stopwatchStart();Serial.println("Start timing...");break; //case 'P':stopwatchPause();Serial.println("Stopwatch was paused");break; case 'R':stopwatchReset();Serial.println("Stopwatch was reset");break; default:break; } if(Update == ON) { TimeUpdate(); tm1637.display(TimeDisp); } } /* void TimingISR() { halfsecond --; Update = ON; if(halfsecond <= 0) { second --; if(second <= 0 ) { minute --; if (minute >= 0) /*{ hour --; if(hour <= 0)hour = 0; minute = 59; } minute=0; second = 60; } halfsecond = 2; }*/ void TimingISR() { halfsecond --; Update = ON; if (halfsecond <= 0) { temps = max(temps-1,0); second = temps%59; minute = temps/59; halfsecond = 2; } // Serial.println(second); ClockPoint = (~ClockPoint) & 0x01; if(Flag_ReadTime == 0) { _second = second; _minute = minute; } } void TimeUpdate(void) { if(ClockPoint)tm1637.point(POINT_ON); else tm1637.point(POINT_OFF); //OFF Pour clignotement if (hhmm==0) { TimeDisp[0] = hour / 10; //Affichage hh:mm TimeDisp[1] = hour % 10; TimeDisp[2] = minute / 10; TimeDisp[3] = minute % 10; } else { //Affichage mm:ss TimeDisp[0] = minute / 10; //Affichage hh:mm TimeDisp[1] = minute % 10; TimeDisp[2] = second / 10; TimeDisp[3] = second % 10; } Update = OFF; } void stopwatchStart()//timer1 on { Flag_ReadTime = 0; TCCR1B |= Timer1.clockSelectBits; } void stopwatchPause()//timer1 off if [CS12 CS11 CS10] is [0 0 0]. { TCCR1B &= ~(_BV(CS10) | _BV(CS11) | _BV(CS12)); } void stopwatchReset() { stopwatchPause(); Flag_ReadTime = 0; _second = 0; _minute = 0; second = 30; minute = 1; temps = 90; Update = ON; } |
+0
-0