Transfert de valeurs numériques vers arduino mega par bluetooth

Bonjour
Mon montage est le suivant avec un moteur pas à pas à chaque driver qui ne sont pas représentés:


Sur MAI, j'ai mis au modifié une application avec des sliders issue d'un autre sujet:
image


fichier aia:
Plusieurs_sliders_C_transfert.zip (73,1 Ko)

Deux premiers sliders avec l'un qui varie entre 0 et 100 et l'autre entre 0 et 1000 ont directement leur variation qui s'affichent dans des zones de texte à coté d'eux.

Ensuite à l'intérieur de deux groupes de sliders, avec l'un consacré à des couleurs et l'autre à des ingrédients figurent pour chaque slider deux zones de texte.

Dans le groupe des couleurs la première zone de texte à gauche affiche un ratio se calculant par rapport aux autres sliders de couleur comme suit:
(100.0 * nb3) / (nb3 + nb4 + nb5 + nb6 + nb7)
Puis dans la zone de texte à droite s'affiche le résultat du calcul suivant par rapport au slider de goutte plus en haut:
(ratioCouleur * nombreDeGoutte) / 100.0

Dans le groupe des sliders d'ingrédient, la zone de texte à gauche affiche comme dans le groupe des sliders de couleur un ratio par rapport aux autres sliders d'ingrédient mais avec 7 variables au lieu de 5, se calculant comme suit:
(100.0 * nb8) / (nb8 + nb9 + nb10 + nb11 + nb12 + nb13 + nb14)
Enfin dans chaque zone de texte de droite de chaque slider d'ingrédient s'affiche le résulat d'un calcul en fonction du slider plus haut consacré à une quantité total dont la formule est la suivant:
(ratioIngredient * 4 * litreIngredient) / 100.0

Mon but est, lorsque l'on appuie sur un bouton "start", de transmettre les valeurs de chaque zone de texte de droite vers un module bluetooth hc-05 avant que celui-ci ne les transmet à une arduino méga dont le programme multipliera chaque valeur envoyée par un nombre de pas à tourner pour les moteurs pas à pas parmi lesquels chaque moteur est dédié à un slider de couleur ou d'ingrédient, et de faire que les moteurs s'arrêtent tous si l'on appuie sur un bouton "stop" alors qu'ils sont en rotation.

J'ai essayé d'écrire un programme correspondant à l'appli et au montage en me basant sur le programme d'un sujet précédent:

#define btSerial Serial1     // Port du bluetooth
#include "AccelStepper.h"
String Incoming_value = "";
const char enable1 = 40;     
const char enable2 = 43;     
const char enable3 = 45;
const char enable4 = 46;  
const char enable5 = 42;
const char enable6 = 44;
const char enable7 = 47;
const char enableRouge = 49;
const char enableBleu = 51;
const char enableJaune = 12;
const char enableViolet = 11;
const char enableGris = 10;

const char mpapDirReverse = 4;

boolean MPAP1Running = false;
boolean MPAP2Running = false;
boolean MPAP3Running = false;
boolean MPAP4Running = false;
boolean MPAP5Running = false;
boolean MPAP6Running = false;
boolean MPAP7Running = false;
boolean MPAProugeRunning = false;
boolean MPAPbleuRunning = false;
boolean MPAPjauneRunning = false;
boolean MPAPvioletRunning = false;
boolean MPAPgrisRunning = false;

const bool boutonPinEtatOn = LOW;

const byte mpapStepPinGris = 5;     // Pour driver MPAP pin direction
const byte mpapStepPinViolet = 7;     // Pour driver MPAP pin direction
const byte mpapStepPinJaune = 9;     // Pour driver MPAP pin direction
const byte mpapStepPinRouge = 8;
const byte mpapStepPinBleu = 35;
const byte mpapStepPin1 = 37;
const byte mpapStepPin2 = 39;
const byte mpapStepPin3 = 41;
const byte mpapStepPin4 = 6;
const byte mpapStepPin5 = 3;
const byte mpapStepPin6 = 38;
const byte mpapStepPin7 = 36;

AccelStepper MPAP1(1, mpapStepPin1, mpapDirReverse);
AccelStepper MPAP2(1, mpapStepPin2, mpapDirReverse);
AccelStepper MPAP3(1, mpapStepPin3, mpapDirReverse);
AccelStepper MPAP4(1, mpapStepPin4, mpapDirReverse);
AccelStepper MPAP5(1, mpapStepPin5, mpapDirReverse);
AccelStepper MPAP6(1, mpapStepPin6, mpapDirReverse);
AccelStepper MPAP7(1, mpapStepPin7, mpapDirReverse);
AccelStepper MPAPgris(1, mpapStepPinGris, mpapDirReverse);
AccelStepper MPAPviolet(1, mpapStepPinViolet, mpapDirReverse);
AccelStepper MPAPjaune(1, mpapStepPinJaune, mpapDirReverse);
AccelStepper MPAProuge(1, mpapStepPinRouge, mpapDirReverse);
AccelStepper MPAPbleu(1, mpapStepPinBleu, mpapDirReverse);

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() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  btSerial.begin(9600);

  pinMode(enable1, OUTPUT);
  pinMode(enable2, OUTPUT);
  pinMode(enable3, OUTPUT);
  pinMode(enable4, OUTPUT);
  pinMode(enable5, OUTPUT);
  pinMode(enable6, OUTPUT);
  pinMode(enable7, OUTPUT);
  pinMode(enableRouge, OUTPUT);
  pinMode(enableBleu, OUTPUT);
  pinMode(enableJaune, OUTPUT);
  pinMode(enableViolet, OUTPUT);
  pinMode(enableGris, OUTPUT);
  
  //--------------------------------- MPAP 1
  MPAP1.setMaxSpeed(400);
  MPAP1.setAcceleration(500);
  MPAP1.setEnablePin(enable1); //ligne ajoutée
  //                         DIR        STEP  ENA
  MPAP1.setPinsInverted(mpapDirReverse, false, true); //ligne modifiée
  //--------------------------------- MPAP 2
  MPAP2.setMaxSpeed(400);
  MPAP2.setAcceleration(500);
  MPAP2.setEnablePin(enable2); //ligne ajoutée
  MPAP2.setPinsInverted(mpapDirReverse, false, true); //ligne modifiée
   //--------------------------------- MPAP 3
  MPAP3.setMaxSpeed(400);
  MPAP3.setAcceleration(500);
  MPAP3.setEnablePin(enable3); //ligne ajoutée
  MPAP3.setPinsInverted(mpapDirReverse, false, true);//ligne modifiée
  //--------------------------------- MPAP 4
  MPAP4.setMaxSpeed(400);
  MPAP4.setAcceleration(500);
  MPAP4.setEnablePin(enable4);
  MPAP4.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAP 5
  MPAP5.setMaxSpeed(400);
  MPAP5.setAcceleration(500);
  MPAP5.setEnablePin(enable5);
  MPAP5.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAP 6
  MPAP6.setMaxSpeed(400);
  MPAP6.setAcceleration(500);
  MPAP6.setEnablePin(enable6);
  MPAP6.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAP 7
  MPAP7.setMaxSpeed(400);
  MPAP7.setAcceleration(500);
  MPAP7.setEnablePin(enable7);
  MPAP7.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAProuge
  MPAProuge.setMaxSpeed(400);
  MPAProuge.setAcceleration(500);
  MPAProuge.setEnablePin(enableRouge);
  MPAProuge.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAPbleu
  MPAPbleu.setMaxSpeed(400);
  MPAPbleu.setAcceleration(500);
  MPAPbleu.setEnablePin(enableBleu);
  MPAPbleu.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAPjaune
  MPAPjaune.setMaxSpeed(400);
  MPAPjaune.setAcceleration(500);
  MPAPjaune.setEnablePin(enableJaune);
  MPAPjaune.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAPviolet
  MPAPviolet.setMaxSpeed(400);
  MPAPviolet.setAcceleration(500);
  MPAPviolet.setEnablePin(enableViolet);
  MPAPviolet.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAPgris
  MPAPgris.setMaxSpeed(400);
  MPAPgris.setAcceleration(500);
  MPAPgris.setEnablePin(enableGris);
  MPAPgris.setPinsInverted(mpapDirReverse, false, true);

}

void loop() {
  // put your main code here, to run repeatedly:
  if (btSerial.available())
  {
    if (cmdNouvelleRecue)      // Si une nouvelle commande depuis le moniteur
    {
      cmdExecute(cmdTexte);
      cmdTexte = "";
      cmdNouvelleRecue = false;
    }
    if (MPAP1.distanceToGo() == 0)    
    {
      mpapStop1();
    }
    if (MPAP2.distanceToGo() == 0)    
    {
      mpapStop2();
    }
    if (MPAP3.distanceToGo() == 0)    
    {
      mpapStop3();
    }
    if (MPAP4.distanceToGo() == 0)    
    {
      mpapStop4();
    }
    if (MPAP5.distanceToGo() == 0)    
    {
      mpapStop5();
    }
    if (MPAP6.distanceToGo() == 0)    
    {
      mpapStop6();
    }
    if (MPAP7.distanceToGo() == 0)    
    {
      mpapStop7();
    }
    if (MPAProuge.distanceToGo() == 0)    
    {
      mpapStopRouge();
    }
    if (MPAPbleu.distanceToGo() == 0)    
    {
      mpapStopBleu();
    }
    if (MPAPjaune.distanceToGo() == 0)    
    {
      mpapStopJaune();
    }
    if (MPAPviolet.distanceToGo() == 0)    
    {
      mpapStopViolet();
    }
    if (MPAPgris.distanceToGo() == 0)    
    {
      mpapStopGris();
    }
    MPAP1.run();
    MPAP2.run();
    MPAP3.run();
    MPAP4.run();
    MPAP5.run();
    MPAP6.run();
    MPAP7.run();
    MPAProuge.run();
    MPAPbleu.run();
    MPAPjaune.run();
    MPAPviolet.run();
    MPAPgris.run();
}

//------------------------------------- Arrêt des moteurs
void mpapStop1()
{
    MPAP1.stop();
    MPAP1.setCurrentPosition(0);
    MPAP1.disableOutputs();
    MPAP1Running = false;  
}
void mpapStop2()
{
    MPAP2.stop();
    MPAP2.setCurrentPosition(0);
    MPAP2.disableOutputs();
    MPAP2Running = false;  
}
void mpapStop3()
{
    MPAP3.stop();
    MPAP3.setCurrentPosition(0);
    MPAP3.disableOutputs();
    MPAP3Running = false;  
}
void mpapStop4()
{
    MPAP4.stop();
    MPAP4.setCurrentPosition(0);
    MPAP4.disableOutputs();
    MPAP4Running = false;  
}
void mpapStop5()
{
    MPAP5.stop();
    MPAP5.setCurrentPosition(0);
    MPAP5.disableOutputs();
    MPAP5Running = false;  
}
void mpapStop6()
{
    MPAP6.stop();
    MPAP6.setCurrentPosition(0);
    MPAP6.disableOutputs();
    MPAP6Running = false;  
}
void mpapStop7()
{
    MPAP7.stop();
    MPAP7.setCurrentPosition(0);
    MPAP7.disableOutputs();
    MPAP7Running = false;  
}
void mpapStopRouge()
{
    MPAProuge.stop();
    MPAProuge.setCurrentPosition(0);
    MPAProuge.disableOutputs();
    MPAProugeRunning = false;  
}
void mpapStopBleu()
{
    MPAPbleu.stop();
    MPAPbleu.setCurrentPosition(0);
    MPAPbleu.disableOutputs();
    MPAPbleuRunning = false;  
}
void mpapStopJaune()
{
    MPAPjaune.stop();
    MPAPjaune.setCurrentPosition(0);
    MPAPjaune.disableOutputs();
    MPAPjauneRunning = false;  
}
void mpapStopViolet()
{
    MPAPviolet.stop();
    MPAPviolet.setCurrentPosition(0);
    MPAPviolet.disableOutputs();
    MPAPvioletRunning = false;  
}
void mpapStopGris()
{
    MPAPgris.stop();
    MPAPgris.setCurrentPosition(0);
    MPAPgris.disableOutputs();
    MPAPgrisRunning = false;  
}
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.enableOutputs();
      MPAP1.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAP1Running = true;

      MPAP2.enableOutputs();
      MPAP2.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAP2Running = true;

      MPAP3.enableOutputs();
      MPAP3.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAP3Running = true;

      MPAP4.enableOutputs();
      MPAP4.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAP4Running = true;

      MPAP5.enableOutputs();
      MPAP5.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAP5Running = true;
      
      MPAP6.enableOutputs();
      MPAP6.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAP6Running = true;

      MPAP7.enableOutputs();
      MPAP7.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAP7Running = true;

      MPAProuge.enableOutputs();
      MPAProuge.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAProugeRunning = true;

      MPAPbleu.enableOutputs();
      MPAPbleu.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAPbleuRunning = true;

      MPAPjaune.enableOutputs();
      MPAPjaune.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAPjauneRunning = true;

      MPAPviolet.enableOutputs();
      MPAPviolet.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAPvioletRunning = true;

      MPAPgris.enableOutputs();
      MPAPgris.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAPgrisRunning = 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);
  }
}
void serialReception()                                       
{
  if (Serial.available())
  {
    cmdTexte = Serial.readStringUntil('\n');

    cmdTexte.trim();

    cmdNouvelleRecue  = true;
  }
}

Le problème est que j'ai sans cesse des messages d'erreur dans mon IDE:
image

Comment fait-on pour faire en sorte qu'un programme puisse recevoir et traiter jusqu'à 12 valeurs différentes par bluetooth ?

Cordialement

bof c'est déjà illisible comme cela :slight_smile:

ben comme pour 2 ou 3 ou 4..

Pour écouter le port série vous pouvez jeter un oeil à mon petit tuto sur le sujet

Il manque une accolade fermante dans loop()

Avec Fritzing, on arrive à faire des beaux plats de spaghettis.
Surtout lorsqu'on place mal les éléments. Par exemple la breadboard du bas dont tous les fils vont dans le haut de la Mega2560. Ça n'aide pas à la compréhension de la chose.

Bonsoir
@J-M-L @fdufnews Je crois comprendre que ce sont les broches sur la méga qui sont le plus difficiles à percevoir. Voici un zoom sur la méga qui devrait aider les éventuels lecteurs que je place également en haut:


J'ai aussi placé tout les dir des drivers sur la broche 4 de l'arduino:

image

Cordialement

Non c’est le fritzing qui n’est pas approprié… il faut poster le dessin du circuit sous sa forme circuit électronique pas une image photo réaliste qui fait plat de nouille.

D’autre part bien souvent le souci est que vous n’avez pas câblé comme le dessin. On ne sait pas quelle est l’alimentation, on ne sait pas si vos breadboard sont coupées en deux etc…

Et si votre composant BT est en plein milieu des moteurs pas à pas (qu’on ne connaît pas…) alors il se peut qu’il y ait des tas d’interférences électromagnétiques. De même si votre paquet de nouilles comporte des longs fils à côté des moteurs ou d’une alim puissante, il peut y avoir des perturbations . La breadboard n’est pas adaptée pour faire passer des puissance importantes, combien consomment 3,4 ou 5 moteurs ou drivers ? Comment sont ils alimentés ?

On teste ce genre de montage petit à petit

Pour votre question,

Cette fonction n'est appelée nulle part. Tu ne risques pas de traiter les commandes reçues

Bonsoir
@J-M-L J'en profite pour vous faire savoir que dans le tutoriel, le tuto d'eskimon et la doc arduino c-string ne sont plus disponibles.
Mes moteurs sont des nema 17, chaque bus de breadbord supportent un passage de 12V pour 3 à 4 moteurs nema d'après ce que j'ai appris.
Si le schéma suivant est considéré comme normalisé, j'ai bien peur que l'on est dans tous les cas un plat de nouille:
image

  1. Dans le tutoriel post #5 dans le code pour le moniteur série, le "\t" sert-il à marquer un espace ?

  2. Si je comprend bien, la variable static augmente par incrémentation, jusqu'a ce qu'on la remet à 0 quand on entre une phrase dans le moniteur, est-ce bien cela ?

Cordialement

Bonsoir

Si le schéma suivant est considéré comme normalisé

A quelles normes fais-tu référence ?

je vois un plat de nouilles monochrome illisible , mais aucun composant représenté par son symbole normalisé !
Perte de temps.....travail inutile.....

Je fait référence aux symboles conventionnels en électronique: Symbole électronique — Wikipédia

J'ignore s'il y a des symboles bien spécifiques pour des composants du genre driver A4988, arduino, etc.

Cordialement

Bonsoir

J'ignore s'il y a des symboles bien spécifiques pour des composants du genre driver A4988, arduino, etc

les éléments auxquels tu fais référence ici sont des assemblages de composants (le détail interne de chacun d'eux peut être représenté par un schéma normalisé)

Pour les représenter globalement un rectangle suffit et y reportant clairement et lisiblement les noms des signaux d'entrée et de sortie, regroupés selon la logique du fonctionnement pas selon le positionnement des pattes sur le boitier.

Un schéma cherche à exprimer la logique du fonctionnement contrairement à un plan de câblage qui cherche avant tout à coller à l'aspect du montage, pour éventuellemnt permettre de reproduire le montage sans compréhension de son fonctionnement.

Prenons par exemple le schéma de la carte UNO R3
On y voit d'une part des composants simples représentés par leurs symboles normalisés (R, C, ....)
D'autre part des circuits intégrés complexes représentés par un rectangle autour duquel les signaux sont regroupés par blocs fonctionnels pas par le numéro de pin de leur boitier.

ci dessous un driver représenté dans une logique de schéma, signaux de commande.contrôle à gauche, sorties à droite ( pas de normes de représentation pour ces module , ils sont trop nombreux et variés pour faire l'objet d'une normalisation !!)
driver

Bonsoir enash

Dans ton programme, tu y est presque, il y a juste des bricoles à modifier, je t'explique ça demain matin.

Bonne soirée
Cordialement
jpbbricole

1 Like

\t c'est une tabulation donc plusieurs espaces cela dépend de la configuration du terminal. Cela permet d'aligner les colonnes lorsqu'on affiche plusieurs lignes de données.

Ton schéma est illisible même ouvert à sa taille originale, trop petit, trop compressé.

J'en doute fort, personnellement, je miserais sur quelques centaines de milliampères dans le meilleur des cas. Mais en même temps cela ne veut pas dire grand chose NEMA défini la taille des moteurs pas leur consommation.
Dans tous les cas, il faut oublier la breadboard pour un montage sérieux. C'est un point qui a déjà été abordé, il me semble. Après, c'est toi qui met au point et qui dépanne alors tu fais comme tu veux.

Tu sais, ou devrais savoir, que Fritzing est capable de délivrer un vrai schéma electrique : il suffit de trouver dans les menus de Ftrizing. Désolé je ne peux pas en dire plus je n’utilise pas fritzing.
Le module A4988 sera représenté par un rectangle avec le nom des connexions.

Mais si tu veux absolument faire figurer tous les moteurs cela restera un plat de nouilles.
Fritzing ne sait pas dessiner clairement les liaisons par fil, il restera toujours un travail manuel pour rendre le schéma aisément comprehensible.

Pour expliquer ce que tu veux faire un schéma partiel avec 2 ou 3 moteurs sera bien plus clair.

Et aussi bien plus facile à mettre au point, comme te l’as déjà dit @fdufnews.

Bonjour enash

J'ai commencé par "redresser" ton programme, pour un problème d'accolade mal placée, tu avais plein de fonctions dans loop().
Pour le traitement des données, on reçoit, de MAI,

SROUGE=11
SBLEU=4
SJAUNE=4
SVIOLET=9
SGRIS=4
SIGT1=84
SIGT2=35
SIGT3=69
SIGT4=35
SIGT5=75
SIGT6=67
SIGT7=35
BSTART=1

C'est traité dans cmdExecute().
Les Scouleurs sont traités individuellement:

	else if (cmd == "SROUGE")     // slider Rouge
	{
		Serial.println("Rouge = " + String(cmdParamInt));
	}

parce que difficilement indexables.
Tandis que les SIGTx oui, ainsi:

	else if (cmd.startsWith("SIGT"))     // sliders IGT
	{
		cmd.replace("SIGT", "");     // Supprimer SIGT pour ne garder plus que l'index
		int sigtIndex = cmd.toInt();
		Serial.println("IGT" + String(sigtIndex) + " = " + String(cmdParamInt));
	}

Le programme complet

 //https://forum.arduino.cc/t/transfert-de-valeurs-numeriques-vers-arduino-mega-par-bluetooth/1036519/1

#define btSerial Serial1     // Port du bluetooth
#include "AccelStepper.h"

String Incoming_value = "";
const char enable1 = 40;
const char enable2 = 43;
const char enable3 = 45;
const char enable4 = 46;
const char enable5 = 42;
const char enable6 = 44;
const char enable7 = 47;
const char enableRouge = 49;
const char enableBleu = 51;
const char enableJaune = 12;
const char enableViolet = 11;
const char enableGris = 10;

const char mpapDirReverse = 4;

boolean MPAP1Running = false;
boolean MPAP2Running = false;
boolean MPAP3Running = false;
boolean MPAP4Running = false;
boolean MPAP5Running = false;
boolean MPAP6Running = false;
boolean MPAP7Running = false;
boolean MPAProugeRunning = false;
boolean MPAPbleuRunning = false;
boolean MPAPjauneRunning = false;
boolean MPAPvioletRunning = false;
boolean MPAPgrisRunning = false;

const bool boutonPinEtatOn = LOW;

const byte mpapStepPinGris = 5;     // Pour driver MPAP pin direction
const byte mpapStepPinViolet = 7;     // Pour driver MPAP pin direction
const byte mpapStepPinJaune = 9;     // Pour driver MPAP pin direction
const byte mpapStepPinRouge = 8;
const byte mpapStepPinBleu = 35;
const byte mpapStepPin1 = 37;
const byte mpapStepPin2 = 39;
const byte mpapStepPin3 = 41;
const byte mpapStepPin4 = 6;
const byte mpapStepPin5 = 3;
const byte mpapStepPin6 = 38;
const byte mpapStepPin7 = 36;

AccelStepper MPAP1(1, mpapStepPin1, mpapDirReverse);
AccelStepper MPAP2(1, mpapStepPin2, mpapDirReverse);
AccelStepper MPAP3(1, mpapStepPin3, mpapDirReverse);
AccelStepper MPAP4(1, mpapStepPin4, mpapDirReverse);
AccelStepper MPAP5(1, mpapStepPin5, mpapDirReverse);
AccelStepper MPAP6(1, mpapStepPin6, mpapDirReverse);
AccelStepper MPAP7(1, mpapStepPin7, mpapDirReverse);
AccelStepper MPAPgris(1, mpapStepPinGris, mpapDirReverse);
AccelStepper MPAPviolet(1, mpapStepPinViolet, mpapDirReverse);
AccelStepper MPAPjaune(1, mpapStepPinJaune, mpapDirReverse);
AccelStepper MPAProuge(1, mpapStepPinRouge, mpapDirReverse);
AccelStepper MPAPbleu(1, mpapStepPinBleu, mpapDirReverse);

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()
{
	// put your setup code here, to run once:
	Serial.begin(115200);
	btSerial.begin(9600);

	pinMode(enable1, OUTPUT);
	pinMode(enable2, OUTPUT);
	pinMode(enable3, OUTPUT);
	pinMode(enable4, OUTPUT);
	pinMode(enable5, OUTPUT);
	pinMode(enable6, OUTPUT);
	pinMode(enable7, OUTPUT);
	pinMode(enableRouge, OUTPUT);
	pinMode(enableBleu, OUTPUT);
	pinMode(enableJaune, OUTPUT);
	pinMode(enableViolet, OUTPUT);
	pinMode(enableGris, OUTPUT);
	
	//--------------------------------- MPAP 1
	MPAP1.setMaxSpeed(400);
	MPAP1.setAcceleration(500);
	MPAP1.setEnablePin(enable1); //ligne ajoutée
	//                         DIR        STEP  ENA
	MPAP1.setPinsInverted(mpapDirReverse, false, true); //ligne modifiée
	//--------------------------------- MPAP 2
	MPAP2.setMaxSpeed(400);
	MPAP2.setAcceleration(500);
	MPAP2.setEnablePin(enable2); //ligne ajoutée
	MPAP2.setPinsInverted(mpapDirReverse, false, true); //ligne modifiée
	//--------------------------------- MPAP 3
	MPAP3.setMaxSpeed(400);
	MPAP3.setAcceleration(500);
	MPAP3.setEnablePin(enable3); //ligne ajoutée
	MPAP3.setPinsInverted(mpapDirReverse, false, true);//ligne modifiée
	//--------------------------------- MPAP 4
	MPAP4.setMaxSpeed(400);
	MPAP4.setAcceleration(500);
	MPAP4.setEnablePin(enable4);
	MPAP4.setPinsInverted(mpapDirReverse, false, true);
	//--------------------------------- MPAP 5
	MPAP5.setMaxSpeed(400);
	MPAP5.setAcceleration(500);
	MPAP5.setEnablePin(enable5);
	MPAP5.setPinsInverted(mpapDirReverse, false, true);
	//--------------------------------- MPAP 6
	MPAP6.setMaxSpeed(400);
	MPAP6.setAcceleration(500);
	MPAP6.setEnablePin(enable6);
	MPAP6.setPinsInverted(mpapDirReverse, false, true);
	//--------------------------------- MPAP 7
	MPAP7.setMaxSpeed(400);
	MPAP7.setAcceleration(500);
	MPAP7.setEnablePin(enable7);
	MPAP7.setPinsInverted(mpapDirReverse, false, true);
	//--------------------------------- MPAProuge
	MPAProuge.setMaxSpeed(400);
	MPAProuge.setAcceleration(500);
	MPAProuge.setEnablePin(enableRouge);
	MPAProuge.setPinsInverted(mpapDirReverse, false, true);
	//--------------------------------- MPAPbleu
	MPAPbleu.setMaxSpeed(400);
	MPAPbleu.setAcceleration(500);
	MPAPbleu.setEnablePin(enableBleu);
	MPAPbleu.setPinsInverted(mpapDirReverse, false, true);
	//--------------------------------- MPAPjaune
	MPAPjaune.setMaxSpeed(400);
	MPAPjaune.setAcceleration(500);
	MPAPjaune.setEnablePin(enableJaune);
	MPAPjaune.setPinsInverted(mpapDirReverse, false, true);
	//--------------------------------- MPAPviolet
	MPAPviolet.setMaxSpeed(400);
	MPAPviolet.setAcceleration(500);
	MPAPviolet.setEnablePin(enableViolet);
	MPAPviolet.setPinsInverted(mpapDirReverse, false, true);
	//--------------------------------- MPAPgris
	MPAPgris.setMaxSpeed(400);
	MPAPgris.setAcceleration(500);
	MPAPgris.setEnablePin(enableGris);
	MPAPgris.setPinsInverted(mpapDirReverse, false, true);
}

void loop()
{
	//--------------------------------- Lire le port série du BT
	btSerialReception();
	if (cmdNouvelleRecue)      // Si une nouvelle commande depuis le moniteur
	{
		//Serial.println(cmdTexte);
		cmdExecute(cmdTexte);
		cmdTexte = "";
		cmdNouvelleRecue = false;
	}

	if (MPAP1.distanceToGo() == 0)
	{
	mpapStop1();
	}
	if (MPAP2.distanceToGo() == 0)
	{
	mpapStop2();
	}
	if (MPAP3.distanceToGo() == 0)
	{
	mpapStop3();
	}
	if (MPAP4.distanceToGo() == 0)
	{
	mpapStop4();
	}
	if (MPAP5.distanceToGo() == 0)
	{
	mpapStop5();
	}
	if (MPAP6.distanceToGo() == 0)
	{
	mpapStop6();
	}
	if (MPAP7.distanceToGo() == 0)
	{
	mpapStop7();
	}
	if (MPAProuge.distanceToGo() == 0)
	{
	mpapStopRouge();
	}
	if (MPAPbleu.distanceToGo() == 0)
	{
	mpapStopBleu();
	}
	if (MPAPjaune.distanceToGo() == 0)
	{
	mpapStopJaune();
	}
	if (MPAPviolet.distanceToGo() == 0)
	{
	mpapStopViolet();
	}
	if (MPAPgris.distanceToGo() == 0)
	{
	mpapStopGris();
	}
	MPAP1.run();
	MPAP2.run();
	MPAP3.run();
	MPAP4.run();
	MPAP5.run();
	MPAP6.run();
	MPAP7.run();
	MPAProuge.run();
	MPAPbleu.run();
	MPAPjaune.run();
	MPAPviolet.run();
	MPAPgris.run();
	//}
}

//------------------------------------- Arrêt des moteurs
void mpapStop1()
{
	MPAP1.stop();
	MPAP1.setCurrentPosition(0);
	MPAP1.disableOutputs();
	MPAP1Running = false;
}
void mpapStop2()
{
	MPAP2.stop();
	MPAP2.setCurrentPosition(0);
	MPAP2.disableOutputs();
	MPAP2Running = false;
}
void mpapStop3()
{
	MPAP3.stop();
	MPAP3.setCurrentPosition(0);
	MPAP3.disableOutputs();
	MPAP3Running = false;
}
void mpapStop4()
{
	MPAP4.stop();
	MPAP4.setCurrentPosition(0);
	MPAP4.disableOutputs();
	MPAP4Running = false;
}
void mpapStop5()
{
	MPAP5.stop();
	MPAP5.setCurrentPosition(0);
	MPAP5.disableOutputs();
	MPAP5Running = false;
}
void mpapStop6()
{
	MPAP6.stop();
	MPAP6.setCurrentPosition(0);
	MPAP6.disableOutputs();
	MPAP6Running = false;
}
void mpapStop7()
{
	MPAP7.stop();
	MPAP7.setCurrentPosition(0);
	MPAP7.disableOutputs();
	MPAP7Running = false;
}
void mpapStopRouge()
{
	MPAProuge.stop();
	MPAProuge.setCurrentPosition(0);
	MPAProuge.disableOutputs();
	MPAProugeRunning = false;
}
void mpapStopBleu()
{
	MPAPbleu.stop();
	MPAPbleu.setCurrentPosition(0);
	MPAPbleu.disableOutputs();
	MPAPbleuRunning = false;
}
void mpapStopJaune()
{
	MPAPjaune.stop();
	MPAPjaune.setCurrentPosition(0);
	MPAPjaune.disableOutputs();
	MPAPjauneRunning = false;
}
void mpapStopViolet()
{
	MPAPviolet.stop();
	MPAPviolet.setCurrentPosition(0);
	MPAPviolet.disableOutputs();
	MPAPvioletRunning = false;
}
void mpapStopGris()
{
	MPAPgris.stop();
	MPAPgris.setCurrentPosition(0);
	MPAPgris.disableOutputs();
	MPAPgrisRunning = false;
}
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.enableOutputs();
			MPAP1.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAP1Running = true;

			MPAP2.enableOutputs();
			MPAP2.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAP2Running = true;

			MPAP3.enableOutputs();
			MPAP3.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAP3Running = true;

			MPAP4.enableOutputs();
			MPAP4.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAP4Running = true;

			MPAP5.enableOutputs();
			MPAP5.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAP5Running = true;
			
			MPAP6.enableOutputs();
			MPAP6.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAP6Running = true;

			MPAP7.enableOutputs();
			MPAP7.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAP7Running = true;

			MPAProuge.enableOutputs();
			MPAProuge.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAProugeRunning = true;

			MPAPbleu.enableOutputs();
			MPAPbleu.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAPbleuRunning = true;

			MPAPjaune.enableOutputs();
			MPAPjaune.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAPjauneRunning = true;

			MPAPviolet.enableOutputs();
			MPAPviolet.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAPvioletRunning = true;

			MPAPgris.enableOutputs();
			MPAPgris.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAPgrisRunning = true;
		}
		else
		{
			//mpapStop();     // Quel MPAP?
		}
	}
	else if (cmd == "STOURS")     // sliderTours
	{
		Serial.println("Nombre de tours " + String(cmdParamInt));
		mpapNombreDeToursAtourner = (long)cmdParamInt;
	}
	else if (cmd == "SROUGE")     // slider Rouge
	{
		Serial.println("Rouge = " + String(cmdParamInt));
	}
	else if (cmd == "SBLEU")     // slider Bleu
	{
		Serial.println("Bleu = " + String(cmdParamInt));
	}
	else if (cmd == "SJAUNE")     // slider Jaune
	{
		Serial.println("Jaune = " + String(cmdParamInt));
	}
	else if (cmd == "SVIOLET")     // slider Violet
	{
		Serial.println("Violet = " + String(cmdParamInt));
	}
	else if (cmd == "SGRIS")     // slider Gris
	{
		Serial.println("Gris = " + String(cmdParamInt));
	}
	else if (cmd.startsWith("SIGT"))     // sliders IGT
	{
		cmd.replace("SIGT", "");     // Supprimer SIGT pour ne garder plus que l'index
		int sigtIndex = cmd.toInt();
		Serial.println("IGT" + String(sigtIndex) + " = " + String(cmdParamInt));
	}
	else if (cmd == "TEST")     // sliderTours
	{
		Serial.println("Test " + cmd);
	}
	else
	{
		Serial.print(F("Commande inconnue!!! ")); Serial.println(commande);
	}
}

void btSerialReception()
{
	if (btSerial.available())
	{
		cmdTexte = btSerial.readStringUntil('\n');

		cmdTexte.trim();

		cmdNouvelleRecue  = true;
	}
}

Je te laisses cogiter tout ça et poser les bonnes questions.
Il y a plein de print dans le moniteur, comme indications.

PS: Tout ton programme gagnerai en efficacité, surtout au niveau de la programmation et de sa gestion, en utilisant des tableaux, surtout que tu multiplies les objets comme les moteurs, les Scouleur, les SIGTx etc.
Mais ça sera la prochaine étape :wink:

A+
Cordialement
jpbbricole

oui pour les tableaux
il gagnerait aussi en efficacité et place mémoire en n'utilisant pas les String :wink:

Bonjour
J'ai remplacer les char par des bytes. J'ignore s'il est possible d'utiliser des tableaux pour des déclarations de moteur accelstepper donc je les ai laisser telles qu'elles et j'ai modifier le code de sorte à ce qu'il utilise des tableaux comme ceci:

//https://forum.arduino.cc/t/transfert-de-valeurs-numeriques-vers-arduino-mega-par-bluetooth/1036519/1

#define btSerial Serial1     // Port du bluetooth
#include "AccelStepper.h"

String Incoming_value = "";

const byte enable[] = {40, 43, 45, 46, 42, 44, 47, 49, 51, 12, 11, 10};
const byte enableNombre = sizeof(enable) / sizeof(byte);

//const char enable1 = 40;
//const char enable2 = 43;
//const char enable3 = 45;
//const char enable4 = 46;
//const char enable5 = 42;
//const char enable6 = 44;
//const char enable7 = 47;
//const char enableRouge = 49;
//const char enableBleu = 51;
//const char enableJaune = 12;
//const char enableViolet = 11;
//const char enableGris = 10;

const byte mpapDirReverse = 4;

boolean MPAPRunning[11];

//boolean MPAP1Running = false;
//boolean MPAP2Running = false;
//boolean MPAP3Running = false;
//boolean MPAP4Running = false;
//boolean MPAP5Running = false;
//boolean MPAP6Running = false;
//boolean MPAP7Running = false;
//boolean MPAProugeRunning = false;
//boolean MPAPbleuRunning = false;
//boolean MPAPjauneRunning = false;
//boolean MPAPvioletRunning = false;
//boolean MPAPgrisRunning = false;

const bool boutonPinEtatOn = LOW;

const byte mpapStepPin[] = {37, 39, 41, 6, 3, 38, 36, 8, 35, 9, 7, 5};
const byte stepNombre = sizeof(mpapStepPin) / sizeof(byte);

//const byte mpapStepPin1 = 37;
//const byte mpapStepPin2 = 39;
//const byte mpapStepPin3 = 41;
//const byte mpapStepPin4 = 6;
//const byte mpapStepPin5 = 3;
//const byte mpapStepPin6 = 38;
//const byte mpapStepPin7 = 36;
//const byte mpapStepPinRouge = 8;
//const byte mpapStepPinBleu = 35;
//const byte mpapStepPinJaune = 9;
//const byte mpapStepPinViolet = 7;
//const byte mpapStepPinGris = 5; 

AccelStepper MPAP1(1, mpapStepPin[0], mpapDirReverse);
AccelStepper MPAP2(1, mpapStepPin[1], mpapDirReverse);
AccelStepper MPAP3(1, mpapStepPin[2], mpapDirReverse);
AccelStepper MPAP4(1, mpapStepPin[3], mpapDirReverse);
AccelStepper MPAP5(1, mpapStepPin[4], mpapDirReverse);
AccelStepper MPAP6(1, mpapStepPin[5], mpapDirReverse);
AccelStepper MPAP7(1, mpapStepPin[6], mpapDirReverse);
AccelStepper MPAProuge(1, mpapStepPin[7], mpapDirReverse);
AccelStepper MPAPbleu(1, mpapStepPin[8], mpapDirReverse);
AccelStepper MPAPjaune(1, mpapStepPin[9], mpapDirReverse);
AccelStepper MPAPviolet(1, mpapStepPin[10], mpapDirReverse);
AccelStepper MPAPgris(1, mpapStepPin[11], mpapDirReverse);




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()
{
  // put your setup code here, to run once:
  Serial.begin(115200);
  btSerial.begin(9600);
  for (int e = 0; e < enableNombre; e ++)    
  {
    pinMode(enable[e], OUTPUT);
  }
  
  //--------------------------------- MPAP 1
  MPAP1.setMaxSpeed(400);
  MPAP1.setAcceleration(500);
  MPAP1.setEnablePin(enable[0]); //ligne ajoutée
  //                         DIR        STEP  ENA
  MPAP1.setPinsInverted(mpapDirReverse, false, true); //ligne modifiée
  //--------------------------------- MPAP 2
  MPAP2.setMaxSpeed(400);
  MPAP2.setAcceleration(500);
  MPAP2.setEnablePin(enable[1]); //ligne ajoutée
  MPAP2.setPinsInverted(mpapDirReverse, false, true); //ligne modifiée
  //--------------------------------- MPAP 3
  MPAP3.setMaxSpeed(400);
  MPAP3.setAcceleration(500);
  MPAP3.setEnablePin(enable[2]); //ligne ajoutée
  MPAP3.setPinsInverted(mpapDirReverse, false, true);//ligne modifiée
  //--------------------------------- MPAP 4
  MPAP4.setMaxSpeed(400);
  MPAP4.setAcceleration(500);
  MPAP4.setEnablePin(enable[3]);
  MPAP4.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAP 5
  MPAP5.setMaxSpeed(400);
  MPAP5.setAcceleration(500);
  MPAP5.setEnablePin(enable[4]);
  MPAP5.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAP 6
  MPAP6.setMaxSpeed(400);
  MPAP6.setAcceleration(500);
  MPAP6.setEnablePin(enable[5]);
  MPAP6.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAP 7
  MPAP7.setMaxSpeed(400);
  MPAP7.setAcceleration(500);
  MPAP7.setEnablePin(enable[6]);
  MPAP7.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAProuge
  MPAProuge.setMaxSpeed(400);
  MPAProuge.setAcceleration(500);
  MPAProuge.setEnablePin(enable[7]);
  MPAProuge.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAPbleu
  MPAPbleu.setMaxSpeed(400);
  MPAPbleu.setAcceleration(500);
  MPAPbleu.setEnablePin(enable[8]);
  MPAPbleu.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAPjaune
  MPAPjaune.setMaxSpeed(400);
  MPAPjaune.setAcceleration(500);
  MPAPjaune.setEnablePin(enable[9]);
  MPAPjaune.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAPviolet
  MPAPviolet.setMaxSpeed(400);
  MPAPviolet.setAcceleration(500);
  MPAPviolet.setEnablePin(enable[10]);
  MPAPviolet.setPinsInverted(mpapDirReverse, false, true);
  //--------------------------------- MPAPgris
  MPAPgris.setMaxSpeed(400);
  MPAPgris.setAcceleration(500);
  MPAPgris.setEnablePin(enable[11]);
  MPAPgris.setPinsInverted(mpapDirReverse, false, true);
}

void loop()
{
  //--------------------------------- Lire le port série du BT
  btSerialReception();
  if (cmdNouvelleRecue)      // Si une nouvelle commande depuis le moniteur
  {
    //Serial.println(cmdTexte);
    cmdExecute(cmdTexte);
    cmdTexte = "";
    cmdNouvelleRecue = false;
  }

  if (MPAP1.distanceToGo() == 0)
  {
  mpapStop1();
  }
  if (MPAP2.distanceToGo() == 0)
  {
  mpapStop2();
  }
  if (MPAP3.distanceToGo() == 0)
  {
  mpapStop3();
  }
  if (MPAP4.distanceToGo() == 0)
  {
  mpapStop4();
  }
  if (MPAP5.distanceToGo() == 0)
  {
  mpapStop5();
  }
  if (MPAP6.distanceToGo() == 0)
  {
  mpapStop6();
  }
  if (MPAP7.distanceToGo() == 0)
  {
  mpapStop7();
  }
  if (MPAProuge.distanceToGo() == 0)
  {
  mpapStopRouge();
  }
  if (MPAPbleu.distanceToGo() == 0)
  {
  mpapStopBleu();
  }
  if (MPAPjaune.distanceToGo() == 0)
  {
  mpapStopJaune();
  }
  if (MPAPviolet.distanceToGo() == 0)
  {
  mpapStopViolet();
  }
  if (MPAPgris.distanceToGo() == 0)
  {
  mpapStopGris();
  }
  MPAP1.run();
  MPAP2.run();
  MPAP3.run();
  MPAP4.run();
  MPAP5.run();
  MPAP6.run();
  MPAP7.run();
  MPAProuge.run();
  MPAPbleu.run();
  MPAPjaune.run();
  MPAPviolet.run();
  MPAPgris.run();
  //}
}

//------------------------------------- Arrêt des moteurs
void mpapStop1()
{
  MPAP1.stop();
  MPAP1.setCurrentPosition(0);
  MPAP1.disableOutputs();
  MPAPRunning[0] = false;
}
void mpapStop2()
{
  MPAP2.stop();
  MPAP2.setCurrentPosition(0);
  MPAP2.disableOutputs();
  MPAPRunning[1] = false;
}
void mpapStop3()
{
  MPAP3.stop();
  MPAP3.setCurrentPosition(0);
  MPAP3.disableOutputs();
  MPAPRunning[2] = false;
}
void mpapStop4()
{
  MPAP4.stop();
  MPAP4.setCurrentPosition(0);
  MPAP4.disableOutputs();
  MPAPRunning[3] = false;
}
void mpapStop5()
{
  MPAP5.stop();
  MPAP5.setCurrentPosition(0);
  MPAP5.disableOutputs();
  MPAPRunning[4] = false;
}
void mpapStop6()
{
  MPAP6.stop();
  MPAP6.setCurrentPosition(0);
  MPAP6.disableOutputs();
  MPAPRunning[5] = false;
}
void mpapStop7()
{
  MPAP7.stop();
  MPAP7.setCurrentPosition(0);
  MPAP7.disableOutputs();
  MPAPRunning[6] = false;
}
void mpapStopRouge()
{
  MPAProuge.stop();
  MPAProuge.setCurrentPosition(0);
  MPAProuge.disableOutputs();
  MPAPRunning[7] = false;
}
void mpapStopBleu()
{
  MPAPbleu.stop();
  MPAPbleu.setCurrentPosition(0);
  MPAPbleu.disableOutputs();
  MPAPRunning[8] = false;
}
void mpapStopJaune()
{
  MPAPjaune.stop();
  MPAPjaune.setCurrentPosition(0);
  MPAPjaune.disableOutputs();
  MPAPRunning[9] = false;
}
void mpapStopViolet()
{
  MPAPviolet.stop();
  MPAPviolet.setCurrentPosition(0);
  MPAPviolet.disableOutputs();
  MPAPRunning[10] = false;
}
void mpapStopGris()
{
  MPAPgris.stop();
  MPAPgris.setCurrentPosition(0);
  MPAPgris.disableOutputs();
  MPAPRunning[11] = false;
}
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.enableOutputs();
      MPAP1.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAPRunning[0] = true;

      MPAP2.enableOutputs();
      MPAP2.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAPRunning[1] = true;

      MPAP3.enableOutputs();
      MPAP3.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAPRunning[2] = true;

      MPAP4.enableOutputs();
      MPAP4.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAPRunning[3] = true;

      MPAP5.enableOutputs();
      MPAP5.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAPRunning[4] = true;
      
      MPAP6.enableOutputs();
      MPAP6.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAPRunning[5] = true;

      MPAP7.enableOutputs();
      MPAP7.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAPRunning[6] = true;

      MPAProuge.enableOutputs();
      MPAProuge.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAPRunning[7] = true;

      MPAPbleu.enableOutputs();
      MPAPbleu.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAPRunning[8] = true;

      MPAPjaune.enableOutputs();
      MPAPjaune.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAPRunning[9] = true;

      MPAPviolet.enableOutputs();
      MPAPviolet.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAPRunning[10] = true;

      MPAPgris.enableOutputs();
      MPAPgris.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
      MPAPRunning[11] = true;
    }
    else
    {
      //mpapStop();     // Quel MPAP?
    }
  }
  else if (cmd == "STOURS")     // sliderTours
  {
    Serial.println("Nombre de tours " + String(cmdParamInt));
    mpapNombreDeToursAtourner = (long)cmdParamInt;
  }
  else if (cmd == "SROUGE")     // slider Rouge
  {
    Serial.println("Rouge = " + String(cmdParamInt));
  }
  else if (cmd == "SBLEU")     // slider Bleu
  {
    Serial.println("Bleu = " + String(cmdParamInt));
  }
  else if (cmd == "SJAUNE")     // slider Jaune
  {
    Serial.println("Jaune = " + String(cmdParamInt));
  }
  else if (cmd == "SVIOLET")     // slider Violet
  {
    Serial.println("Violet = " + String(cmdParamInt));
  }
  else if (cmd == "SGRIS")     // slider Gris
  {
    Serial.println("Gris = " + String(cmdParamInt));
  }
  else if (cmd.startsWith("SIGT"))     // sliders IGT
  {
    cmd.replace("SIGT", "");     // Supprimer SIGT pour ne garder plus que l'index
    int sigtIndex = cmd.toInt();
    Serial.println("IGT" + String(sigtIndex) + " = " + String(cmdParamInt));
  }
  else if (cmd == "TEST")     // sliderTours
  {
    Serial.println("Test " + cmd);
  }
  else
  {
    Serial.print(F("Commande inconnue!!! ")); Serial.println(commande);
  }
}

void btSerialReception()
{
  if (btSerial.available())
  {
    cmdTexte = btSerial.readStringUntil('\n');

    cmdTexte.trim();

    cmdNouvelleRecue  = true;
  }
}

Ce que je souhaiterai c'est que par exemple si on lance les moteurs avec les réglages suivants:


Pour le moteur dédié à la couleur rouge, le nombre s'affichant dans la case à droite c'est à dire 7.14 soit envoyé puis que ce nombre soit multiplié par le nombre de pas à tourner. Pareil pour les autres couleurs et ingrédients.

Ainsi avec le réglage ci-dessus, théoriquement, le moteur dédié à l'ingrédient 7 devrait être celui qui tourne le plus longtemps, puis le reste des moteurs des autres ingrédients devraient s'arrêter en avant dernier en même temps, puis le moteur dédié à la couleur bleu avant lui, puis le moteur dédié à la couleur rouge avant lui, puis très peu avant celui dédié à la couleur violette, puis le moteur dédié à la couleur jaune avant lui, et enfin celui dédié à la couleur grise devrait être celui qui s'arrête en premier.
Si l'on appuis sur le bouton stop pendant que des moteurs sont encore entrain de tourner ceux-là doivent s'arrêter.

Lorsque je teste le code avec l'application, de mon coté les moteurs tournent en même temps, font deux tours puis s'arrêtent.

Cordialement

Bonjour enash

C'est possible, j'ai adapté, en partie, ton programme. Regardes comment ça se fait, le tableau s'appel MPAP[] et les moteurs sont indexés dans:

enum mpapIndex {mpap1, mpap2, mpap3, mpap4, mpap5, mpap6, mpap7, mpapRouge, mpapBleu, mpapJaune, mpapViolet, mpapGris};

Pour passer de l'ancienne version à la version en tableau, mets ces lignes en remarques,

//AccelStepper MPAP1(1, mpapStepPin[0], mpapDirReverse);
//AccelStepper MPAP2(1, mpapStepPin[1], mpapDirReverse);
//AccelStepper MPAP3(1, mpapStepPin[2], mpapDirReverse);
//AccelStepper MPAP4(1, mpapStepPin[3], mpapDirReverse);
//
//AccelStepper MPAP5(1, mpapStepPin[4], mpapDirReverse);
//AccelStepper MPAP6(1, mpapStepPin[5], mpapDirReverse);
//AccelStepper MPAP7(1, mpapStepPin[6], mpapDirReverse);
//AccelStepper MPAProuge(1, mpapStepPin[7], mpapDirReverse);
//
//AccelStepper MPAPbleu(1, mpapStepPin[8], mpapDirReverse);
//AccelStepper MPAPjaune(1, mpapStepPin[9], mpapDirReverse);
//AccelStepper MPAPviolet(1, mpapStepPin[10], mpapDirReverse);
//AccelStepper MPAPgris(1, mpapStepPin[11], mpapDirReverse);

compile et tu verra tout ce que tu as à adapter ou à supprimer.
J'ai adapté des fonctions comme exemple, signalé par // !!!!!.

//https://forum.arduino.cc/t/transfert-de-valeurs-numeriques-vers-arduino-mega-par-bluetooth/1036519/1

#define btSerial Serial1     // Port du bluetooth
#include "AccelStepper.h"

String Incoming_value = "";

const byte enable[] = {40, 43, 45, 46, 42, 44, 47, 49, 51, 12, 11, 10};
const byte enableNombre = sizeof(enable) / sizeof(byte);

//const char enable1 = 40;
//const char enable2 = 43;
//const char enable3 = 45;
//const char enable4 = 46;
//const char enable5 = 42;
//const char enable6 = 44;
//const char enable7 = 47;
//const char enableRouge = 49;
//const char enableBleu = 51;
//const char enableJaune = 12;
//const char enableViolet = 11;
//const char enableGris = 10;

const byte mpapDirReverse = 4;

boolean MPAPRunning[11];

//boolean MPAP1Running = false;
//boolean MPAP2Running = false;
//boolean MPAP3Running = false;
//boolean MPAP4Running = false;
//boolean MPAP5Running = false;
//boolean MPAP6Running = false;
//boolean MPAP7Running = false;
//boolean MPAProugeRunning = false;
//boolean MPAPbleuRunning = false;
//boolean MPAPjauneRunning = false;
//boolean MPAPvioletRunning = false;
//boolean MPAPgrisRunning = false;

const bool boutonPinEtatOn = LOW;
enum mpapIndex {mpap1, mpap2, mpap3, mpap4, mpap5, mpap6, mpap7, mpapRouge, mpapBleu, mpapJaune, mpapViolet, mpapGris};

const byte mpapStepPin[] = {37, 39, 41, 6, 3, 38, 36, 8, 35, 9, 7, 5};
const byte stepNombre = sizeof(mpapStepPin) / sizeof(byte);

//const byte mpapStepPin1 = 37;
//const byte mpapStepPin2 = 39;
//const byte mpapStepPin3 = 41;
//const byte mpapStepPin4 = 6;
//const byte mpapStepPin5 = 3;
//const byte mpapStepPin6 = 38;
//const byte mpapStepPin7 = 36;
//const byte mpapStepPinRouge = 8;
//const byte mpapStepPinBleu = 35;
//const byte mpapStepPinJaune = 9;
//const byte mpapStepPinViolet = 7;
//const byte mpapStepPinGris = 5;

AccelStepper MPAP1(1, mpapStepPin[0], mpapDirReverse);
AccelStepper MPAP2(1, mpapStepPin[1], mpapDirReverse);
AccelStepper MPAP3(1, mpapStepPin[2], mpapDirReverse);
AccelStepper MPAP4(1, mpapStepPin[3], mpapDirReverse);

AccelStepper MPAP5(1, mpapStepPin[4], mpapDirReverse);
AccelStepper MPAP6(1, mpapStepPin[5], mpapDirReverse);
AccelStepper MPAP7(1, mpapStepPin[6], mpapDirReverse);
AccelStepper MPAProuge(1, mpapStepPin[7], mpapDirReverse);

AccelStepper MPAPbleu(1, mpapStepPin[8], mpapDirReverse);
AccelStepper MPAPjaune(1, mpapStepPin[9], mpapDirReverse);
AccelStepper MPAPviolet(1, mpapStepPin[10], mpapDirReverse);
AccelStepper MPAPgris(1, mpapStepPin[11], mpapDirReverse);

//------------------------------------- Tableau de moteurs pas à pas
AccelStepper MPAP[] =
{
	AccelStepper (1, mpapStepPin[0], mpapDirReverse),
	AccelStepper (1, mpapStepPin[1], mpapDirReverse),
	AccelStepper (1, mpapStepPin[2], mpapDirReverse),
	AccelStepper (1, mpapStepPin[3], mpapDirReverse),
	AccelStepper (1, mpapStepPin[4], mpapDirReverse),
	AccelStepper (1, mpapStepPin[5], mpapDirReverse),
	AccelStepper (1, mpapStepPin[6], mpapDirReverse),
	AccelStepper (1, mpapStepPin[7], mpapDirReverse),
	AccelStepper (1, mpapStepPin[8], mpapDirReverse),
	AccelStepper (1, mpapStepPin[9], mpapDirReverse),
	AccelStepper (1, mpapStepPin[10], mpapDirReverse),
	AccelStepper (1, mpapStepPin[11], mpapDirReverse),
};



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()
{
	// put your setup code here, to run once:
	Serial.begin(115200);
	btSerial.begin(9600);
	for (int e = 0; e < enableNombre; e ++)
	{
		pinMode(enable[e], OUTPUT);
	}
	for (int m = 0; m < stepNombre; m ++)
	{
		MPAP[m].setMaxSpeed(400);
		MPAP[m].setAcceleration(500);
		MPAP[m].setEnablePin(enable[m]); //ligne ajoutée
		MPAP[m].setPinsInverted(mpapDirReverse, false, true); //ligne modifiée
	}
	
	
	//--------------------------------- MPAP 1
	MPAP1.setMaxSpeed(400);
	MPAP1.setAcceleration(500);
	MPAP1.setEnablePin(enable[0]); //ligne ajoutée
	//                         DIR        STEP  ENA
	MPAP1.setPinsInverted(mpapDirReverse, false, true); //ligne modifiée
	//--------------------------------- MPAP 2
	MPAP2.setMaxSpeed(400);
	MPAP2.setAcceleration(500);
	MPAP2.setEnablePin(enable[1]); //ligne ajoutée
	MPAP2.setPinsInverted(mpapDirReverse, false, true); //ligne modifiée
	//--------------------------------- MPAP 3
	MPAP3.setMaxSpeed(400);
	MPAP3.setAcceleration(500);
	MPAP3.setEnablePin(enable[2]); //ligne ajoutée
	MPAP3.setPinsInverted(mpapDirReverse, false, true);//ligne modifiée
	//--------------------------------- MPAP 4
	MPAP4.setMaxSpeed(400);
	MPAP4.setAcceleration(500);
	MPAP4.setEnablePin(enable[3]);
	MPAP4.setPinsInverted(mpapDirReverse, false, true);
	//--------------------------------- MPAP 5
	MPAP5.setMaxSpeed(400);
	MPAP5.setAcceleration(500);
	MPAP5.setEnablePin(enable[4]);
	MPAP5.setPinsInverted(mpapDirReverse, false, true);
	//--------------------------------- MPAP 6
	MPAP6.setMaxSpeed(400);
	MPAP6.setAcceleration(500);
	MPAP6.setEnablePin(enable[5]);
	MPAP6.setPinsInverted(mpapDirReverse, false, true);
	//--------------------------------- MPAP 7
	MPAP7.setMaxSpeed(400);
	MPAP7.setAcceleration(500);
	MPAP7.setEnablePin(enable[6]);
	MPAP7.setPinsInverted(mpapDirReverse, false, true);
	//--------------------------------- MPAProuge
	MPAProuge.setMaxSpeed(400);
	MPAProuge.setAcceleration(500);
	MPAProuge.setEnablePin(enable[7]);
	MPAProuge.setPinsInverted(mpapDirReverse, false, true);
	//--------------------------------- MPAPbleu
	MPAPbleu.setMaxSpeed(400);
	MPAPbleu.setAcceleration(500);
	MPAPbleu.setEnablePin(enable[8]);
	MPAPbleu.setPinsInverted(mpapDirReverse, false, true);
	//--------------------------------- MPAPjaune
	MPAPjaune.setMaxSpeed(400);
	MPAPjaune.setAcceleration(500);
	MPAPjaune.setEnablePin(enable[9]);
	MPAPjaune.setPinsInverted(mpapDirReverse, false, true);
	//--------------------------------- MPAPviolet
	MPAPviolet.setMaxSpeed(400);
	MPAPviolet.setAcceleration(500);
	MPAPviolet.setEnablePin(enable[10]);
	MPAPviolet.setPinsInverted(mpapDirReverse, false, true);
	//--------------------------------- MPAPgris
	MPAPgris.setMaxSpeed(400);
	MPAPgris.setAcceleration(500);
	MPAPgris.setEnablePin(enable[11]);
	MPAPgris.setPinsInverted(mpapDirReverse, false, true);
}

void loop()
{
	//--------------------------------- Lire le port série du BT
	btSerialReception();
	if (cmdNouvelleRecue)      // Si une nouvelle commande depuis le moniteur
	{
		//Serial.println(cmdTexte);
		cmdExecute(cmdTexte);
		cmdTexte = "";
		cmdNouvelleRecue = false;
	}

	if (MPAP[mpap1].distanceToGo() == 0)     // !!!!!
	{
		mpapStop(mpap1);
	}
	if (MPAP2.distanceToGo() == 0)
	{
		mpapStop2();
	}
	if (MPAP3.distanceToGo() == 0)
	{
		mpapStop3();
	}
	if (MPAP4.distanceToGo() == 0)
	{
		mpapStop4();
	}
	if (MPAP5.distanceToGo() == 0)
	{
		mpapStop5();
	}
	if (MPAP6.distanceToGo() == 0)
	{
		mpapStop6();
	}
	if (MPAP7.distanceToGo() == 0)
	{
		mpapStop7();
	}
	if (MPAProuge.distanceToGo() == 0)
	{
		mpapStopRouge();
	}
	if (MPAPbleu.distanceToGo() == 0)
	{
		mpapStopBleu();
	}
	if (MPAPjaune.distanceToGo() == 0)
	{
		mpapStopJaune();
	}
	if (MPAPviolet.distanceToGo() == 0)
	{
		mpapStopViolet();
	}
	if (MPAPgris.distanceToGo() == 0)
	{
		mpapStopGris();
	}
	for (int m = 0; m < stepNombre; m ++)     // !!!!!
	{
		MPAP[m].run();
	}

	MPAP1.run();
	MPAP2.run();
	MPAP3.run();
	MPAP4.run();
	MPAP5.run();
	MPAP6.run();
	MPAP7.run();
	MPAProuge.run();
	MPAPbleu.run();
	MPAPjaune.run();
	MPAPviolet.run();
	MPAPgris.run();
	//}
}

//------------------------------------- Arrêt des moteurs
void mpapStop(int mpapIndex)     // !!!!!
{
	MPAP[mpapIndex].stop();
	MPAP[mpapIndex].setCurrentPosition(0);
	MPAP[mpapIndex].disableOutputs();
	MPAPRunning[mpapIndex] = false;
}
void mpapStop1()
{
	MPAP1.stop();
	MPAP1.setCurrentPosition(0);
	MPAP1.disableOutputs();
	MPAPRunning[0] = false;
}
void mpapStop2()
{
	MPAP2.stop();
	MPAP2.setCurrentPosition(0);
	MPAP2.disableOutputs();
	MPAPRunning[1] = false;
}
void mpapStop3()
{
	MPAP3.stop();
	MPAP3.setCurrentPosition(0);
	MPAP3.disableOutputs();
	MPAPRunning[2] = false;
}
void mpapStop4()
{
	MPAP4.stop();
	MPAP4.setCurrentPosition(0);
	MPAP4.disableOutputs();
	MPAPRunning[3] = false;
}
void mpapStop5()
{
	MPAP5.stop();
	MPAP5.setCurrentPosition(0);
	MPAP5.disableOutputs();
	MPAPRunning[4] = false;
}
void mpapStop6()
{
	MPAP6.stop();
	MPAP6.setCurrentPosition(0);
	MPAP6.disableOutputs();
	MPAPRunning[5] = false;
}
void mpapStop7()
{
	MPAP7.stop();
	MPAP7.setCurrentPosition(0);
	MPAP7.disableOutputs();
	MPAPRunning[6] = false;
}
void mpapStopRouge()
{
	MPAProuge.stop();
	MPAProuge.setCurrentPosition(0);
	MPAProuge.disableOutputs();
	MPAPRunning[7] = false;
}
void mpapStopBleu()
{
	MPAPbleu.stop();
	MPAPbleu.setCurrentPosition(0);
	MPAPbleu.disableOutputs();
	MPAPRunning[8] = false;
}
void mpapStopJaune()
{
	MPAPjaune.stop();
	MPAPjaune.setCurrentPosition(0);
	MPAPjaune.disableOutputs();
	MPAPRunning[9] = false;
}
void mpapStopViolet()
{
	MPAPviolet.stop();
	MPAPviolet.setCurrentPosition(0);
	MPAPviolet.disableOutputs();
	MPAPRunning[10] = false;
}
void mpapStopGris()
{
	MPAPgris.stop();
	MPAPgris.setCurrentPosition(0);
	MPAPgris.disableOutputs();
	MPAPRunning[11] = false;
}
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
		{
			MPAP[mpap1].enableOutputs();     // !!!!!
			MPAP[mpap1].move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAPRunning[mpap1] = true;

			//MPAP1.enableOutputs();
			//MPAP1.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			//MPAPRunning[0] = true;

			MPAP2.enableOutputs();
			MPAP2.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAPRunning[1] = true;

			MPAP3.enableOutputs();
			MPAP3.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAPRunning[2] = true;

			MPAP4.enableOutputs();
			MPAP4.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAPRunning[3] = true;

			MPAP5.enableOutputs();
			MPAP5.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAPRunning[4] = true;
			
			MPAP6.enableOutputs();
			MPAP6.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAPRunning[5] = true;

			MPAP7.enableOutputs();
			MPAP7.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAPRunning[6] = true;

			MPAProuge.enableOutputs();
			MPAProuge.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAPRunning[7] = true;

			MPAPbleu.enableOutputs();
			MPAPbleu.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAPRunning[8] = true;

			MPAPjaune.enableOutputs();
			MPAPjaune.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAPRunning[9] = true;

			MPAPviolet.enableOutputs();
			MPAPviolet.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAPRunning[10] = true;

			MPAPgris.enableOutputs();
			MPAPgris.move(mpapNombreDeToursAtourner * mpapNombreDePasAtourner);
			MPAPRunning[11] = true;
		}
		else
		{
			//mpapStop();     // Quel MPAP?
		}
	}
	else if (cmd == F("STOURS"))     // sliderTours
	{
		Serial.println("Nombre de tours " + String(cmdParamInt));
		mpapNombreDeToursAtourner = (long)cmdParamInt;
	}
	else if (cmd == F("SROUGE"))     // slider Rouge
	{
		Serial.println("Rouge = " + String(cmdParamFloat));
	}
	else if (cmd == F("SBLEU"))     // slider Bleu
	{
		Serial.println("Bleu = " + String(cmdParamFloat));
	}
	else if (cmd == F("SJAUNE"))     // slider Jaune
	{
		Serial.println("Jaune = " + String(cmdParamFloat));
	}
	else if (cmd == F("SVIOLET"))     // slider Violet
	{
		Serial.println("Violet = " + String(cmdParamFloat));
	}
	else if (cmd == F("SGRIS"))     // slider Gris
	{
		Serial.println("Gris = " + String(cmdParamFloat));
	}
	else if (cmd.startsWith(F("SIGT")))     // sliders IGT
	{
		cmd.replace("SIGT", "");     // Supprimer SIGT pour ne garder plus que l'index
		int sigtIndex = cmd.toInt();
		Serial.println("IGT" + String(sigtIndex) + " = " + String(cmdParamFloat));
	}
	else if (cmd == F("TEST"))     // sliderTours
	{
		Serial.println("Test " + cmd);
	}
	else
	{
		Serial.print(F("Commande inconnue!!! ")); Serial.println(commande);
	}
}

void btSerialReception()
{
	if (btSerial.available())
	{
		cmdTexte = btSerial.readStringUntil('\n');

		cmdTexte.trim();

		cmdNouvelleRecue  = true;
	}
}

Il y a, peut être d'autres parties à adapter, mais c'est un début.
Je n'ai pas essayé, mais ça compile :wink:

A+
Cordialement
jpbbricole

Bonjour enash

Tu as tout ce qu'il te faut dans la partie:

	else if (cmd == "SROUGE")     // slider Rouge
	{
		Serial.println("Rouge = " + String(cmdParamFloat));
	}
	else if (cmd == "SBLEU")     // slider Bleu

et suivant.
La variable attribuée à cette couleur ou autre, est, à cet endroit cmdParamFloat, à toi de multiplier ça avec mpapNombreDeToursAtourner, je suppose.
Le problème est que MAI n'envoie que des int:

SROUGE=8
SBLEU=5
SJAUNE=5
SVIOLET=5
SGRIS=5
SIGT1=81
SIGT2=53
SIGT3=53
SIGT4=53
SIGT5=53
SIGT6=53
SIGT7=53
BSTART=1

Tu devra modifier ton script.

Cordialement
jpbbricole

1 Like

Bonsoir enash

Tu dois passer
image
en
image

Cordialement
jpbbricole

1 Like