refactor(server): ♻️ move global variables into a struct

This commit is contained in:
Julien Oculi 2024-06-25 22:09:17 +02:00
parent 9b055207d6
commit 477e85ba56

View file

@ -23,10 +23,13 @@ const char *password = "test12345";
int delayTime = 3; int delayTime = 3;
// Variables de commande : // Variables de commande :
bool commandRunning = false; // Une commande doit être exécutée struct command_t
bool stopCommand = false; // La commande doit être stoppée {
String globalCommand; // Nom de la commande bool running; // Une commande doit être exécutée
int globalValue; // Valeur (nombre de pas à effectuer) bool stopped; // La commande doit être stoppée
String name; // Nom de la commande
int value; // Valeur (nombre de pas à effectuer)
} command = {false, false};
// Création du serveur asynchrone : // Création du serveur asynchrone :
AsyncWebServer server(80); AsyncWebServer server(80);
@ -55,28 +58,28 @@ void setup()
void loop() void loop()
{ {
// Ne rien faire si aucune commande en cours // Ne rien faire si aucune commande en cours
if (!commandRunning) if (!command.running)
return; return;
// Arrêter le robot si une commande est interrompue // Arrêter le robot si une commande est interrompue
// ou si le nombre de pas a été effectué // ou si le nombre de pas a été effectué
if (stopCommand || globalValue <= 0) if (command.stopped || command.value <= 0)
{ {
Serial.println("stop"); Serial.println("stop");
commandRunning = false; command.running = false;
stopCommand = false; command.stopped = false;
stopMotors(); stopMotors();
return; return;
} }
// Sinon executer la commande en cours // Sinon executer la commande en cours
chooseCommand(); // Appeler la fonction "chooseCommand()" chooseCommand(); // Appeler la fonction "chooseCommand()"
if (globalValue > 0) if (command.value > 0)
{ // S'il reste des pas à effectuer alors on l'affiche et on enlève un pas { // S'il reste des pas à effectuer alors on l'affiche et on enlève un pas
Serial.print(globalCommand); Serial.print(command.name);
Serial.print(": "); Serial.print(": ");
Serial.println(globalValue); Serial.println(command.value);
globalValue--; command.value--;
} }
} }
@ -85,16 +88,16 @@ void serverConfig()
{ {
server.on("/get", HTTP_GET, [](AsyncWebServerRequest *request) server.on("/get", HTTP_GET, [](AsyncWebServerRequest *request)
{ {
String command; String commandName;
float value; float commandValue;
// Parse request params and update command and value // Parse request params and update command and value
parseRequestParams(request, command, value); parseRequestParams(request, commandName, commandValue);
Serial.print(command); Serial.print(commandName);
Serial.print(": "); Serial.print(": ");
Serial.println(value); Serial.println(commandValue);
request->send(200, "text/plain", command); }); request->send(200, "text/plain", commandName); });
} }
void parseRequestParams(AsyncWebServerRequest *request, String &commandName, float &commandValue) void parseRequestParams(AsyncWebServerRequest *request, String &commandName, float &commandValue)
@ -102,17 +105,17 @@ void parseRequestParams(AsyncWebServerRequest *request, String &commandName, flo
// Stop here with error message if wrong command // Stop here with error message if wrong command
if (!request->hasParam("command")) if (!request->hasParam("command"))
{ {
command = "No command provided"; commandName = "No command provided";
return; return;
} }
// Update command from params // Update command from params
command = request->getParam("command")->value(); commandName = request->getParam("command")->value();
// Update value from params and use "0" as default // Update value from params and use "0" as default
value = request->hasParam("value") ? request->getParam("value")->value().toFloat() : 0; commandValue = request->hasParam("value") ? request->getParam("value")->value().toFloat() : 0;
requestCheck(command, value); requestCheck(commandName, commandValue);
} }
// Fonction pour convertir une longueur en cm vers un nombre de pas moteur. // Fonction pour convertir une longueur en cm vers un nombre de pas moteur.
@ -130,36 +133,38 @@ int convertRotToSteps(int rotation)
} }
// Lorsqu'une commande arrive au serveur, cette fonction permet // Lorsqu'une commande arrive au serveur, cette fonction permet
void requestCheck(String command, float value) void requestCheck(String commandName, float commandValue)
{ {
if (command == "stop") if (commandName == "stop")
{ {
globalCommand = "stop"; command.name = "stop";
commandRunning = true; command.running = true;
stopCommand = true; command.stopped = true;
} }
else if setGlobals (command, value) else
;
if (value == 0)
{ {
globalValue = 474; setGlobals(commandName, commandValue);
}
if (commandValue == 0)
{
command.value = 474;
} }
} }
void setGlobals(String command, float value) void setGlobals(String commandName, float commandValue)
{ {
// Assert command before updating globals // Assert command before updating globals
if (command != "forward" && command != "backward" && command != "left" && command != "right") if (commandName != "forward" && commandName != "backward" && commandName != "left" && commandName != "right")
{ {
return return;
} }
// Update globals // Update globals
globalCommand = command; command.name = commandName;
commandRunning = true; command.running = true;
stopCommand = false; command.stopped = false;
globalValue = convertLengthToSteps(value); command.value = convertLengthToSteps(commandValue);
} }
void connectWiFi() void connectWiFi()
@ -173,19 +178,19 @@ void connectWiFi()
void chooseCommand() void chooseCommand()
{ {
if (globalCommand == "forward") if (command.name == "forward")
{ {
forward(); forward();
} }
else if (globalCommand == "left") else if (command.name == "left")
{ {
left(); left();
} }
else if (globalCommand == "right") else if (command.name == "right")
{ {
right(); right();
} }
else if (globalCommand == "backward") else if (command.name == "backward")
{ {
backward(); backward();
} }