Controllo robot con esp32

Salve a tutti, sto sviluppando un progetto di controllo di un robot su ruote controllato da arduino, a suo volta controllato con un interfaccia web su un esp32 heltec.

Innanzitutto vi mostro il codice:
-Esp32

#include "WiFi.h"
#include "heltec.h"

const char* ssid = "wifi";
const char* password =  "passwordwifi";
WiFiServer server(80);

// Assign output variables to GPIO pins
const int Forward = 22;
const int Backward = 19;
const int Left = 23;
const int Right = 18;
const int Stop = 5;

const int AddTen = 17;
const int RemTen = 16;

int Speed=100;

const int Out=4;
const int In=5;
int val=0;


void setup() {
  // Start all
  Serial.begin(9600);

  Heltec.begin(true /*DisplayEnable Enable*/, false /*LoRa Enable*/, true /*Serial Enable*/);

  // Initialize the output variables as outputs
  pinMode(Forward, OUTPUT);
  pinMode(Backward, OUTPUT);
  pinMode(Left, OUTPUT);
  pinMode(Right, OUTPUT);
  pinMode(Stop,OUTPUT);
  pinMode(AddTen, OUTPUT);
  pinMode(RemTen, OUTPUT);
  // Set outputs to LOW
  digitalWrite(Forward, LOW);
  digitalWrite(Backward, LOW);
  digitalWrite(Left, LOW);
  digitalWrite(Right, LOW);


  // Connect to Wi-Fi network with SSID and password
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  // Print local IP address and start web server
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  server.begin();
  Heltec.display -> clear();
  Heltec.display -> drawString(1, 1, (String)(Speed));
  Heltec.display -> display();
}

void loop(){
  WiFiClient client = server.available();   // Listen for incoming clients
  
  // Connect, verify connection and get data
  if (client) {                             // If a new client connects,
    
    Serial.println("New Client.");          // print a message out in the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    while (client.connected()) {            // loop while the client's connected

      Heltec.display -> clear();
      Heltec.display -> drawString(x, 1, String(Speed));
      Heltec.display -> display(); 
      }
      
      if (client.available()) {             // if there's bytes to read from the client,
        
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        currentLine.concat(c);
        if (c == '\n') { //se arrivo a fine riga
          
          if(currentLine.indexOf("/Forward/1")>0) { //controllo che nell'url ci sia led=1
            digitalWrite(Forward, HIGH); //se c'è accendo il led
          }
          else {
            digitalWrite(Forward, LOW); //altrimenti spengo il led
          }
          if(currentLine.indexOf("/Backward/1")>0) { //controllo che nell'url ci sia led=1
             digitalWrite(Backward, HIGH); //se c'è accendo il led
          }
          else {
            digitalWrite(Backward, LOW); //altrimenti spengo il led
          }
          
          if(currentLine.indexOf("/Left/1")>0) { //controllo che nell'url ci sia led=1
            digitalWrite(Left, HIGH); //se c'è accendo il led
          }
          else {
            digitalWrite(Left, LOW); //altrimenti spengo il led
          }
          
          if(currentLine.indexOf("/Right/1")>0) { //controllo che nell'url ci sia led=1
            digitalWrite(Right, HIGH); //se c'è accendo il led
          }
          else {
            digitalWrite(Right, LOW); //altrimenti spengo il led
          }
          
          
          if(currentLine.indexOf("/Stop/1")>0) { //controllo che nell'url ci sia led=1
            digitalWrite(Stop, HIGH); //se c'è accendo il led
          }
          else {
            digitalWrite(Stop, LOW); //se c'è accendo il led
          }
          
           
          if(currentLine.indexOf("/Adder/10")>0) { //controllo che nell'url ci sia led=1
            digitalWrite(AddTen, HIGH); //se c'è accendo il led
            Speed=Speed+10;
          }
          else {
            digitalWrite(AddTen, LOW); //se c'è accendo il led
          }
          
          if(currentLine.indexOf("/Remover/10")>0) { //controllo che nell'url ci sia led=1
            digitalWrite(RemTen, HIGH); //se c'è accendo il led
            Speed=Speed-10;
          }
          else {
            digitalWrite(RemTen, LOW); //se c'è accendo il led
          }

          // Create the web page
          client.println("HTTP/1.1 200 OK"); //dico al client che è tutt'ok - standard http
          client.println("Content-Type: text/html"); //indico il formato - standard http
          client.println(); //necessario per non buggare
          client.println("<html>"); //inizio codice html
          
          client.println("<style type=\"text/css\">body{text-align: center; background-color: #4BC04F; font-family: sans-serif;}");
          client.println("#Display{padding: 0px; margin: 0 auto; background-color: white; border: 1px solid black; border-radius: 50px; text-align: center; width: 330px; height: 500px; margin-top: 50px;}");
          client.println("#Forward{padding: 15px; text-align: center; margin: 0 auto; margin-top: 50px; margin-bottom: 0px;}");
          client.println("#Left{padding: 15px; text-align: center; margin: 0 auto; margin-top: 10px; padding-right:24px; padding-left:20px;}");
          client.println("#Right{padding: 15px; text-align: center; margin: 0 auto; margin-top: 10px; padding-right: 20px;}");
          client.println("#Backward{padding: 15px; text-align: center; margin: 0 auto; margin-top: 10px;}.adder{padding: 15px; text-align: center; margin: 6px; margin-top: 20px;}");
          client.println("#Stop{padding: 12px; margin: 0px; width: 60px; margin-left:12px; margin-right:12px;}</style>");
          
          client.println("<head><link rel=\"icon\" href=\"data:,\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"><title>Controllo Robot</title></head>");
          
          client.println("<body><div id=\"Display\"><input type=\"submit\" id=\"Forward\" value=\"Forward\" onclick=\"ChangeURL('/Forward/1')\"/>
");
          client.println("<input type=\"submit\" id=\"Left\" value=\"Left\" onclick=\"ChangeURL('/Left/1')\"/><input type=\"submit\" id=\"stop\" value=\"Stop\" onclick=\"ChangeURL('/Stop/1')\"/>");
          client.println("<input type=\"submit\" id=\"Right\" value=\"Right\" onclick=\"ChangeURL('/Right/1')\"/>
<input type=\"submit\" id=\"Backward\" value=\"Backward\" onclick=\"ChangeURL('/Backward/1')\"/>
");
          client.println("<button id=\"+10\" class=\"adder\" onclick=\"ChangeURL('/Remover/10')\">Rem 10</button>");
          client.println("<button id=\"+10\" class=\"adder\" onclick=\"ChangeURL('/Adder/10')\">Add 10</button>");
          
          client.print("<script type=\"text/javascript\">");
          client.print("function ChangeURL(Url){window.location.href = Url;}");
          client.print("function DelUrl(){window.location.href=\"/\";}");
          client.print("if(window.location.href==\"http://192.168.1.37/Remover/10\" || window.location.href==\"http://192.168.1.37/Adder/10\"){setTimeout(DelUrl,150);}");
          client.print("</script></body>");
          
          client.println("</html>");
          client.stop(); //stop richieste dal client
          currentLine="";
        }
      }
    }
  }
}

Il codice su arduino non è importante per farvi capire, comunque il primo problema è dato dal fatto che a volte per connettermi alla pagina creata sull’esp32 ci vogliano anche 40 secondi, e una volta preso il controllo del robot, magari schiacciando su un tasto, ci vogliono anche 10/20 secondi prima che funzioni effettivamente oppure altre volte non va proprio ed esce la schermata del sito irraggiungibile.

Il secondo problema è legato alla stampa di alcune informazioni sullo schermo oled dell’esp32.
Per stampare qualcosa sullo schermo si usano queste funzioni:

Heltec.display -> clear();
Heltec.display -> drawString(x, y, "");
Heltec.display -> display();

ed io voglio stampare la variabile Speed che mi indica la velocità attuale del robot (min:0-max:255), però il problema è che la prima volta viene stampata perchè le funzioni sono all’interno del void setup(), invece successivamente, ovviamente all’interno del void loop(), non me la stampa più e non riesco a capirne il motivo.

Se qualcuno riuscisse ad aiutarmi gliene sarei grato.
Grazie