#include #include #include "halloween.h" //déclaration et initialisation du port série logiciel SoftwareSerial softSerial(/*rx =*/10, /*tx =*/11); //déclaration du module MP3 DFRobotDFPlayerMini myDFPlayer; //un tableau à 2 entrées pour représenter les différents états rencontrés bool etats[NOMBRE_ETATS][5] = { {0, 0, 0, 0, 0}, //etats[0] : aucun laser coupé {1, 0, 0, 0, 0}, //etats[1] : laser 0 coupé uniquement {0, 1, 0, 0, 0}, //etats[2] : laser 1 coupé uniquement {0, 0, 1, 0, 0}, //etats[3] : laser 2 coupé uniquement {0, 0, 0, 1, 0}, //etats[4] : laser 3 coupé uniquement {0, 0, 0, 0, 1}, //etats[5] : laser 4 coupé uniquement {1, 0, 0, 0, 1} //etats[6] : laser 0 et 4 coupés }, etat_laser[5] = {0, 0, 0, 0, 0}; void lecture_lasers() { //mise à jour des valeurs des lasers etat_laser[0] = LASER0 < SEUIL ? 1 : 0; //Si la valeur de la photo-résistance est sous le seuil alors on passe l'état à 1 sinon à 0 etat_laser[1] = LASER1 < SEUIL ? 1 : 0; etat_laser[2] = LASER2 < SEUIL ? 1 : 0; etat_laser[3] = LASER3 < SEUIL ? 1 : 0; etat_laser[4] = LASER4 < SEUIL ? 1 : 0; } int verification_etat() { //on commence par appeler la fonction lecture_lasers lecture_lasers(); //on peut maintenant commencer la comparaison int comparaison = 1; //Dans cette boucle on va balayer les n états demandant une réponse for(int i = 0 ; i < NOMBRE_ETATS ; i++) { //dans cette boucle on va comparer l'état des laser avec les états attendus for(int j = 0 ; j < 5 ; j++) { //il suffira d'une seule différence pour déclencher la mutiplication par 0 if(etats[i][j] != etat_laser[j]) {comparaison *= 0;} } //en sortie de cette boucle si comparaison = 1 alors on se trouve dans l'état i if(comparaison == 1) {return i;} //sinon il faut continuer la boucle sur i en remettant comparaison à la valeur 1 comparaison = 1; } //si on arrive ici c'est qu'a aucun etat ne correspond on renvoie alors -1 return -1; } void setup() { //initialisation des ports séries (logiciel et matériel) softSerial.begin(9600); Serial.begin(9600); //initialisation du module MP3 Serial.println(F("DFRobot DFPlayer Mini Demo")); Serial.println(F("Initialisation du module MP3 ... (peut prendre de 3 a 5 secondes)")); if (!myDFPlayer.begin(softSerial, /*isACK = */true, /*doReset = */true)) { //En cas de problème afficher les messages suivant Serial.println(F("Unable to begin:")); Serial.println(F("1.Please recheck the connection!")); Serial.println(F("2.Please insert the SD card!")); //puis attendre dans une boucle infinie while(true) { delay(0); } } } void loop() { //on récupère l'état du système int etat = verification_etat(); Serial.println("etat : "); Serial.println(etat); //chaque état correspond à un MP3 if(etat > 0 && etat < 6) { myDFPlayer.play(etat); //on lance la lecture delay(1000); //on attend 1s myDFPlayer.stop(); //on arrête la lecture } //cas particuliers //cas où les lasers 1 et 5 sont coupés en même temps if(etat == 6) { //on joue le son myDFPlayer.play(6); //on active le relai RELAI_ON; //ce sont doit être joué tant que les faisceaux sont coupés et pendant max 12s unsigned long temps = millis(); while( millis() - temps < 12000 && verification_etat() == 6) { //ici on fait une petite attente de 10ms delay(10); } //on coupe le son myDFPlayer.stop(); //on coupe le relai RELAI_OFF; } //si plusieurs lasers sont coupé en même temps alors etat == -1 if(etat == -1) { myDFPlayer.play(7); //on lance la lecture delay(1000); //on attend 1s myDFPlayer.stop(); //on arrête la lecture } }