/* Déclaration des constantes */ const int pin[] = {3,5,7,9,11,13,A0,A2}; // on utilise des tableaux pour réduire la taille du code const int led[] = {2,4,6,8,10,12,A1,A3}; const char* place[] = {"place1","place2","place3","place4","place5","place6","place7","place8"}; /* Déclaration des variables */ int pirState[8], val[8], gpio = 0; unsigned long tempsplace[8],tempsplaceA[8],tempsplaceB[8], temps[8], maximum = 0; char* pos; void setup() { Serial.begin(9600); // on initialise la com serie for (int i = 0; i < (sizeof(pin)/sizeof(int)); i++) { // on fait une boucle for selon la taille du tableau pin pinMode(pin[i], INPUT); // pour chaque capteur du tableau pin on configure le gpio en entrée } } void loop() { for (int i = 0; i < (sizeof(pin)/sizeof(int)); i++) { // on fait une boucle for selon la taille du tableau pin val[i] = digitalRead(pin[i]); // on lit l'état du gpio de chaque capteur if (val[i] == HIGH) { // si il y a un oeuf de posé if (pirState[i] == LOW) { // et qu'il n'y en avait pas avant (flag a LOW) tempsplaceA[i] = millis(); // on note le temps Serial.print("un Oeuf "); // on écrit dans la com serie Serial.print(place[i]); // sa place Serial.println(" a été posé"); pirState[i] = HIGH; // et on active le flag } else // si un oeuf est déja la { temps[i] = millis() - tempsplaceA[i]; // on calcule depuis combien de temps if (temps[i] > maximum) { // on trouve qui est le plus vieux maximum = temps[i]; pos = place[i]; // on recupere sa place gpio = led[i]; // la led verte associée digitalWrite(gpio, HIGH); // et on la fait clignoter delay(500); digitalWrite(gpio, LOW); delay(500); } } } else // s'il n'y a pas d'oeufs { if (pirState[i] == HIGH){ // mais qu'il y en avait un avant (le flag a HIGH) tempsplaceB[i] = millis(); // on note de temps Serial.print("un Oeuf "); // on écrit dans la com serie Serial.print(place[i]); // sa place Serial.println(" a été enlevé"); pirState[i] = LOW; // et on desactive le flag tempsplace[i] = (tempsplaceB[i] - tempsplaceA[i]); // on calcul le temps que l'oeuf a passé dans la boite tempsplaceA[i] = 0; // on réinitialise les variables associées tempsplaceB[i] = 0; temps[i] = 0; maximum = 0; // on convertit le resultat et l'affiche dans la com serie if (tempsplace[i] < 60000) { Serial.print("l'oeuf à "); Serial.print(tempsplace[i]/1000); Serial.println(" secondes"); } else if (60000 < tempsplace[i] < 3600000) { Serial.print("l'oeuf à "); Serial.print(tempsplace[i]/1000/60); Serial.println(" minutes"); } else if (3600000 < tempsplace[i] < 86400000) { Serial.print("l'oeuf à "); Serial.print(tempsplace[i]/1000/60/60); Serial.println(" heures"); } else if (tempsplace[i] > 86400000) { Serial.print("l'oeuf à "); Serial.print(tempsplace[i]/1000/60/60/24); Serial.println(" jours"); } } } } }