Bonsoir enash
Voilà ma « vision de la chose », le programme associé à celui de MIT App Inventor (MAI) fonctionne avec des commandes :
BSTART=1 (depuis boutonStart) pour démarrer
BSTART =0 (depuis boutonStop) pour arrêter

STOURS=12 (depuis sliderTours) pour nombre des tours (Défaut entre -20 et +20)
Tu peux tester ces commandes sans passer par MAI, simplement en les introduisant depuis la ligne de commande du moniteur de l’IDE Arduino, à 9600 et \n comme terminaison.

BSTART=1 démarre le nombre de tours sélectionnés (défaut 2)
BSTSART=0 Arrête, immédiatement, le moteur si le nombre de tours n’est pas terminé.
STOURS=-4 Modifie le nombre de tours, c’est actif au prochain click de boutonStart vu que l’ordre est **envoyé en même temps.
Le programme :
/*
Name: APPinv_enashMpapBluetooth.ino
Created: 30.07.2022
Author: jpbbricole
*/
#include "AccelStepper.h"
char Incoming_value = 0;
const char boutonNemaIng1 = 3;
boolean mpap1Running = false;
const bool boutonPinEtatOn = LOW;
const char mpapDirPin = 4; //5; (jpbbricole) // Pour driver MPAP pin pas
const char mpapStepPin = 5; //6; (jpbbricole) // Pour driver MPAP pin direction
AccelStepper MPAP1(1, mpapStepPin, mpapDirPin);
long mpapNombreDeToursAtourner = 2;
long mpapNombreDePasAtourner = 200;
//------------------------------------- Ligne de commandes
bool cmdNouvelleRecue = false; // Si une nouvelle commande a été reçue
String cmdTexte = ""; // Texte de la commande
void setup()
{
Serial.begin(9600);
MPAP1.setMaxSpeed(400);
MPAP1.setAcceleration(500);
pinMode(boutonNemaIng1, INPUT_PULLUP);
MPAP1.setPinsInverted(false, false, true);
MPAP1.enableOutputs(); // Activer les signaux du MPAP
}
void loop()
{
//--------------------------------- Ecoute du port serie
serialReception(); // Ecouter le port série
if (cmdNouvelleRecue) // Si une nouvelle commande depuis le moniteur
{
cmdExecute(cmdTexte);
cmdTexte = "";
cmdNouvelleRecue = false;
}
if (MPAP1.distanceToGo() == 0) // Si moteur à destination
{
mpapStop();
}
MPAP1.run();
}
//------------------------------------- Arrêter le moteur
void mpapStop()
{
MPAP1.stop();
MPAP1.setCurrentPosition(0);
mpap1Running = false;
}
/* -------------------------------------------------------------------------------
Ligne de commandes, le format est Commande=Paramètre
Ce système n'est pas sensible à la casse.
Le paramètre peut être entier, flottant ou String
Commandes reconnues
BSTART=0 ou BSTART=1 Pour boutonStart
STOURS=12 Pour sliderTours
'*----------------------------------------------------------------------------
*/
void cmdExecute(String commande)
{
commande.toUpperCase(); // Tout en majuscules
commande.replace(" ", ""); // Supprimer les espaces
Serial.println("Execution de : " + commande);
int sepPos = commande.indexOf("="); // Recherche du séparateur
String cmd = commande.substring(0, sepPos); // Extraction de la commande
String cmdParam = commande.substring(sepPos + 1); // Extraction du paramètre
int cmdParamInt = cmdParam.toInt(); // Conversion du paramètre en int
cmdParam.replace(",", "."); // Remplacer une éventuelle virgule par un point
float cmdParamFloat = cmdParam.toFloat(); // Conversion du paramètre en float
if (cmd == "BSTART") // boutonStart
{
Serial.print("Bouton Start ");
Serial.println((cmdParamInt == 1) ? "ON" : "OFF");
if (cmdParamInt == 1) // Si start
{
MPAP1.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
mpap1Running = true;
}
else
{
mpapStop();
}
}
else if (cmd == "STOURS") // sliderTours
{
Serial.println("Nombre de tours " + String(cmdParamInt));
mpapNombreDeToursAtourner = (long)cmdParamInt;
}
else if (cmd == "TEST") // sliderTours
{
Serial.println("Test " + cmd);
}
else
{
Serial.print(F("Commande inconnue!!! ")); Serial.println(commande);
}
}
/*-----------------------------------------------------------------------
Réception de commandes depuis le moniteur
'*------------------------------------------------------------------------
*/
void serialReception()
{
if (Serial.available())
{
cmdTexte = Serial.readStringUntil('\n');
// Nettoyage des caractères indésirables, CR, LF, TAB... et les espace de début et de fin
cmdTexte.trim();
cmdNouvelleRecue = true;
}
}
Je te mets, en PJ, le programme MIT.
ARDFRMPAPbuttonSlider.aia.zip (67.1 KB)
Attention, comme je n’ai pas le même brochage que toi, méfiance, des fois que j’aurai oublié… 
** Cet envoi sucessif STOURS=nnn et BSTART=1 est à sécuriser, ça risque d’être trop rapide (je n’ai jamais eu de problème), j’envisage une temporisation entre ces 2 commandes et comme un délais dans MAI n’est pas si simple…
A+
Cordialement
Jpbbricole