Suite a un poste précédent, " DS3231 insertion variable dans commande ", J-M-L m'avais appris a faire attention au type de variable utilisée.
usage ce char a la place de String etc..
Ici je vais employer un byte comme drapeau dans mon programme.
avant le setup je déclare byte messagetype;
dans ma loop la valeur de messagetype passe a 1 2 3 ou 4 en fonction du message qui sera envoyé.
enfin dans un void message() {}
je vérifie messagetype avec de if
if (mesagetype == 1) {
....
}
et ce pour les 4 message possible.
Bon la ou vraiment je me questionne c'est qu'a chaque if l'espace des variables globales augmente de presque 2%
un case ??? consomme moins ???
et pourquoi avec if sa augmente je n'emploie pourtant qu'une même variable ???
Le croquis utilise 656 octets (0%) de l'espace de stockage de programmes. Le maximum est de 253 952 octets.
[color=red]Les variables globales utilisent 9 octets[/color] (0%) de mémoire dynamique, ce qui laisse 8 183 octets pour les variables locales. Le maximum est de 8 192 octets.
je peux rajouter autant de if que je veux, je reste avec 9 octets de variables globales.
Le croquis utilise 656 octets (0%) de l'espace de stockage de programmes. Le maximum est de 253 952 octets.
[color=red]Les variables globales utilisent 9 octets[/color] (0%) de mémoire dynamique, ce qui laisse 8 183 octets pour les variables locales. Le maximum est de 8 192 octets.
Voila le code tout a la fin dans void Mail() ; j'ai mis un /* au début du second if et */ a la fin du dernier si je le met pas ma différence est celle ci :
Le croquis utilise 15.960 octets (51%) de l'espace de stockage de programmes. Le maximum est de 30.720 octets.
Les variables globales utilisent 1.631 octets (79%) de mémoire dynamique, ce qui laisse 417 octets pour les variables locales. Le maximum est de 2.048 octets.
La mémoire disponible faible, des problèmes de stabilité pourraient survenir.
Le croquis utilise 15.584 octets (50%) de l'espace de stockage de programmes. Le maximum est de 30.720 octets.
Les variables globales utilisent 1.423 octets (69%) de mémoire dynamique, ce qui laisse 625 octets pour les variables locales. Le maximum est de 2.048 octets.
Merci de votre aide !!!
Ps J-M-L ne me tue pas STP
Restons sur ma question S'il vous plais et une fois cela réglé je prend toutes les critiques volontier sur le code cela me fera évoluer
Si Quelqu'un le désire une fois le système fini dans sa totalité et le code allégé je ferai un poste dans les projet fini.
Il y a beaucoup de matière usage du NEXTION HMI, ESP8266 01, Interface Android, Arduino Nano, Detecteur d'intrusion filaire Envoie de Mail via ESP , reglage de l'heure via Nextion soit un an de travail le weekend et un peu en semaine !!!
c'est parce que dans la partie en commentaire vous avez des chaines de caractères, il faut bien qu'il les range quelque part.
{
ESP8266.println("[color=red]AT+CIPSEND=4,56[/color]"); // a changer pour text
delay(2000);
ESP8266.println("[color=red]Alarme Intrusion VERROUILLER envoie via Alarme ESP8266[/color]");
delay (4000);
}
if (messagetype == 3)
{
ESP8266.println([color=red]"AT+CIPSEND=4,58"[/color]); // a changer pour text
delay(2000);
ESP8266.println([color=red]"Alarme Intrusion DEVERROUILLER envoie via Alarme ESP8266"[/color]);
delay (4000);
}
if (messagetype == 4)
{
ESP8266.println([color=red]"AT+CIPSEND=4,49"[/color]); // a changer pour text
delay(2000);
ESP8266.println([color=red]"Alarme Intrusion TEST envoie via Alarme ESP8266"[/color]);
delay (4000);
}
tout ça prend de la mémoire
1.631 octets versus 1.423 octets c'est 208 octets qui est tout à fait compatible avec toutes les chaines de caractères ajoutées
faudrait utiliser la notation F() pour mettre les chaînes en mémoire programme éventuellement (cf PROGMEM)
il y a aussi bcp de parties dupliquées, au lieu d'envoyer toute la phrase d'un coup vous pourriez faire part petit bouts du genre:
ESP8266.print("AT+CIPSEND=4,");
ESP8266.println(longeurDuMessage); // 56,58 ou 49 en fonction du cas
et en stockant une seule fois en mémoire "AT+CIPSEND=4," bien sûr vous allez réduire
idem pour
"Alarme Intrusion"
"envoie via Alarme ESP8266"
vous n'avez que le mot VERROUILLER, DEVERROUILLER ou TEST qui change mais vous avez déclaré 3 buffer mémoires avec bcp de caractères en commun
ESP8266.print("Alarme Intrusion ");
ESP8266.print(leMotCleDuMessage); // VERROUILLER, DEVERROUILLER ou TEST
ESP8266.println(" envoie via Alarme ESP8266");
vous ferait gagner de la place mémoire
avec des if bien placés vous pouvez "factoriser" en envoyer ce qui est commun une seule fois et n'envoyer que les différences suivant le cas