Requête HTTP bouton (course de voiture)

Bonjour à tous!
Alors je vous explique le problème.

Je suis sur un projet course et enfaîte gros somodo pour mon départ de course j’ai un bouton start, et je voudrais que ce bouton quand j’appuis dessus il envoie une requête au serveur (externe qui se trouve dans une autre salle de mon entreprise) , par exemple dans mon serveur pour faire un test si sa fonctionne j’ai mis un “/test” et dans les lignes de commande il me donne la réponse “ça marche” (screen ci-dessous) et moi je voudrais que mon bouton prenne cette requête et donc quand j’appuis sur le bouton ça m’affiche “ça marche” donc je veux que ça passe directement sur le serveur.

Pouvez-vous m’aider?
Merci beaucoup d’avance , ça me sauverais vraiment !!

Pour l’instant j’ai un code de ce genre mais il ne fonctionne pas du tout…

#include <SPI.h>
#include <Ethernet2.h>

IPAddress server(192,168,5,144);  
EthernetClient client;
int bouton=8;

void setup() {
   pinMode(bouton,INPUT);
 
}

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("Deconnexion");
    client.stop();

    while (true);
  }
  bouton1;
  }

void bouton1(){
  int val=digitalRead(bouton);
  if(val==LOW){
    connexion;
  }}
  
void connexion(){
   Serial.println("Connexion");

  if (client.connect(server, 9000)) {
    Serial.println("Connexion avec le serveur etabli");
    client.println("POST /test HTTP/1.1");//
    client.println("Host: 192.168.5.144");//
    client.println();
while ( client.available() )
      Serial.print( client.read() );
      Serial.println();
  } 
  else {
    Serial.println("Echec de la connexion");
  }}

Il y a plusieurs erreurs au niveau de la structure de code. Des accolades ouvrantes à la place de fermantes ({,}), des accolades oubliées, etc.
Par exemple je pense que la fonction bouton1() n'est jamais appelée.

Ah bon? je ne vois pas ... Peux-tu me corriger mon programme s'il te plaît ? Et si il y a des choses qui vont pas tu peux les changer :wink:

Sinon as-tu une idée de comment ou tu penses que je suis sur la bonne voie?

Merci de ta réponse

While s'utilise avec des instructions, tout comme une fonction.
C'est à dire que ta fonction loop devrait ressembler à ça:

void loop(){
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }
  if (!client.connected()) {
    Serial.println();
    Serial.println("Deconnexion");
    client.stop();
    while (true){
      bouton1();
    }
}

Ou alors, si bouton1 doit être appelée après le test de la connexion,

...
  if (!client.connected()) {
    Serial.println();
    Serial.println("Deconnexion");
    client.stop();
  }
  bouton1();

A ce moment-là while ne sert à rien. Note que si ta boucle while(true){} ne contient pas une fonction d'échappement, elle sera infinie, c'est à dire que tu n'en sortira jamais. En l'occurrence, puisque "true" est par définition vrai, c'est le cas. La boucle loop() ne sera éxecutée qu'une fois, puisqu'arrivée à cette boucle while elle "bloquera" dessus.

A noter que bouton1() est une fonction, et qu'une fonction doit être appelée avec des parenthèses, même si il ne lui est pas passé d'arguments.

La documentation arduino.

Du coup, la boucle while de la fonction connexion() devrait être aussi munie d'accolades. Je suppose que les deux lignes qui la suivent y sont liées, on devrait donc avoir ceci:

void connexion(){
   Serial.println("Connexion");

  if (client.connect(server, 9000)) {
    Serial.println("Connexion avec le serveur etabli");
    client.println("POST /test HTTP/1.1");//
    client.println("Host: 192.168.5.144");//
    client.println();
    while ( client.available() ){
      Serial.print( client.read() );
      Serial.println();
    }
  } else {
    Serial.println("Echec de la connexion");
  }
}

Concernant la communication par Ethernet, je n'ai aucune expérience de la question. Il va donc falloir faire des recherches... :wink:

Merci de m’avoir aidé ! :wink:
Je vais voir si ça marche :slight_smile:

Et admettons que je part de ce programme

#include <SPI.h>
#include <Ethernet2.h>


byte mac[] = { 0x90, 0xA2, 0xDA, 0x10, 0x7A, 0x68 };
IPAddress server(192,168,x,x);  // numeric IP for Google (no DNS)


IPAddress ip(192, 168, x, x);
EthernetClient client;

void setup() {
  Serial.begin(9600);
  while (!Serial) {
    ; 
  }

  
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac, ip);
  }
  
  delay(1000);
  Serial.println("connecting...");

  
  if (client.connect(server, 9000)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /test HTTP/1.1");
    client.println("Host: 192.168.x.x");
    client.println("Connection: close");
    client.println();
  }
  else {
    
    Serial.println("connection failed");
  }
}

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    while (true);
  }
}

, comment je peux le transformer pour que mon bouton envoie la requête au lieu de taper mon adresse ip dans l’url?