diff --git a/progArduino/principal/principal.ino b/progArduino/principal/principal.ino index d9c6878..0e38f75 100644 --- a/progArduino/principal/principal.ino +++ b/progArduino/principal/principal.ino @@ -100,6 +100,7 @@ void couleur(int R, int G, int B) strip.show(); } + /* // fait avec application void choix_couleur() @@ -252,8 +253,6 @@ void mouvement() } -//-------------------------------------------------------------------------------------------------------------------------------------------FONCTIONS PRINCIPALES - //fonction regroupant l'utilisation de la led de manière automatique et du capteur de mouvement. //on veut l'utilisation du capteur (soit réalisation de mouvement) uniquement quand la led est allumée @@ -283,17 +282,18 @@ void automatique() else { //Monitoring - couleur(255,255,255); - + couleur(255,255,255); + while(i<=5) { luminosite = analogRead(CAPTEUR); if(luminosite < seuil) { - couleur(255,255,255); - + couleur(255,255,255); + + //DETECTION D'UN MOUVEMENT if(digitalRead(pirPin)==HIGH) { @@ -350,8 +350,10 @@ void automatique() } - - + + + +//-------------------------------------------------------------------------------------------------------------------------------------------FONCTIONS PRINCIPALES @@ -359,31 +361,131 @@ void automatique() //---------------------------------------------------------------------------------------------------------------------------------mainveilleuse() //fonction du programme principal (à copier plus tard dans la LOOP() -void mainVeilleuse() +//elle permet l'utilisation de la veilleuse de manière automatique selon la position de l'interrupteur, sinon c'est l'application qui gere le contrôle +//Elle est constituée de la fusion des fonctions secondaires: lumiere_auto(), mouvement() et automatique() +void mainVeilleuse_auto() { etatBouton = digitalRead(pinInter); //Rappel :pinInter = 9 - + + //MODE AUTOMATIQUE //si la veilleuse est allumé et interrupteur = LOW on utilise le mode automatique. while (etatBouton == LOW) //test si le bouton a un niveau logique HAUT { delay(1000); - etatBouton = digitalRead(pinInter); //Rappel :pinInter = 9 - automatique(); + etatBouton = digitalRead(pinInter); + + if(etatBouton==LOW) + { + //On récupère la valeur du seuil + luminosite = analogRead(CAPTEUR); + int i=0; + + //Monitoring + Serial.print("Luminosite = "); + Serial.print(luminosite); + Serial.print(" / Seuil = "); + Serial.print(seuil); + + // on l'éteint + if (luminosite > seuil) + { + eteindre(); + Serial.println(" / LED OFF"); + } + + //Allumage de la led si la luminosité est inférieur au seuil (on l'allume dans la couleur blanche la base) + //enfant couché il doit dormir + else + { + //Monitoring + couleur(255,255,255); + + + while(i<=5 && etatBouton==LOW) + { + luminosite = analogRead(CAPTEUR); + + if(luminosite < seuil) + { + couleur(255,255,255); + + //DETECTION D'UN MOUVEMENT + if(digitalRead(pirPin)==HIGH) + { + digitalWrite(ledPin,HIGH); // la led modélise la déection d'un mouvement selon l'etat du capteur + if (lockLow) + { + //être sûr d'attendre la transistion à l'état LOW du capteur pour continuer : + lockLow= false; + delay(50); + } + takeLowTime = true; + } + + //FIN DE LA DETECTION + if(digitalRead(pirPin)==LOW) + { + digitalWrite(ledPin, LOW); + if(takeLowTime) + { + lowIn= millis(); // enregistrement du temps qu'il faut pour passer de HIGH à LOW pour le capteur + takeLowTime = false; // être sûr que cela se fait uniquement au debut du passage à LOW + } + // Ainsi si le capteur est LOW plus longtemps que la pause, on suppose qu'il n'y plus de mouvement + // if > être sûr que la suite s'execute seulement après un nouveau mouvement, donc nouvelle séquence de led allumée + if(!lockLow && millis()-lowIn > pause) + { + lockLow = true; + i++; + Serial.println(i); + + //CHILD AWAKE + if(i==5) + { + Serial.println("Sommeil agite !!!"); + MESSAGE = 1; + i=0; + } + delay(20); + } + } + + delay(500); + } + + else + { + eteindre(); + i=0; + } + + etatBouton = digitalRead(pinInter); //Rappel :pinInter = 9 + + } + delay(50); + } + } + else + { + eteindre(); + Serial.println("UTILISATION APPLICATION"); + } etatBouton = digitalRead(pinInter); //Rappel :pinInter = 9 } - + + //MODE MANUEL (APPLICATION) //on est eteint avec l'interrupteur manuel on peut tjrs utiliser l'application pour gerer la veilleuse eteindre(); //la LED reste éteinte Serial.println("UTILISATION APPLICATION"); - delay(2000); + delay(1000); } - +//-------------------------------------------------------------------------------------------------------------------------------------------TESTS & LOOP == MAIN PROG //fonction permettant de faire les tests des foncions secondaires void tests() @@ -400,14 +502,11 @@ void tests() } - - -//-------------------------------------------------------------------------------------------------------------------------------------------LOOP == MAIN PROG void loop() { //tests(); - mainVeilleuse(); - delay(200); + mainVeilleuse_auto(); + delay(200); } -- libgit2 0.21.2