Serveur Web interactif non fonctionnel

Bonjour a tous,

je profite de ce confinement pour me mettre au développement Arduino. (Sur ESP32)
j'ai suivi les tutos, fais mes premiers essais.
Jusqu'a aujourd'hui cela se déroulait bien.

Je me suis lancé dans un petit serveur Web interactif.
en gros on clic sur le lien dans le site web et ca allume la Led sur le/la breadboard.
j'ai commencé par 1 led, Puis 2.
j'ai voulu en ajouté une troisième et la j'ai une erreur que je ne comprends pas.

j'ai juste copier/coller les différents arguments (comme j'ai fait de 1 led à 2)
mais cela ne fonctionne pas de 2 à 3 : Etrange.

j'ai ca comme erreur quand je fais la validation de mon code

Ligne 139 surligneur
server.send(200, "text/html", SendHTML(LED3status,false));

Code Erreur :

/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino: In function 'void handle_OnConnect()':
Server_web_led:103:63: error: too few arguments to function 'String SendHTML(uint8_t, uint8_t, uint8_t)'
   server.send(200, "text/html", SendHTML(LED1status,LED2status));
                                                               ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino:146:8: note: declared here
 String SendHTML(uint8_t led1stat,uint8_t led2stat,uint8_t led3stat){
        ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino: In function 'void handle_led1on()':
Server_web_led:109:57: error: too few arguments to function 'String SendHTML(uint8_t, uint8_t, uint8_t)'
   server.send(200, "text/html", SendHTML(true,LED2status)); 
                                                         ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino:146:8: note: declared here
 String SendHTML(uint8_t led1stat,uint8_t led2stat,uint8_t led3stat){
        ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino: In function 'void handle_led1off()':
Server_web_led:115:58: error: too few arguments to function 'String SendHTML(uint8_t, uint8_t, uint8_t)'
   server.send(200, "text/html", SendHTML(false,LED2status)); 
                                                          ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino:146:8: note: declared here
 String SendHTML(uint8_t led1stat,uint8_t led2stat,uint8_t led3stat){
        ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino: In function 'void handle_led2on()':
Server_web_led:121:57: error: too few arguments to function 'String SendHTML(uint8_t, uint8_t, uint8_t)'
   server.send(200, "text/html", SendHTML(LED1status,true)); 
                                                         ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino:146:8: note: declared here
 String SendHTML(uint8_t led1stat,uint8_t led2stat,uint8_t led3stat){
        ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino: In function 'void handle_led2off()':
Server_web_led:127:58: error: too few arguments to function 'String SendHTML(uint8_t, uint8_t, uint8_t)'
   server.send(200, "text/html", SendHTML(LED1status,false)); 
                                                          ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino:146:8: note: declared here
 String SendHTML(uint8_t led1stat,uint8_t led2stat,uint8_t led3stat){
        ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino: In function 'void handle_led3on()':
Server_web_led:133:57: error: too few arguments to function 'String SendHTML(uint8_t, uint8_t, uint8_t)'
   server.send(200, "text/html", SendHTML(LED3status,true)); 
                                                         ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino:146:8: note: declared here
 String SendHTML(uint8_t led1stat,uint8_t led2stat,uint8_t led3stat){
        ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino: In function 'void handle_led3off()':
Server_web_led:139:58: error: too few arguments to function 'String SendHTML(uint8_t, uint8_t, uint8_t)'
   server.send(200, "text/html", SendHTML(LED3status,false)); 
                                                          ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino:146:8: note: declared here
 String SendHTML(uint8_t led1stat,uint8_t led2stat,uint8_t led3stat){

Voici mon code. si vous pouvez m'aider !
Merci d'avance

Mon code en PJ

Serveur_web_3led_Pb.ino (5.04 KB)

Tu vois ici :

String SendHTML(uint8_t led1stat, uint8_t led2stat, uint8_t led3stat){

que la fonction SendHTML attend 3 arguments, mais tu n'en mets que 2. D'où le problème de compilation.

Le compilo te le dit plusieurs fois:

Server_web_led:103:63: error: too few arguments to function 'String SendHTML(uint8_t, uint8_t, uint8_t)'

J'en mets bien 3 ici ? ligne 148
String SendHTML(uint8_t led1stat, uint8_t led2stat, uint8_t led3stat){

ou c'est uint8_t=1 argument, led1stat = 1 argument , donc l en manque 1 ?
c'est ca ?
du coup je mets quoi ?
y'a un truc qui m'échappe !

salut ,

les arguments se nomme " led X stat " ca a l ' air de correspondre a l ' etat du pin de chaque led .

il faut mettre pour le 3eme argument la meme chose que dans les 2 premiers avec juste le numero qui change :stuck_out_tongue:

il faut en mettre 3 a chaque appel de la fonction , puisque la fonction est defini avec 3 arguments ( ou bien en mettre un dans la definition de la fonction avec une valeur par defaut ).

il faut modifier tous les appels a la fonction sendHTML et y donner 3 arguments .

par exemple a l' interieur de la fonction :

void handle_OnConnect() {
  LED1status = LOW;
  LED2status = LOW;
  LED3status = LOW;
  Serial.println("GPIO4 Status: OFF | GPIO5 Status: OFF | GPIO19 Status: OFF" );
  server.send(200, "text/html", SendHTML(LED1status,LED2status));
 }

il faut remplacer par :

void handle_OnConnect() {
 LED1status = LOW;
 LED2status = LOW;
 LED3status = LOW;
 Serial.println("GPIO4 Status: OFF | GPIO5 Status: OFF | GPIO19 Status: OFF" );
 server.send(200, "text/html", SendHTML(LED1status,LED2status,LED3status));
}

et il y a d' autres endroits ou il y a le meme probleme a corriger .

Bonjour,

merci pour la réponse :
cependant il y a toujours trop peu d'argument dans certaines fonctions après correction des plus évidentes pour moi.
C'est ca que je ne comprends pas :

void handle_led3off() {
  LED3status = LOW;
  Serial.println("GPIO19 Status: OFF");
  server.send(200, "text/html", SendHTML(false,LED3status)); 
}

C'est la ligne SendHTMl qui ressort en erreur
Je souhaiterai vraiment comprendre pourquoi 2 ca fonctionne sans soucis et des que j'en met 3 il manque des arguments.

/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino: In function 'void handle_led1on()':
Server_web_led:109:57: error: too few arguments to function 'String SendHTML(uint8_t, uint8_t, uint8_t)'
   server.send(200, "text/html", SendHTML(true,LED2status)); 
                                                         ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino:146:8: note: declared here
 String SendHTML(uint8_t led1stat,uint8_t led2stat,uint8_t led3stat){
        ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino: In function 'void handle_led1off()':
Server_web_led:115:58: error: too few arguments to function 'String SendHTML(uint8_t, uint8_t, uint8_t)'
   server.send(200, "text/html", SendHTML(false,LED2status)); 
                                                          ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino:146:8: note: declared here
 String SendHTML(uint8_t led1stat,uint8_t led2stat,uint8_t led3stat){
        ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino: In function 'void handle_led2on()':
Server_web_led:121:57: error: too few arguments to function 'String SendHTML(uint8_t, uint8_t, uint8_t)'
   server.send(200, "text/html", SendHTML(true,LED1status)); 
                                                         ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino:146:8: note: declared here
 String SendHTML(uint8_t led1stat,uint8_t led2stat,uint8_t led3stat){
        ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino: In function 'void handle_led2off()':
Server_web_led:127:58: error: too few arguments to function 'String SendHTML(uint8_t, uint8_t, uint8_t)'
   server.send(200, "text/html", SendHTML(false,LED1status)); 
                                                          ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino:146:8: note: declared here
 String SendHTML(uint8_t led1stat,uint8_t led2stat,uint8_t led3stat){
        ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino: In function 'void handle_led3on()':
Server_web_led:133:57: error: too few arguments to function 'String SendHTML(uint8_t, uint8_t, uint8_t)'
   server.send(200, "text/html", SendHTML(true,LED3status)); 
                                                         ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino:146:8: note: declared here
 String SendHTML(uint8_t led1stat,uint8_t led2stat,uint8_t led3stat){
        ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino: In function 'void handle_led3off()':
Server_web_led:139:58: error: too few arguments to function 'String SendHTML(uint8_t, uint8_t, uint8_t)'
   server.send(200, "text/html", SendHTML(false,LED3status)); 
                                                          ^
/Users/benoit/Documents/Arduino/Server_web_led/Server_web_led.ino:146:8: note: declared here
 String SendHTML(uint8_t led1stat,uint8_t led2stat,uint8_t led3stat){

Finalement, j'ai trouvé ! et compris !!

Merci a tous pour le coup de main !

voila mes corrections qui posaient problème

void handle_led1on() {
  LED1status = HIGH;
  Serial.println("GPIO4 Status: ON");
  server.send(200, "text/html", SendHTML(true,LED2status,LED3status)); 
}

void handle_led1off() {
  LED1status = LOW;
  Serial.println("GPIO4 Status: OFF");
  server.send(200, "text/html", SendHTML(false,LED2status,LED3status)); 
}

void handle_led2on() {
  LED2status = HIGH;
  Serial.println("GPIO5 Status: ON");
  server.send(200, "text/html", SendHTML(true,LED1status,LED3status)); 
}

void handle_led2off() {
  LED2status = LOW;
  Serial.println("GPIO5 Status: OFF");
  server.send(200, "text/html", SendHTML(false,LED1status,LED3status)); 
}

void handle_led3on() {
  LED3status = HIGH;
  Serial.println("GPIO19 Status: ON");
  server.send(200, "text/html", SendHTML(true,LED1status,LED2status)); 
}

void handle_led3off() {
  LED3status = LOW;
  Serial.println("GPIO19 Status: OFF");
  server.send(200, "text/html", SendHTML(false,LED1status,LED2status)); 
}

il me reste juste a positionner correctement l'affichage des boutons !

Tu es sûr ?
Je pense que le true ou false doit être mis en position 'numéro de la led'

Ici par exemple

void handle_led3off() {
 LED3status = LOW;
 Serial.println("GPIO19 Status: OFF");
 server.send(200, "text/html", SendHTML(false,LED1status,LED2status));
}

Ça donnerait

void handle_led3off() {
 LED3status = LOW;
 Serial.println("GPIO19 Status: OFF");
 server.send(200, "text/html", SendHTML(LED1status,LED2status, false));
}

Du coup voici le code complet corrigé qui fonctionne parfaitement pour ceux que ca intéresse !

Serveur_web_3led_Pb.ino (5.11 KB)