// // ########################### // # SEISMES SANS RESEAU # // ########################### // # Guy Magli 19.12.2020 # # // ########################### // # Conception, cablages # // # mises a jour, # // # contact... # // # www.magli.fr # // ########################### // // Afin d'eviter les problemes d'affichage et d'impression les signes diacritiques // ont ete retires des commentaires et des chaines de caracteres. // // ! ======================== ! // ! LIBRAIRIES ET PARAMETRES ! // ! ======================== ! // #include #include #include // Pour utilisation de l'horloge RTC. #include // Pour l'eeprom // // ! ================================================= ! // ! VARIABLES GLOBALES, CONSTANTES ET INITIALISATIONS ! // ! ================================================= ! // // Pour les connecteurs de la carte. // int iBuzzer = 22; // Alarme sonore. int iDetecteur = 23; // Branchement sur le coupe-circuit du detecteur de seismes. RTC_DS1307 RTC; // Constante pour le module horloge int iTentativesConnexion = 0; // Pour le test de la connexion Internet. int iTentativesLecture = 0; // Id. String cDestinataire = ""; // Pour l'envoi des courriels. String cPrenom = ""; // Id. // Pour les calculs sur les dates et les heures. DateTime now; unsigned long iHeures = 0; // Nombre d'heures. unsigned long iMinutes = 0; // Idem pour les minutes. unsigned long iSecondes = 0; // Idem pour les secondes. unsigned long iJours = 0; // La date. unsigned long iMois = 0; // Le mois. unsigned long iAnnees = 0; // L'annee. // // Divers // int t, g; // Pour les boucles // // ! ===== ! // ! SETUP ! // ! ===== ! // void setup() { Wire.begin(); RTC.begin(); // // Pour la communication via la console. // Serial.begin(9600); delay(2000); Serial.println(" "); Serial.println("BOITIER DE DETECTION DES SEISMES "); Serial.println(" "); // // Pour le buzzer // Serial.print("Test du buzzer sur le connecteur "); Serial.println(iBuzzer); Serial.println(" "); pinMode(iBuzzer, OUTPUT); for (g = 0; g < 2; g++) { for (t = 0; t < 20; t++) { digitalWrite(iBuzzer, HIGH); delay(10); digitalWrite(iBuzzer, LOW); delay(10); } delay(100); } Serial.println(" "); // // Ecriture des informations de l'EEPROM // // DANGER : Ne mettre qu'une seule fois // //EEPROM.write(1, iJours); //EEPROM.write(2, iMois); //EEPROM.write(3, iAnnees); //EEPROM.write(4, iHeures); //EEPROM.write(5, iMinutes); //EEPROM.write(6, iSecondes); RTC.adjust(DateTime(__DATE__, __TIME__)); // Serial.print("Le dernier seisme a ete enregistre le "); Serial.print(EEPROM.read(1)); Serial.print("."); Serial.print(EEPROM.read(2)); Serial.print("."); Serial.print(EEPROM.read(3)); Serial.print(" a "); Serial.print(EEPROM.read(4)); Serial.print(":"); Serial.print(EEPROM.read(5)); Serial.print(":"); Serial.println(EEPROM.read(6)); Serial.println(" "); // // Affichage de l'heure // litLaDateEtLHeure(); Serial.print("Debut de la surveillance le "); Serial.print(iJours); Serial.print("."); Serial.print(iMois); Serial.print("."); Serial.print(iAnnees); Serial.print(" a "); Serial.print(iHeures); Serial.print(":"); Serial.print(iMinutes); Serial.print(":"); Serial.println(iSecondes); Serial.println(" "); // // Pour la coupure du detecteur de seismes . // pinMode(iDetecteur, INPUT_PULLUP); // Serial.print("Attente du signal sur le connecteur "); Serial.println(iDetecteur); Serial.println(" "); } // // ! ==== ! // ! LOOP ! // ! ==== ! // void loop() { bool bCourrielEnvoye = false; if (digitalRead(iDetecteur) == false) // On vient de couper la ligne, il y a eu un seisme. { litLaDateEtLHeure(); Serial.println("Le detecteur vient de rompre le signal."); Serial.println(" "); Serial.print("Le "); Serial.print(iJours); Serial.print("."); Serial.print(iMois); Serial.print("."); Serial.print(iAnnees); Serial.print(" a "); Serial.print(iHeures); Serial.print(":"); Serial.print(iMinutes); Serial.print(":"); Serial.println(iSecondes); Serial.println(" "); // On enregistre les valeurs dans l'eeprom. Serial.println("Enregistrement de la date et de l'heure."); Serial.println(" "); EEPROM.write(1, iJours); EEPROM.write(2, iMois); EEPROM.write(3, iAnnees); EEPROM.write(4, iHeures); EEPROM.write(5, iMinutes); EEPROM.write(6, iSecondes); Serial.println("Signal sonore durant dix secondes."); Serial.println(" "); // On declenche le buzzer durant dix secondes environ. for (t = 0; t < 1000; t++) { digitalWrite(iBuzzer, HIGH); delay(10); digitalWrite(iBuzzer, LOW); delay(10); } } } // // ! ========== ! // ! Procedures ! // ! ========== ! // // : ----------------- : // : Lit le module RTC : // : ----------------- : // void litLaDateEtLHeure() { now = RTC.now(); // On lit l'heure et on extrait iHeures = now.hour(); // l'heure, iMinutes = now.minute(); // les minutes, iSecondes = now.second(); // les secondes, iJours = now.day(); // la date du jour, iMois = now.month(); // le mois, iAnnees = now.year() - 2000; // l'annee. }