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:
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:
Comment fait-on pour faire en sorte qu'un programme puisse recevoir et traiter jusqu'à 12 valeurs différentes par bluetooth ?
Cordialement