// // ######################### // # MESURE DES RADIATIONS # // ######################### // # Guy Magli 20.11.2019 # // ######################### // # 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. // // ! ======================= ! // ! BRANCHEMENT DE LA CARTE ! // ! ======================= ! // // : ----- : : ------------ : // : Carte : : Arduino Mega : // : ----- : : ------------ : // INT D 2 // 5 V 5 V // GND GND // // ! ======================== ! // ! LIBRAIRIES ET PARAMETRES ! // ! ======================== ! // #include #include //// // ! ================================================= ! // ! VARIABLES GLOBALES, CONSTANTES ET INITIALISATIONS ! // ! ================================================= ! // unsigned long lCoupsDansDixMinutes = 0; // Coups comptes dans une minute unsigned long lDerniersCoupsParDixMinutes = 0; // Pour ne pas avoir de page vide unsigned long lMillisPrecedents = 0;// Derniere mesure du temps en millisecondes unsigned long lMillisActuels = 0; // Mesure actuelle du temps en millisecondes // // : -------------------- : // : Le bouclier Internet : // : -------------------- : // // Adresse Mac du bouclier. // Cette adresse figure sur le bouclier Internet. // Elle peut etre modifiee. // Elle doit etre modifiee si vous avez deja une carte reseau avec la meme adresse MAC. // Par exemple { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEE }; puis { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEF }; // byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xEB}; // Attention : l'adresse doit etre libre (voir IPSCAN ci-dessous) // Adresse IP du bouclier. IPAddress ip(192, 168, 1, 41); // Definie (libre) grace a IPSCAN. Voir la page ci-dessous // www.advanced-ip-scanner.com/fr int iPort = 10410; // Choisir un port disponible (< 65535) J'ai pris les deux derniers nombres de l'IP (1 et 41) // multiplies par 10 (10 et 410) EthernetServer server(iPort); // // ! ===== ! // ! SETUP ! // ! ===== ! // void setup() { // // Pour la communication via la console. // Serial.begin(9600); while(!Serial) {;} // // Titre // Serial.println(" "); Serial.println(": ----------------------- :"); Serial.println(": INFORMATIONS RADIATIONS :"); Serial.println(": ----------------------- :"); Serial.println(" "); // // Internet/Ethernet // Ethernet.begin(mac, ip); server.begin(); Serial.print("Le serveur est a l'adresse "); Serial.print(Ethernet.localIP()); Serial.print(" sur le port "); Serial.println(iPort); Serial.print("L'adresse MAC est "); Serial.print(mac[0], HEX); Serial.print(", "); Serial.print(mac[1], HEX); Serial.print(", "); Serial.print(mac[2], HEX); Serial.print(", "); Serial.print(mac[3], HEX); Serial.print(", "); Serial.print(mac[4], HEX); Serial.print(", "); Serial.print(mac[5], HEX); Serial.println(" "); server.begin(); delay(1000); // Serial.println(" "); // Pour cette interruption, voir // https://github.com/SensorsIot/Geiger-Counter-RadiationD-v1.1-CAJOE- // Sketch written by Alex Boguslavsky RH Electronics; mail: support@radiohobbystore.com attachInterrupt(0, tube_impulse, FALLING); // Definition de l'interruption lMillisPrecedents = millis(); // Mesure du temps en millisecondes } // // ! ==== ! // ! LOOP ! // ! ==== ! // void loop() { // On fait une lecture sur dix minutes. char c; lMillisActuels = millis(); // Mesure du temps en millisecondes. if(lMillisActuels - lMillisPrecedents > 600000) { lMillisPrecedents = lMillisActuels; // On memorise le temps de cette mesure. lDerniersCoupsParDixMinutes = lCoupsDansDixMinutes; lCoupsDansDixMinutes = 0; // Coups comptes dans une minute remis a zero. } // // Ecoute des clients Ethernet. // EthernetClient client = server.available(); if (client) { Serial.println("Un client a ete trouve."); boolean bLigneVide = true; // La requete se terminera par une ligne blanche. while (client.connected()) { if (client.available()) { char c = client.read(); // Si une ligne est terminee et vide alors on envoie la reponse. if (c == '\n' && bLigneVide) { client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(); client.print("<"); // Balise repere pour le debut (R) de la valeur des coups par minute en Celsius (TC). client.print(lDerniersCoupsParDixMinutes / 10); client.print(">"); // Fin (F) pour les coups par minute. client.println("
"); break; } if (c == '\n') { // Une nouvelle ligne commence. bLigneVide = true; } else if (c != '\r') { // Cette ligne n'est pas vide. bLigneVide = false; } } } // Delai de reception. delay(1); // Fin de la connexion. client.stop(); } } // // ! ========== ! // ! Procedures ! // ! ========== ! // // --------------------------------- // : Compte les impulsions du tube : // --------------------------------- // void tube_impulse() { lCoupsDansDixMinutes++; // Un coup de plus est compte dans cette minute. Serial.print("Coups dans dix minutes : "); Serial.println(lCoupsDansDixMinutes); }