/* 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");
}
}
}
}
}