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