If the arduino stops it means that it has an error and it crashes.
I'm going to look into this.
I put the code here. I do have ideas like writing to a file, my generated web page that may be causing my problem.
Thanks for your help
#include <WiFiNINA.h>
#include <WiFiUdp.h>
#include <NTPClient.h>
#include <TimeLib.h>
#include "max6675.h"
#include <SPI.h>
#include <SD.h>
//#include <avr/interrupt.h>
//#include <avr/power.h>
//#include <avr/sleep.h>
//#include <avr/wdt.h>
/* ###########################################################################################################
* ###########################################################################################################
* I N I T I A L I S E
###########################################################################################################
###########################################################################################################*/
//=========================================================================
// Variables configurables
//=========================================================================
char bufferSsid[25]= "xxx"; //"Le_Paradis";
char bufferPass[25] = "xxx"; //"lerobuste";
char bufferServeurTemps[25] = "xxxx.pool.ntp.org";//"europe.pool.ntp.org";
char bufferIPServeur[25] = "xxx.xxx.xxx.xxx"; //"192.168.1.53";
int RefresHTML = 10;
String valeurs[6][2]={{"Int.","0"},{"Ext.","0"},{"libr","0"},{"libr","0"},{"libr","0"},{"libr","0"}};
int tempo = 1; // interval de temps en MINUTES entre chaque sauvegarde
//=========================================================================
//=========================================================================
char *ssid = bufferSsid;
char *pass = bufferPass;
char *ServeurTemps = bufferServeurTemps;
char *IPServeur = bufferIPServeur;
int status = WL_IDLE_STATUS;
unsigned int localPort = 1968;
char packetBuffer[255];
boolean clientconnecte=false;
String wifiIP;
unsigned int debut = 0;
byte h_, j_, m_;
byte page = 0;
byte nbPassages = 0;
byte thermo1S0 = 2; // so (vert)
byte thermo1CLK = 3; // sck (jaune)
byte thermo1CS = 4; // unique pour le thermocouple 1
byte thermo2CS = 5; // unique pour le thermocouple 2
byte thermo3CS = 6; // unique pour le thermocouple 3
byte thermo4CS = 7; // unique pour le thermocouple 4
byte thermo5CS = 8; // unique pour le thermocouple 5
byte thermo6CS = 9; // unique pour le thermocouple 6
WiFiUDP udp;
WiFiServer server(80);
WiFiClient client;
NTPClient timeClient(udp, ServeurTemps, 3600, 60000);
MAX6675 thermocouple1(thermo1CLK, thermo1CS, thermo1S0);
MAX6675 thermocouple2(thermo1CLK, thermo2CS, thermo1S0);
MAX6675 thermocouple3(thermo1CLK, thermo3CS, thermo1S0);
MAX6675 thermocouple4(thermo1CLK, thermo4CS, thermo1S0);
MAX6675 thermocouple5(thermo1CLK, thermo5CS, thermo1S0);
MAX6675 thermocouple6(thermo1CLK, thermo6CS, thermo1S0);
byte sdCS = 10;
Sd2Card CarteSD;
SdVolume VolumeCarteSD;
uint32_t volumesize;
/* ###########################################################################################################
* ###########################################################################################################
* S E T U P
###########################################################################################################
###########################################################################################################*/
void setup() {
Serial.begin(9600);
delay(500);
udp.begin(localPort);
Serial.println("Initialisation carte SD");
if (!CarteSD.init(SPI_HALF_SPEED, sdCS)) {
Serial.println(F("Échec lors de l'initialisation. Essayez de jeter un coup d'oeil à : "));
Serial.println(F("- est-ce que la carte SD est bien insérée dans le lecteur ?"));
Serial.println(F("- est-ce que vos branchements électriques sont corrects ?"));
Serial.println(F("- est-ce que le 'chipSelect' choisi dans le programme correspond bien à celui branché sur l'arduino ? (pin D10, par défaut)"));
Serial.println();
Serial.println(F("Appuyez sur RESET pour relancer le programme, au besoin."));
} else {
Serial.println(F("Câblage correct, carte SD trouvée."));
Serial.println();
}
// Étape 2 : déterminer le type de carte SD insérée dans le lecteur
Serial.print(F("Type de carte SD insérée : "));
switch (CarteSD.type()) {
case SD_CARD_TYPE_SD1:
Serial.println(F("SD1"));
break;
case SD_CARD_TYPE_SD2:
Serial.println(F("SD2"));
break;
case SD_CARD_TYPE_SDHC:
Serial.println(F("SDHC"));
break;
default:
Serial.println(F("Inconnu"));
}
if (!VolumeCarteSD.init(CarteSD)) {
Serial.println(F("Aucune partition FAT16/FAT32 trouvée."));
Serial.println(F("Vérifiez si votre carte SD est bien formatée !"));
// while (1); // Boucle infinie, arrêt du programme
} else {
Serial.print(F("Format du volume : FAT"));
Serial.println(VolumeCarteSD.fatType(), DEC);
}
if (!SD.begin(sdCS)) {
Serial.println("L'initialisation de la carte SD a échouée !");
// return;
} else {
delay(500);
Serial.println("----------------");
Serial.println("Lecture carte SD");
Serial.println("----------------");
lireConf();
if (SD.exists("config.ini") == false ) {
envoyerConf();
// *************************************************************************************************************
// *************************************************************************************************************
// *************************************************************************************************************
// le fichier de config est à compléter, allumer led pour indiquer
// *************************************************************************************************************
// *************************************************************************************************************
// *************************************************************************************************************
}
Serial.print("------------------------>");Serial.println(ssid);
Serial.print("------------------------>");Serial.println(pass);
Serial.print("------------------------>");Serial.println(ServeurTemps);
Serial.print("------------------------>");Serial.println(IPServeur);
Serial.print("------------------------>");Serial.println(tempo);
Serial.print("------------------------>");Serial.println(valeurs[0][0]);
Serial.print("------------------------>");Serial.println(valeurs[1][0]);
Serial.print("------------------------>");Serial.println(valeurs[2][0]);
}
delay(500);
Serial.print("Réseau Wifi : ");
Serial.println(ssid);
if (WiFi.status() == WL_NO_MODULE) {
Serial.println("Communication WiFi Echec!");
// don't continue
// while (true);
}
String fv = WiFi.firmwareVersion();
if (fv < WIFI_FIRMWARE_LATEST_VERSION) {
//Serial.println("Please upgrade the firmware");
}
while (status != WL_CONNECTED) {
Serial.println("Mince, WIFI non connecté");
status = WiFi.begin(ssid, pass);
}
Serial.println("WIFI connecté, ouf !");
Serial.println(WiFi.localIP());
delay(500);
wifiIP = String(WiFi.localIP());
server.begin();
client = server.available();
timeClient.begin();
timeClient.update();
Serial.println("========== Initialisation terminé ==========");
debut = timeClient.getEpochTime();
}
/* ###########################################################################################################
* ###########################################################################################################
* L O O P
###########################################################################################################
###########################################################################################################*/
void loop() {
client = server.available();
String request = "";
if (client) {
request = client.readStringUntil('\r\n');
if (request.indexOf("/NOMS=") != -1) {
request = request.substring(request.indexOf("=")+1);
request = request.substring(0, request.indexOf("m"));
for (byte i=0; i<6 ; i++) {
String txt = request.substring(request.indexOf("["+String(i)+"]"));
valeurs[i][0] = txt.substring(3,txt.indexOf(";"));
}
envoyerConf();
}
if (request.indexOf("/TEMP=") != -1) {
request = request.substring(request.indexOf("=")+1);
request = request.substring(0, request.indexOf("m"));
j_=request.substring(0, request.indexOf("j")).toInt();
h_=request.substring(request.indexOf("j")+1, request.indexOf("h")).toInt();
m_=request.substring(request.indexOf("h")+1, 255).toInt();
tempo = (j_*24+h_)*60+m_;
//Serial.print(j_);Serial.print(" ");Serial.print(h_);Serial.print(":");Serial.print(m_);Serial.print("==>");Serial.println(tempo);
envoyerConf();
}
if (request.indexOf("/SERVERTEMPS=") != -1) {
request = request.substring(request.indexOf("=")+1);
request = request.substring(0, request.indexOf(";"));
request.toCharArray(bufferServeurTemps, request.length() + 1);
ServeurTemps = bufferServeurTemps;
envoyerConf();
}
if (request.indexOf("/SERVER=") != -1) {
request = request.substring(request.indexOf("=")+1);
request = request.substring(0, request.indexOf(";"));
request.toCharArray(bufferIPServeur, request.length() + 1);
IPServeur = bufferIPServeur;
envoyerConf();
}
if (request.indexOf("/SSID=") != -1) {
request = request.substring(request.indexOf("=")+1);
request = request.substring(0, request.indexOf(";"));
request.toCharArray(bufferSsid, request.length() + 1);
ssid = bufferSsid;
envoyerConf();
}
if (request.indexOf("/PASS=") != -1) {
request = request.substring(request.indexOf("=")+1);
request = request.substring(0, request.indexOf(";"));
request.toCharArray(bufferPass, request.length() + 1);
pass = bufferPass;
envoyerConf();
}
if (request.indexOf("/EFFACE=") != -1) {
SD.remove("mesures.txt");
}
if (request.indexOf("/RETOUR=") != -1) {
page = 0;
}
if (request.indexOf("/DATA=") != -1) {
page = 1;
}
if (request.indexOf("/CONFIG=") != -1) {
page = 2;
}
if (request.indexOf("/VARIABLES=") != -1) {
page = 3;
}
if (request.indexOf("/GRAPH=") != -1) {
page = 4;
}
if (!clientconnecte) {
while (!client.available()) { delay(10); }
}
clientconnecte=true;
String request = client.readStringUntil('\r\n');
client.flush();
h_ = tempo/60;
m_ = tempo - h_ * 60;
j_ = h_ / 24;
h_ = h_ - j_* 24;
switch (page) {
case 0 : html(); break;
case 1 : html2(); break;
case 2 : html3(); break;
case 3 : html4(); break;
case 4 : html5(); break;
}
client.stop();
} else { clientconnecte=false; }
if (nbPassages >= 2000/50) {
sleep_disable();
valeurs[0][1]=String(thermocouple1.readCelsius(),1);
valeurs[1][1]=String(thermocouple2.readCelsius(),1);
valeurs[2][1]=String(thermocouple3.readCelsius(),1);
valeurs[3][1]=String(thermocouple4.readCelsius(),1);
valeurs[4][1]=String(thermocouple5.readCelsius(),1);
valeurs[5][1]=String(thermocouple6.readCelsius(),1);
Serial.print(valeurs[0][1]);Serial.print("--");Serial.print(valeurs[1][1]);Serial.print("--");Serial.println(valeurs[2][1]);
unsigned long unix_epoch = timeClient.getEpochTime();
if (unix_epoch - debut >= tempo*60) {
for (byte ii=0; ii<6; ii++) {
if (valeurs[ii][0]!="libr") {
int v = valeurs[ii][1].toFloat()*10;
ecrire(ii, v , valeurs[ii][0]);
}
}
debut = unix_epoch;
}
for (int ii=0; ii<6; ii++) {
if (valeurs[ii][0]!="libr") {
int v = valeurs[ii][1].toFloat()*100;
envoyer(String(ii)[0], v, valeurs[ii][0]);
}
}
nbPassages=0;
}
nbPassages=nbPassages+1;
delay(50);
}
/* ###########################################################################################################
* ###########################################################################################################
* S U B
###########################################################################################################
###########################################################################################################*/
String zero(int nb) {
static char buf[2];
sprintf(buf,"%02d",nb);
return String(buf);
}
void envoyer(char donnee, int valeur, String txt) {
String txt_ = txt;
if (valeur>200000) {return;}
int packetSize = udp.parsePacket();
char buf[25];
udp.beginPacket(IPServeur, localPort);
sprintf(buf, "%c:%i;%c%c%c%c", donnee, valeur, txt[0], txt[1], txt[2], txt[3]);
udp.write(buf);
udp.write("\r\n");
udp.endPacket();
}
void ecrire(byte nb, int valeur, String txt) {
unsigned long unix_epoch = timeClient.getEpochTime();
File myFile;
myFile = SD.open("mesures.txt", FILE_WRITE);
myFile.print("[");
myFile.print(nb);
myFile.print("]");
myFile.print(zero(day(unix_epoch)));
myFile.print("/");
myFile.print(zero(month(unix_epoch)));
myFile.print("/");
myFile.print(year(unix_epoch));
myFile.print(" ");
myFile.print(zero(hour(unix_epoch)+1));
myFile.print(":");
myFile.print(zero(minute(unix_epoch)));
myFile.print(" (");
myFile.print(unix_epoch);
myFile.print(") ");
myFile.print(txt);
myFile.print(" : ");
myFile.println(valeur);
myFile.close();
Serial.print("Ecriture sur SD : ");
Serial.print(day(unix_epoch));
Serial.print("/");
Serial.print(month(unix_epoch));
Serial.print("/");
Serial.print(year(unix_epoch));
Serial.print(" ");
Serial.print(hour(unix_epoch)+1);
Serial.print(":");
Serial.print(minute(unix_epoch));
Serial.print(" ");
Serial.print(txt);
Serial.print(" : ");
Serial.println(valeur);
}
/* ###########################################################################################################
* ###########################################################################################################
* L I R E C O N F
###########################################################################################################
###########################################################################################################*/
void lireConf() {
File myFile;
String ligne = "";
myFile = SD.open("config.ini", FILE_READ);
while (myFile.available()) {
char a = myFile.read();
if (a == '\n') {
Serial.println(ligne);
String consigne = ligne.substring(0, ligne.indexOf(":")+1);
String reponse = ligne.substring(ligne.indexOf(":")+1, ligne.indexOf(";"));
if (consigne == "WIFI :") {
reponse.toCharArray(bufferSsid, reponse.length() + 1);
ssid=bufferSsid;
}
if (consigne == "WIFI Mot de passe :") {
reponse.toCharArray(bufferPass, reponse.length() + 1);
pass=bufferPass;
}
if (consigne == "Serveur de temps :") {
//char buffer[reponse.length() + 1];
reponse.toCharArray(bufferServeurTemps, reponse.length() + 1);
ServeurTemps = bufferServeurTemps;
}
if (consigne =="IP serveur :") {
reponse.toCharArray(bufferIPServeur, reponse.length() + 1);
IPServeur = bufferIPServeur;
}
if (consigne == "Raffraichissement HTML sec :") { RefresHTML = reponse.toInt(); }
if (consigne == "Tempo :") { tempo = reponse.toInt(); }
if (consigne == "[0] :") { valeurs[0][0] = reponse; }
if (consigne == "[1] :") { valeurs[1][0] = reponse; }
if (consigne == "[2] :") { valeurs[2][0] = reponse; }
if (consigne == "[3] :") { valeurs[3][0] = reponse; }
if (consigne == "[4] :") { valeurs[4][0] = reponse; }
if (consigne == "[5] :") { valeurs[5][0] = reponse; }
ligne = "";
} else {
ligne += a;
}
}
myFile.close();
}
/* ###########################################################################################################
* ###########################################################################################################
* E C R I R E C O N F
###########################################################################################################
###########################################################################################################*/
void envoyerConf() {
SD.remove("config.ini");
File myFile;
myFile = SD.open("config.ini", FILE_WRITE);
myFile.print("WIFI :");
myFile.print(bufferSsid);
myFile.println(";");
myFile.print("WIFI Mot de passe :");
myFile.print(bufferPass);
myFile.println(";");
myFile.print("IP serveur :");
myFile.print(bufferIPServeur);
myFile.println(";");
myFile.print("Serveur de temps :");
myFile.print(bufferServeurTemps);
myFile.println(";");
myFile.print("Raffraichissement HTML sec:");
myFile.print(RefresHTML);
myFile.println(";");
myFile.print("Tempo :");
myFile.print(tempo);
myFile.println(";");
for (byte i=0; i<6; i++) {
myFile.print("[");myFile.print(i);myFile.print("]:");
myFile.print(valeurs[i][0]);
myFile.println(";");
}
myFile.close();
}
/* #########################################################################################
* P A G E W E B
* ######################################################################################### */
void html() {
// String lien = "http://" + wifiIP;
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html; charset=UTF-8");
client.println("");
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<style>");
// client.println("table, td, th {");
// client.println("border: 1px solid black;");
// client.println("}");
client.println("#table2 {");
client.println("border-collapse: collapse;");
client.println("}");
client.println("</style>");
client.println("<html lang='fr'>");//<META HTTP-EQUIV=\'Refresh\' CONTENT=\'" + String(RefresHTML) + "; URL=' + wifiIP + '\'>");
client.println("<title>Infos Maison</title>");
client.println("</head>");
client.println("<body style='background-color:#5DADE2;'>");
client.println("<center>");
client.println("<font size='7'>Configuration</font>");
client.println("</center>");
client.println("<font size='5'>");
client.println("<br><br>");
client.println("");
client.println("<table>");
for (byte n=0; n<6; n++) {
client.println(" <tr>");
client.println(" <td>");
client.println(" " + valeurs[n][0]);
client.println(" </td>");
client.println(" <td>");
client.print( " <input type='text' id='name" + String(n) + "' value='" + valeurs[n][0] + "' ");
if (valeurs[n][0]=="LIBR" || valeurs[n][0]=="libr") { client.println("disabled"); }
//client.print( " ");
client.println(" minlength='1' maxlength='4' size='6' onchange=\'noms()\'>");
client.println(" </td>");
client.println(" <td style='text-align:right'>");
client.println(" " + valeurs[n][1] + " °C");
client.println(" </td>");
client.println(" <td width='50'>");
client.println(" </td>");
client.println(" <td>");
client.println(" <label class='switch'>Mesure activée : ");
client.println(" <input type='checkbox' id='chk" + String(n) + "' value='" + String(n) + "'");
if (valeurs[n][0]!="LIBR" && valeurs[n][0]!="libr") { client.println(" checked "); }
client.println(" onclick=\'active("+ String(n) +")\'>");
client.println(" </label>");
client.println(" </td>");
client.println(" </tr>");
}
client.println("</table>");
client.println("");
client.println("</br></br>");
client.println("<center>");
client.println("Fréquence d'enregistrement des températures :<br>");
client.println("<table id='table2' width=50% style='border: 1px solid black; text-align:center'>");
client.println("<tr>");
client.println("<td style='border: 1px solid black'>Jour</td>");
client.println("<td style='border: 1px solid black'>Heures</td>");
client.println("<td style='border: 1px solid black'>Minutes</td>");
client.println("</tr>");
client.println("<tr>");
client.println("<td id='jourV' style='border: 1px solid black'>0</td>");
client.println("<td id='heureV' style='border: 1px solid black'>0</td>");
client.println("<td id='minuteV' style='border: 1px solid black'>0</td>");
client.println("</tr>");
client.println("<tr>");
client.println("<td id='jourV' style='border: 1px solid black'><input id='Vj' type='range' style='width:90%' value='"+ String(j_) +"' max='6' min='0' step='1' onchange=\'duree()\'></td>");
client.println("<td id='heureV' style='border: 1px solid black'><input id='Vh' type='range' style='width:90%' value='"+ String(h_) +"' max='23' min='0' step='1' onchange=\'duree()\'></td>");
client.println("<td id='minuteV' style='border: 1px solid black'><input id='Vm' type='range' style='width:90%' value='"+ String(m_) +"' max='59' min='0' step='1' onchange=\'duree()\'></td>");
client.println("</tr>");
client.println("</table>");
client.println("<br><br>");
client.println("Rafraichissement de la page (" + String(RefresHTML) + " secondes) [non activé]:<br>");
client.println("<input id='refresh' type='range' style='width:50%' value='"+ String(RefresHTML) +"' max='600' min='10' step='1' disabled><br>");
client.println("<table id='tableDonnees' width=75% style='border: 1px solid black; text-align:center'>");
client.println(" <tr>");
client.println(" <td style='border: 1px solid black'>serveur de temps</td>");
client.println(" <td style='border: 1px solid black'>");
client.println(" <input type='text' id='tmps' value='" + String(ServeurTemps) + "' onchange=\'infoTemps()\'>");
client.println(" </td>");
client.println(" </tr>");
client.println("<tr>");
client.println("<td style='border: 1px solid black'>Wifi</td>");
client.println(" <td style='border: 1px solid black'>");
client.println(" <input type='text' id='ssid' value='" + String(ssid) + "' onchange=\'infoSsid()\'>");
client.println(" </td>");
client.println("</tr>");
client.println("<tr>");
client.println("<td style='border: 1px solid black'>Mot de passe</td>");
client.println(" <td style='border: 1px solid black'>");
client.println(" <input type='text' id='pass' value='" + String(pass) + "' onchange=\'infoPass()\'>");
client.println(" </td>");
client.println("</tr>");
client.println("<tr>");
client.println("<td style='border: 1px solid black'>Adresse IP serveur</td>");
client.println(" <td style='border: 1px solid black'>");
client.println(" <input type='text' id='server' value='" + String(IPServeur) + "' onchange=\'infoServer()\'>");
client.println(" </td>");
client.println("</tr>");
client.println("<table>");
client.println("<input type='button' value='Efface toutes les données' onclick=\'efface()\'><br><br>");
client.println("<input type='button' value='Lire les données' onclick=\'data()\'><br>");
// client.println("<input type='button' value='Lire config.' onclick=\'config()\'><br>");
client.println("<input type='button' value='Variables / configuration' onclick=\'variables()\'><br>");
client.println("<input type='button' value='Graph' onclick=\'graph()\'><br>");
client.println("</center>");
client.println("<br><br>");
client.println("</font>");
client.println("<font size='1'>");
client.println("<span style='float: right'>H. Deconchat 2022</span>");
client.println("</font>");
client.println("</body>");
client.println("</html>");
client.println(" <!-- §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ -->");
client.println(" <script type=\"text/javascript\">");
client.println(" var j = document.getElementById('Vj').value;");
client.println(" var h = document.getElementById('Vh').value;");
client.println(" var m = document.getElementById('Vm').value;");
client.println(" var x = (((j * 24) + h) * 60) + m;");
client.println(" document.getElementById('minuteV').innerHTML = m;");
client.println(" document.getElementById('jourV').innerHTML = j;");
client.println(" document.getElementById('heureV').innerHTML = h;");
client.println(" var txt = \'/TEMP='+x+'min\';");
client.println(" <!-- -------------------------------------- -->");
client.println(" function active(index)");
client.println(" {");
client.println(" var c = document.getElementById('chk' + index).checked;");
client.println(" if (!c) {");
client.println(" document.getElementById('name' + index).value = 'libr';");
client.println(" document.getElementById('name' + index).disabled = true");
client.println(" } else {");
client.println(" document.getElementById('name' + index).value = 'acti';");
client.println(" document.getElementById('name' + index).disabled = false");
client.println(" };");
client.println(" noms()");
client.println(" }");
client.println(" <!-- -------------------------------------- -->");
client.println(" function infoTemps()");
client.println(" {");
client.println(" var v = document.getElementById('tmps').value;");
client.println(" var txt = \'/SERVERTEMPS='+v+';\';");
client.println(" window.location.href=txt;");
client.println(" }");
client.println(" <!-- -------------------------------------- -->");
client.println(" function infoSsid()");
client.println(" {");
client.println(" var v = document.getElementById('ssid').value;");
client.println(" var txt = \'/SSID='+v+';\';");
client.println(" window.location.href=txt;");
client.println(" }");
client.println(" <!-- -------------------------------------- -->");
client.println(" function infoPass()");
client.println(" {");
client.println(" var v = document.getElementById('pass').value;");
client.println(" var txt = \'/PASS='+v+';\';");
client.println(" window.location.href=txt;");
client.println(" }");
client.println(" <!-- -------------------------------------- -->");
client.println(" function infoServer()");
client.println(" {");
client.println(" var v = document.getElementById('server').value;");
client.println(" var txt = \'/SERVER='+v+';\';");
client.println(" window.location.href=txt;");
client.println(" }");
client.println(" <!-- -------------------------------------- -->");
client.println(" function duree()");
client.println(" {");
client.println(" var j = document.getElementById('Vj').value;");
client.println(" var h = document.getElementById('Vh').value;");
client.println(" var m = document.getElementById('Vm').value;");
client.println(" var x = ((((j * 24) + h) * 60) + m);");
client.println(" document.getElementById('minuteV').innerHTML = m;");
client.println(" document.getElementById('jourV').innerHTML = j;");
client.println(" document.getElementById('heureV').innerHTML = h;");
//client.println(" document.getElementById('minuteV').innerHTML = x;");
client.println(" var txt = \'/TEMP='+j+'j'+h+'h'+m+'min\';");
client.println(" window.location.href=txt;");
client.println(" }");
client.println(" <!-- -------------------------------------- -->");
client.println(" function noms()");
client.println(" {");
client.println(" var tx = ''");
client.println(" for (let i=0; i<6; i++) {");
client.println(" tx += '[' + i + ']' + document.getElementById('name'+i).value + ';';");
client.println(" }");
client.println(" var txt = \'/NOMS='+ tx +'\';");
client.println(" window.location.href=txt;");
client.println(" }");
client.println(" <!-- -------------------------------------- -->");
client.println(" function efface()");
client.println(" {");
client.println(" window.location.href=\'/EFFACE=oui\';");
client.println(" }");
client.println(" <!-- -------------------------------------- -->");
client.println(" function data()");
client.println(" {");
client.println(" window.location.href=\'/DATA=oui\';");
client.println(" }");
client.println(" <!-- -------------------------------------- -->");
client.println(" function config()");
client.println(" {");
client.println(" window.location.href=\'/CONFIG=oui\';");
client.println(" }");
client.println(" <!-- -------------------------------------- -->");
client.println(" function variables()");
client.println(" {");
client.println(" window.location.href=\'/VARIABLES=oui\';");
client.println(" }");
client.println(" <!-- -------------------------------------- -->");
client.println(" function graph()");
client.println(" {");
client.println(" window.location.href=\'/GRAPH=oui\';");
client.println(" }");
client.println(" </script>");
client.println(" <!-- §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ -->");
}
/* #########################################################################################
* P A G E W E B I I (data)
* ######################################################################################### */
void html2() {
// String lien = "http://" + wifiIP;
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html; charset=UTF-8");
client.println("");
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<style>");
// client.println("table, td, th {");
// client.println("border: 1px solid black;");
// client.println("}");
client.println("#table2 {");
client.println("border-collapse: collapse;");
client.println("}");
client.println("</style>");
// client.println("<META HTTP-EQUIV=\'Refresh\' CONTENT=\'" + String(RefresHTML) + "; URL=' + wifiIP + '\'>");
client.println("<title>Infos Maison</title>");
client.println("</head>");
client.println("<body style='background-color:#5DADE2;'>");
client.println("<center>");
client.println("<font size='7'>Températures enregistrées</font>");
client.println("<br><input type='button' value='Page principale' onclick=\'retour()\'>");
client.println("</center>");
client.println("<font size='5'>");
client.println("<br><br>");
client.println("");
File myFile;
String ligne = "";
myFile = SD.open("mesures.txt", FILE_READ);
while (myFile.available()) {
char a = myFile.read();
if (a == '\n') {
//Serial.println(ligne);
client.println(ligne);
client.println("<br>");
ligne = "";
} else {
ligne += a;
}
}
myFile.close();
client.println("<input type='button' value='Page principale' onclick=\'retour()\'>");
client.println("</center>");
client.println("<br><br>");
client.println("</font>");
client.println("<font size='1'>");
client.println("<span style='float: right'>H. Deconchat 2022</span>");
client.println("</font>");
client.println("</body>");
client.println("</html>");
client.println(" <!-- §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ -->");
client.println(" <script type=\"text/javascript\">");
client.println(" <!-- -------------------------------------- -->");
client.println(" function retour()");
client.println(" {");
client.println(" window.location.href=\'/RETOUR=oui\';");
client.println(" }");
client.println(" </script>");
client.println(" <!-- §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ -->");
}
/* #########################################################################################
* P A G E W E B I I I (config)
* ######################################################################################### */
void html3() {
// String lien = "http://" + wifiIP;
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html; charset=UTF-8");
client.println("");
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<style>");
// client.println("table, td, th {");
// client.println("border: 1px solid black;");
// client.println("}");
client.println("#table2 {");
client.println("border-collapse: collapse;");
client.println("}");
client.println("</style>");
client.println("<html lang='fr'>");//<META HTTP-EQUIV=\'Refresh\' CONTENT=\'" + String(RefresHTML) + "; URL=' + wifiIP + '\'>");
client.println("<title>Infos Maison</title>");
client.println("</head>");
client.println("<body style='background-color:#5DADE2;'>");
client.println("<center>");
client.println("<font size='7'>Configuration</font>");
client.println("<br><input type='button' value='Page principale' onclick=\'retour()\'>");
client.println("</center>");
client.println("<font size='5'>");
client.println("<br><br>");
client.println("");
File myFile;
String ligne = "";
myFile = SD.open("config.ini", FILE_READ);
while (myFile.available()) {
char a = myFile.read();
if (a == '\n') {
//Serial.println(ligne);
client.println(ligne);
client.println("<br>");
ligne = "";
} else {
ligne += a;
}
}
myFile.close();
client.println("</center>");
client.println("<br><br>");
client.println("</font>");
client.println("<font size='1'>");
client.println("<span style='float: right'>H. Deconchat 2022</span>");
client.println("</font>");
client.println("</body>");
client.println("</html>");
client.println(" <!-- §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ -->");
client.println(" <script type=\"text/javascript\">");
client.println(" <!-- -------------------------------------- -->");
client.println(" function retour()");
client.println(" {");
client.println(" window.location.href=\'/RETOUR=oui\';");
client.println(" }");
client.println(" </script>");
client.println(" <!-- §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ -->");
}
/* #########################################################################################
* P A G E W E B I I I I (variables)
* ######################################################################################### */
void html4() {
// String lien = "http://" + wifiIP;
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html; charset=UTF-8");
client.println("");
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<style>");
// client.println("table, td, th {");
// client.println("border: 1px solid black;");
// client.println("}");
client.println("#table2 {");
client.println("border-collapse: collapse;");
client.println("}");
client.println("</style>");
client.println("<html lang='fr'>");//<META HTTP-EQUIV=\'Refresh\' CONTENT=\'" + String(RefresHTML) + "; URL=' + wifiIP + '\'>");
client.println("<title>Infos Maison</title>");
client.println("</head>");
client.println("<body style='background-color:#5DADE2;'>");
client.println("<center>");
client.println("<font size='7'>Variables</font>");
client.println("<br><input type='button' value='Page principale' onclick=\'retour()\'>");
client.println("</center>");
client.println("<font size='5'>");
client.println("<br><br>");
client.println("");
client.println("WIFI : " + String(ssid) + "<br>");
client.println("WIFI Mot de passe : " + String(pass) + "<br>");
client.println("IP Serveur : " + String(IPServeur) + "<br>");
client.println("Serveur de temps : " + String(ServeurTemps) + "<br>");
client.println("Rafraichissement HTML sec : " + String(RefresHTML) + "<br>");
client.println("Tempo : " + String(tempo) + "<br>");
client.println("[0] : " + valeurs[0][0] + "<br>");
client.println("[1] : " + valeurs[1][0] + "<br>");
client.println("[2] : " + valeurs[2][0] + "<br>");
client.println("[3] : " + valeurs[3][0] + "<br>");
client.println("[4] : " + valeurs[4][0] + "<br>");
client.println("[5] : " + valeurs[5][0] + "<br>");
client.println("<br><br>");
client.println("<center>");
client.println("<font size='5'>Fichier de configuration</font><br>");
client.println("</center>");
File myFile;
String ligne = "";
myFile = SD.open("config.ini", FILE_READ);
while (myFile.available()) {
char a = myFile.read();
if (a == '\n') {
//Serial.println(ligne);
client.println(ligne);
client.println("<br>");
ligne = "";
} else {
ligne += a;
}
}
myFile.close();
client.println("</center>");
client.println("<br><br>");
client.println("</font>");
client.println("<font size='1'>");
client.println("<span style='float: right'>H. Deconchat 2022</span>");
client.println("</font>");
client.println("</body>");
client.println("</html>");
client.println(" <!-- §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ -->");
client.println(" <script type=\"text/javascript\">");
client.println(" <!-- -------------------------------------- -->");
client.println(" function retour()");
client.println(" {");
client.println(" window.location.href=\'/RETOUR=oui\';");
client.println(" }");
client.println(" </script>");
client.println(" <!-- §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ -->");
}
/* #########################################################################################
* P A G E W E B I I I I (variables)
* ######################################################################################### */
void html5() {
client.println(" <!DOCTYPE HTML>");
client.println(" <html>");
client.println(" <head>");
client.println(" <style>");
client.println(" #graphe {");
client.println(" width: 100%;");
client.println(" aspect-ratio : 9 / 4;");
client.println(" border: 1px solid black;");
client.println(" background-color: white;");
client.println(" position:relative;");
client.println(" }");
client.println(" .voie0 { ");
client.println(" border-color: green;");
client.println(" }");
client.println(" .voie1 { ");
client.println(" border-color: blue;");
client.println(" }");
client.println(" .cercle {");
client.println(" transform: translate(-2px,-2px);");
client.println(" width: 4px;");
client.println(" height: 4px;");
client.println(" border-radius: 20px;");
client.println(" position: absolute;");
client.println(" display: block;");
client.println(" border-width: 1px;");
client.println(" border-style: solid;");
client.println(" background-color: border-color;");
client.println(" }");
client.println(" .cercle:hover {");
client.println(" transform: translate(-15px,-15px);");
client.println(" -webkit-transform:scale(2.5); /* Safari et Chrome */");
client.println(" -moz-transform:scale(2.5); /* Firefox */");
client.println(" -ms-transform:scale(2.5); /* Internet Explorer 9 */");
client.println(" -o-transform:scale(2.5); /* Opera */");
client.println(" transform:scale(2.5);");
client.println(" }");
client.println(" .horizontal {");
client.println(" width: calc(100% - 70px);");
client.println(" left: 35px;");
client.println(" position: absolute;");
client.println(" display: block;");
client.println(" background: black;");
client.println(" border-width: 1px;");
client.println(" }");
client.println(" .vertical {");
client.println(" width: 1px;");
client.println(" position: absolute;");
client.println(" display: block;");
client.println(" background: black;");
client.println(" }");
client.println(" .miniMax{");
client.println(" width: 8px;");
client.println(" position: absolute;");
client.println(" display: block;");
client.println(" border-width: 2px;");
client.println(" border-style: solid none solid solid;");
client.println(" transform: translate(-5px,0px);");
client.println(" }");
client.println(" .texte {");
client.println(" position: absolute;");
client.println(" display: block;");
client.println(" }");
client.println(" .trait {");
client.println(" position: absolute;");
client.println(" display: block;");
client.println(" height: 1px;");
client.println(" border-width: 1px;");
client.println(" transform-origin: left top;");
client.println(" border-style: dashed none none none;");
client.println(" background: none;");
client.println(" border-width: 1px;");
client.println(" }");
client.println(" .verti {");
client.println(" transform-origin: top left;");
client.println(" transform:rotate(270deg);");
client.println(" -ms-transform:rotate(270deg); /* Internet Explorer */");
client.println(" -moz-transform:rotate(270deg); /* Firefox */");
client.println(" -webkit-transform:rotate(270deg); /* Safari et Chrome */");
client.println(" -o-transform:rotate(270deg); /* Opera */");
client.println(" }");
client.println(" </style>");
client.println(" <html lang='fr'>");
client.println(" <title>Infos Maison</title>");
client.println(" </head>");
client.println(" <body id='graaphe' style='background-color:#5DADE2;'>");
client.println(" <input type='button' value='Page principale' onclick=\'retour()\'>");
client.println(" <div style='height: 10% width: 100%'>");
client.println(" <center>");
client.println(" <font size='7'>Graphique</font>");
client.println(" </center>");
client.println(" </div>");
client.println(" <div id=graphe>");
client.println(" </div>");
client.println(" </body>");
client.println(" </html>");
client.println(" <!-- §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ -->");
client.println(" <script type='text/javascript'>");
client.println(" var datas0 = [];");
client.println(" var datas1 = [];");
client.println(" var datas2 = [];");
client.println(" var datas3 = [];");
client.println(" var datas4 = [];");
client.println(" var datas5 = [];");
client.println(" var datas6 = [];");
client.println(" var datasX = [];");
client.println(" var iiDebut;");
client.println(" var yMax = -999;");
client.println(" var yMin = 999;");
client.println(" /* datas */ {");
for (byte n = 0; n<6; n++) {
if (valeurs[n][0]!="libr") {
File myFile;
String ligne = "";
myFile = SD.open("mesures.txt", FILE_READ);
while (myFile.available()) {
char a = myFile.read();
if (a == '\n') {
byte voie = ligne.substring(1, ligne.indexOf("]")).toInt();
String horo = ligne.substring(ligne.indexOf("]")+1, ligne.indexOf(" ("));
unsigned int tmp = ligne.substring(ligne.indexOf("(")+1, ligne.indexOf(")")).toInt();
String txt = ligne.substring(ligne.indexOf(")")+1, ligne.indexOf(" :"));
int valeur = ligne.substring(ligne.indexOf(" : ")+3, 255).toInt();
if (voie == n) {
client.println(" addPoint('" + String(n) + "', '" + horo + "', " + valeur/10 + ");");
}
ligne = "";
} else {
ligne += a;
}
}
myFile.close();
}
}
client.println(" }");
client.println(" // fin des datas");
client.println(" affichesLesPoints(100,0);");
client.println(" <!-- -------------------------------------- -->");
client.println("function addPoint(n, x, y) {");
client.println(" if (n == 0) { datas0.push([n,x,y]); }");
client.println(" if (n == 1) { datas1.push([n,x,y]); }");
client.println(" if (y > yMax) { yMax = y; }");
client.println(" if (y < yMin) { yMin = y; }");
client.println(" var date = strToDateUS(x);");
client.println(" if (datasX.includes(date) == false ) { datasX.push(date); } ");
client.println(" }");
client.println("function strToDateUS(dtStr) {");
client.println(" let dt = dtStr.split(' ');");
client.println(" let dateParts = dt[0].split('/');");
client.println(" return dateParts[2]+'/'+dateParts[1]+'/'+dateParts[0]+' '+dt[1];");
client.println(" }");
client.println("function affichesLesPoints(ii0, ii1) {");
client.println(" var eff = document.getElementsByClassName('efface');");
client.println(" for (var i=eff.length-1 ; i>-1 ; i--) { eff[i].remove(); }");
client.println(" if (ii0>ii1) {");
client.println(" ii0 = 0;");
client.println(" ii1 = datasX.length;");
client.println(" }");
client.println(" yMax = -999;");
client.println(" yMin = 999;");
client.println(" miniMaxi(datas0, ii0, ii1);");
client.println(" miniMaxi(datas1, ii0, ii1);");
client.println(" if (yMin > 0) { yMin =0 ;}");
client.println(" ligneHorizontal(0, 3);");
client.println(" for (var y=yMin-9; y<yMax+9; y++) { if (y%10 == 0) { ligneHorizontal(y, 1); } }");
client.println(" placeLesPoints(datas0, ii0, ii1);");
client.println(" placeLesPoints(datas1, ii0, ii1);");
client.println("}");
client.println("function miniMaxi(datas, i0, i1) {");
client.println(" for (var i = i0; i < i1; i++) {");
client.println(" for (var ii = 0; ii < datas.length; ii++) {");
client.println(" if (datasX[i] == strToDateUS(datas[ii][1])) {");
client.println(" var y = datas[ii][2];");
client.println(" if (y > yMax) { yMax = y; }");
client.println(" if (y < yMin) { yMin = y; }");
client.println(" }");
client.println(" }");
client.println(" }");
client.println("}");
client.println("function placeLesPoints(datas, i0, i1) {");
client.println(" var x0=-9999;");
client.println(" var y0=0;");
client.println(" var de;");
client.println(" var a;");
client.println(" var max = -1000;");
client.println(" var min = 1000;");
client.println(" var somme = 0;");
client.println(" var total = yMax-yMin+10;");
client.println(" var k = parseInt((i1-i0) / 50);");
client.println(" if (k<1) { k=1; }");
client.println(" for (var i = i0; i < i1; i++) {");
client.println(" for (var ii = 0; ii < datas.length; ii++) {");
client.println(" if (datasX[i] == strToDateUS(datas[ii][1])) {");
client.println(" a = datas[ii][2];");
client.println(" if (a>max) { max = a; }");
client.println(" if (a<min) { min = a; }");
client.println(" somme += a;");
client.println(" if (i%k == 0) {");
client.println(" var moyenne = somme;");
client.println(" if (i>0) { moyenne = somme/k; }");
client.println(" var y = (80 - ((moyenne - yMin) * 80 / total));");
client.println(" var x = 4 + (ii-i0) * 93 / ((i1-i0)+0);");
client.println(" ligneVertical(x, (datas[ii][1]), ii);");
client.println(" if (k>1 && min<max) { ");
client.println(" miniMax(yEgal(min, yMin, total), yEgal(max, yMin, total), x, datas[ii][0], 'de '+ min + ' à ' + max);");
client.println(" }");
client.println(" if (x0 != -9999) { ");
client.println(" trait(x0, y0, x, y, datas[ii][0], de, a);");
client.println(" }");
client.println(" point(datas[ii][0], datas[i][1], moyenne, x, y);");
client.println(" ");
client.println(" x0 = x;");
client.println(" y0 = y;");
client.println(" de = a;");
client.println(" max = -1000;");
client.println(" min = 1000;");
client.println(" somme = 0;");
client.println(" }");
client.println(" }");
client.println(" }");
client.println(" }");
client.println("}");
client.println("function yEgal(nb, yMin, total) { return (80 - ((nb - yMin) * 80 / total)); }");
client.println("function point(voie, date, temp, x, y) {");
client.println(" var point = document.createElement('div');");
client.println(" point.id = 'Courbe ' + voie + ' le ' + strToDateUS(date);");
client.println(" point.className = 'efface voie' + voie + ' cercle';");
client.println(" point.title = 'Courbe ' + voie + ' le ' + date + ' Temp : ' + temp + '°C';");
client.println(" point.style.top = y + '%';");
client.println(" point.style.left = x + '%'");
client.println(" document.getElementById('graphe').appendChild(point);");
client.println("}");
client.println("function trait(x0, y0, x1, y1, voie, de, a) {");
client.println(" const oGraphe = document.getElementById('graphe');");
client.println(" const H_GRAPH = oGraphe.offsetHeight;");
client.println(" const W_GRAPH = oGraphe.offsetWidth;");
client.println(" const RAPPORT_XY = W_GRAPH / H_GRAPH;");
client.println(" var y = 0;");
client.println(" var ligne = document.createElement('div');");
client.println(" ligne.title = 'de ' + de + ' à ' + a + '°C';");
client.println(" ligne.className = 'efface voie' + voie+ ' trait';");
client.println(" ligne.style.left = x0 + '%';");
client.println(" ligne.style.top = y0 + '%';");
client.println(" ");
client.println(" var ab = x1-x0;");
client.println(" var bc = y1-y0;");
client.println(" if (y1<y0) { bc = y0-y1; }");
client.println(" bc /= RAPPORT_XY;");
client.println(" var hypo = Math.sqrt(ab * ab + bc * bc);");
client.println(" ");
client.println(" ligne.style.width = hypo + '%';");
client.println(" ");
client.println(" var ang = Math.acos(ab / hypo);");
client.println(" if (y0<y1) { ligne.style.transform = 'rotate('+ang+'rad)'; } ");
client.println(" else { ligne.style.transform = 'rotate(-'+ang+'rad)'; }");
client.println(" ");
client.println(" document.getElementById('graphe').appendChild(ligne);");
client.println("} ");
client.println("function ligneHorizontal(vvY, n) {");
client.println(" var total = yMax-yMin+10;");
client.println(" var ligne = document.createElement('div')");
client.println(" ligne.id = 'valeur' + vvY;");
client.println(" ligne.className = 'efface horizontal';");
client.println(" ligne.title = 'Y=' + vvY;");
client.println(" document.getElementById('graphe').appendChild(ligne);");
client.println(" var h = (80 - ((vvY - yMin) * 80 / total));");
client.println(" ligne.style.top = h + '%';");
client.println(" ligne.style.height = n + 'px';");
client.println(" ");
client.println(" var txt = document.createElement('div');");
client.println(" txt.innerText = vvY;");
client.println(" txt.className = 'efface texte';");
client.println(" document.getElementById('graphe').appendChild(txt);");
client.println(" txt.style.top = h-2 + '%';");
client.println("}");
client.println("function miniMax(mini, maxi, x, voie, titre) {");
client.println(" var ligne = document.createElement('div')");
client.println(" ligne.className = 'efface miniMax voie' + voie;");
client.println(" document.getElementById('graphe').appendChild(ligne);");
client.println(" ligne.style.top = maxi + '%';");
client.println(" ligne.style.height = mini-maxi + '%';");
client.println(" ligne.style.left = x + '%';");
client.println(" ligne.title = titre;");
client.println("} ");
client.println("function ligneVertical(vvX, date, ii) {");
client.println(" var ligne = document.createElement('div')");
client.println(" ligne.id = 'date' + date;");
client.println(" ligne.className = 'efface vertical';");
client.println(" ligne.title = date;");
client.println(" document.getElementById('graphe').appendChild(ligne);");
client.println(" ligne.style.top = 1 + '%';");
client.println(" ligne.style.height = '82%';");
client.println(" ligne.style.left = vvX + '%';");
client.println(" ");
client.println(" var txt = document.createElement('div');");
client.println(" txt.innerText = date.split(' ')[0];");
client.println(" txt.title = date;");
client.println(" txt.className = 'efface texte verti';");
client.println(" document.getElementById('graphe').appendChild(txt);");
client.println(" txt.style.top = 98 + '%';");
client.println(" txt.style.left = vvX + '%';");
client.println(" txt.onmousedown = function(){");
client.println(" console.log(ii);");
client.println(" iiDebut = ii;");
client.println(" }");
client.println(" txt.onmouseup = function(){");
client.println(" console.log(' ==> ' + ii);");
client.println(" affichesLesPoints(iiDebut, ii);");
client.println(" }");
client.println("}");
client.println(" function retour()");
client.println(" {");
client.println(" window.location.href=\'/RETOUR=oui\';");
client.println(" }");
client.println(" </script>");
client.println(" <!-- §§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§§ -->");
}