Bonjour
Je dispose de 3 programmes sur arduino mega obtenu à l'aide de sujets précédents qui permettent de piloter des moteurs pas à pas différemment à travers une application sur MAI (MIT App Inventor) et pour le même montage. Dans le montage les pattes dir des drivers sont toutes reliées à la broche 4.
Le premier programme permet de faire tourner un moteur pas à pas quand on appuie sur le bouton virtuel qui lui est dédié:
#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 mpapDirReverse = 4; //Seul Dir (ligne ajoutée)
boolean MPAPRunning[11];
const bool boutonPinEtatOn = LOW;
enum mpapIndex {mpapIndex1, mpapIndex2, mpapIndex3, mpapIndex4, mpapIndex5, mpapIndex6, mpapIndex7,
mpapIndexRouge, mpapIndexBleu, mpapIndexJaune, mpapIndexViolet, mpapIndexGris};
const byte mpapStepPin[] = {37, 39, 41, 6, 3, 38, 36, 8, 35, 9, 7, 5};
const byte stepNombre = sizeof(mpapStepPin) / sizeof(byte);
const byte stepperDriverType = AccelStepper::DRIVER;
const byte mpapDirReversePin = 4;
//------------------------------------- Tableau de moteurs pas à pas
AccelStepper MPAP[] =
{
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex1], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex2], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex3], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex4], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex5], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex6], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex7], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndexRouge], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndexBleu], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndexJaune], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndexViolet], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndexGris], mpapDirReversePin},
};
const byte nombreMPAP = sizeof MPAP / sizeof * MPAP;
long mpapNombreDeToursAtourner = 2;
long mpapNombreDePasAtourner = 200;
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(mpapDirReversePin, false, true); //ligne modifiée
}
}
void loop()
{
if (btSerial.available())
{
Incoming_value = btSerial.readStringUntil('\n');
Incoming_value.trim(); // Nettoyage de Incoming_value
Serial.println("Recu : " + Incoming_value);
//----------------------------- MPAP1
if (Incoming_value == "MPAP1")
{
MPAP[mpapIndex1].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndex1] = true;
}
if (Incoming_value == "nonMPAP1")
{
MPAP[mpapIndex1].stop();
MPAP[mpapIndex1].setCurrentPosition(0);
MPAP[mpapIndex1].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndex1] = false;
}
//----------------------------- MPAP2
if (Incoming_value == "MPAP2")
{
MPAP[mpapIndex2].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndex2] = true;
}
if (Incoming_value == "nonMPAP2")
{
MPAP[mpapIndex2].stop();
MPAP[mpapIndex2].setCurrentPosition(0);
MPAP[mpapIndex2].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndex2] = false;
}
//----------------------------- MPAP3
if (Incoming_value == "MPAP3")
{
MPAP[mpapIndex3].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndex3] = true;
}
if (Incoming_value == "nonMPAP3")
{
MPAP[mpapIndex3].stop();
MPAP[mpapIndex3].setCurrentPosition(0);
MPAP[mpapIndex3].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndex3] = false;
}
//----------------------------- MPAP4
if (Incoming_value == "MPAP4")
{
MPAP[mpapIndex4].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndex4] = true;
}
if (Incoming_value == "nonMPAP4")
{
MPAP[mpapIndex4].stop();
MPAP[mpapIndex4].setCurrentPosition(0);
MPAP[mpapIndex4].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndex4] = false;
}
//----------------------------- MPAP5
if (Incoming_value == "MPAP5")
{
MPAP[mpapIndex5].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndex5] = true;
}
if (Incoming_value == "nonMPAP5")
{
MPAP[mpapIndex5].stop();
MPAP[mpapIndex5].setCurrentPosition(0);
MPAP[mpapIndex5].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndex5] = false;
}
//----------------------------- MPAP6
if (Incoming_value == "MPAP6")
{
MPAP[mpapIndex6].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndex6] = true;
}
if (Incoming_value == "nonMPAP6")
{
MPAP[mpapIndex6].stop();
MPAP[mpapIndex6].setCurrentPosition(0);
MPAP[mpapIndex6].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndex6] = false;
}
//----------------------------- MPAP7
if (Incoming_value == "MPAP7")
{
MPAP[mpapIndex7].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndex7] = true;
}
if (Incoming_value == "nonMPAP7")
{
MPAP[mpapIndex7].stop();
MPAP[mpapIndex7].setCurrentPosition(0);
MPAP[mpapIndex7].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndex7] = false;
}
//----------------------------- MPAProuge
if (Incoming_value == "MPAProuge")
{
MPAP[mpapIndexRouge].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndexRouge] = true;
}
if (Incoming_value == "nonMPAProuge")
{
MPAP[mpapIndexRouge].stop();
MPAP[mpapIndexRouge].setCurrentPosition(0);
MPAP[mpapIndexRouge].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndexRouge] = false;
}
//----------------------------- MPAPbleu
if (Incoming_value == "MPAPbleu")
{
MPAP[mpapIndexBleu].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndexBleu] = true;
}
if (Incoming_value == "nonMPAPbleu")
{
MPAP[mpapIndexBleu].stop();
MPAP[mpapIndexBleu].setCurrentPosition(0);
MPAP[mpapIndexBleu].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndexBleu] = false;
}
//----------------------------- MPAPjaune
if (Incoming_value == "MPAPjaune")
{
MPAP[mpapIndexJaune].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndexJaune] = true;
}
if (Incoming_value == "nonMPAPjaune")
{
MPAP[mpapIndexJaune].stop();
MPAP[mpapIndexJaune].setCurrentPosition(0);
MPAP[mpapIndexJaune].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndexJaune] = false;
}
//----------------------------- MPAPviolet
if (Incoming_value == "MPAPviolet")
{
MPAP[mpapIndexViolet].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndexViolet] = true;
}
if (Incoming_value == "nonMPAPviolet")
{
MPAP[mpapIndexViolet].stop();
MPAP[mpapIndexViolet].setCurrentPosition(0);
MPAP[mpapIndexViolet].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndexViolet] = false;
}
//----------------------------- MPAPgris
if (Incoming_value == "MPAPgris")
{
MPAP[mpapIndexGris].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndexGris] = true;
}
if (Incoming_value == "nonMPAPgris")
{
MPAP[mpapIndexGris].stop();
MPAP[mpapIndexGris].setCurrentPosition(0);
MPAP[mpapIndexGris].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndexGris] = false;
}
}
if (MPAPRunning[mpapIndex1])
{
MPAP[mpapIndex1].move(mpapNombreDePasAtourner);
//Serial.println("MPAP 1");
MPAP[mpapIndex1].run();
}
if (MPAPRunning[mpapIndex2])
{
MPAP[mpapIndex2].move(mpapNombreDePasAtourner);
//Serial.println("MPAP 2");
MPAP[mpapIndex2].run();
}
if (MPAPRunning[mpapIndex3])
{
MPAP[mpapIndex3].move(mpapNombreDePasAtourner);
//Serial.println("MPAP 3");
MPAP[mpapIndex3].run();
}
if (MPAPRunning[mpapIndex4])
{
MPAP[mpapIndex4].move(mpapNombreDePasAtourner);
//Serial.println("MPAP 4");
MPAP[mpapIndex4].run();
}
if (MPAPRunning[mpapIndex5])
{
MPAP[mpapIndex5].move(mpapNombreDePasAtourner);
//Serial.println("MPAP 5");
MPAP[mpapIndex5].run();
}
if (MPAPRunning[mpapIndex6])
{
MPAP[mpapIndex6].move(mpapNombreDePasAtourner);
//Serial.println("MPAP 6");
MPAP[mpapIndex6].run();
}
if (MPAPRunning[mpapIndex7])
{
MPAP[mpapIndex7].move(mpapNombreDePasAtourner);
//Serial.println("MPAP 7");
MPAP[mpapIndex7].run();
}
if (MPAPRunning[mpapIndexRouge])
{
MPAP[mpapIndexRouge].move(mpapNombreDePasAtourner);
//Serial.println("MPAP rouge");
MPAP[mpapIndexRouge].run();
}
if (MPAPRunning[mpapIndexBleu])
{
MPAP[mpapIndexBleu].move(mpapNombreDePasAtourner);
//Serial.println("MPAP bleu");
MPAP[mpapIndexBleu].run();
}
if (MPAPRunning[mpapIndexJaune])
{
MPAP[mpapIndexJaune].move(mpapNombreDePasAtourner);
//Serial.println("MPAP jaune");
MPAP[mpapIndexJaune].run();
}
if (MPAPRunning[mpapIndexViolet])
{
MPAP[mpapIndexViolet].move(mpapNombreDePasAtourner);
//Serial.println("MPAP violet");
MPAP[mpapIndexViolet].run();
}
if (MPAPRunning[mpapIndexGris])
{
MPAP[mpapIndexGris].move(mpapNombreDePasAtourner);
//Serial.println("MPAP gris");
MPAP[mpapIndexGris].run();
}
}
avec l'application MAI suivante:
Plusieurs_moteur_mpap_a_l_appuie (2).zip (3,9 Ko)
Le deuxième permet d'allumer ou d'éteindre des relais et de mettre en marche ou d'arrêter un moteur à courant continue:
const int relaisPin[] = {22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34}; // Liste des pin des relais
const int relaisNombre = sizeof(relaisPin) / sizeof(int); // Calcul du nombre de relais
const int relaisEtatOn = HIGH; // Etat pour faire tirer le relais
String Incoming_value; // Chaîne reçue de App Inventor via Bluetooth
void setup()
{
//--------------------------------- Serial 1 Rx = 19 Tx = 18
Serial1.begin(9600);
Serial1.setTimeout(50); // Pour fin des commandes depuis Bluetooth
for (int r = 0; r < relaisNombre; r ++) // Initialisation des pin des relais
{
pinMode(relaisPin[r], OUTPUT);
digitalWrite(relaisPin[r], !relaisEtatOn); // Relais à OFF
}
}
void loop()
{
if(Serial1.available() > 0)
{
Incoming_value = Serial1.readString();
Serial.print(Incoming_value);
Serial.print("\n");
//moteur à courant continu
if(Incoming_value == "mcc")
digitalWrite(relaisPin[12], relaisEtatOn);
else if(Incoming_value == "nonMcc")
digitalWrite(relaisPin[12], !relaisEtatOn);
//rouge
if(Incoming_value == "rouge") // ON 1
digitalWrite(relaisPin[11], relaisEtatOn);
else if(Incoming_value == "nonRouge")
digitalWrite(relaisPin[11], !relaisEtatOn);
//jaune
else if(Incoming_value == "jaune") // ON 2
digitalWrite(relaisPin[10], relaisEtatOn);
else if(Incoming_value == "nonJaune")
digitalWrite(relaisPin[10], !relaisEtatOn);
//bleu
else if(Incoming_value == "bleu") // ON 3
digitalWrite(relaisPin[9], relaisEtatOn);
else if(Incoming_value == "nonBleu")
digitalWrite(relaisPin[9], !relaisEtatOn);
//gris
else if(Incoming_value == "gris") // ON 4
digitalWrite(relaisPin[8], relaisEtatOn);
else if(Incoming_value == "nonGris")
digitalWrite(relaisPin[8], !relaisEtatOn);
//violet
else if(Incoming_value == "violet") // ON 5
digitalWrite(relaisPin[7], relaisEtatOn);
else if(Incoming_value == "nonViolet")
digitalWrite(relaisPin[7], !relaisEtatOn);
//ing1
else if(Incoming_value == "ing1") // ON 6
digitalWrite(relaisPin[6], relaisEtatOn);
else if(Incoming_value == "nonIng1")
digitalWrite(relaisPin[6], !relaisEtatOn);
//ing2
else if(Incoming_value == "ing2") // ON 7
digitalWrite(relaisPin[5], relaisEtatOn);
else if(Incoming_value == "nonIng2")
digitalWrite(relaisPin[5], !relaisEtatOn);
//ing3
else if(Incoming_value == "ing3") // ON 8
digitalWrite(relaisPin[4], relaisEtatOn);
else if(Incoming_value == "nonIng3")
digitalWrite(relaisPin[4], !relaisEtatOn);
//ing4
else if(Incoming_value == "ing4") // ON 9
digitalWrite(relaisPin[3], relaisEtatOn);
else if(Incoming_value == "nonIng4")
digitalWrite(relaisPin[3], !relaisEtatOn);
//ing5
else if(Incoming_value == "ing5") // ON 10
digitalWrite(relaisPin[2], relaisEtatOn);
else if(Incoming_value == "nonIng5")
digitalWrite(relaisPin[2], !relaisEtatOn);
//ing6
else if(Incoming_value == "ing6") // ON 11
digitalWrite(relaisPin[1], relaisEtatOn);
else if(Incoming_value == "nonIng6")
digitalWrite(relaisPin[1], !relaisEtatOn);
//ing7
else if(Incoming_value == "ing7") // ON 12
digitalWrite(relaisPin[0], relaisEtatOn);
else if(Incoming_value == "nonIng7")
digitalWrite(relaisPin[0], !relaisEtatOn);
}
}
à l'aide de l'application suivante:
Relais_B_avec_MCC.zip (4,2 Ko)
Et enfin le troisième permet de faire tourner en même temps un groupe de moteurs pas à pas dans un sens ou dans l'autre ou bien de les arrêter:
#define btSerial Serial1
#define CONTINUE 0x7FFF
#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);
//int CONTINUE = 32767;
enum mpapIndex {mpapIndex1, mpapIndex2, mpapIndex3, mpapIndex4, mpapIndex5, mpapIndex6, mpapIndex7,
mpapIndexRouge, mpapIndexBleu, mpapIndexJaune, mpapIndexViolet, mpapIndexGris};
const byte mpapStepPin[] = {37, 39, 41, 6, 3, 38, 36, 8, 35, 9, 7, 5};
const byte stepNombre = sizeof(mpapStepPin) / sizeof(byte);
const byte stepperDriverType = AccelStepper::DRIVER;
const byte mpapDirReversePin = 4;
//------------------------------------- Tableau de moteurs pas à pas
AccelStepper MPAP[] =
{
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex1], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex2], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex3], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex4], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex5], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex6], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex7], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndexRouge], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndexBleu], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndexJaune], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndexViolet], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndexGris], mpapDirReversePin},
};
const byte nombreMPAP = sizeof MPAP / sizeof * MPAP;
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(mpapDirReversePin, false, true); //ligne modifiée
}
}
void loop() {
// put your main code here, to run repeatedly:
if (btSerial.available())
{
Incoming_value = btSerial.readStringUntil('\n');
Incoming_value.trim(); // Nettoyage de Incoming_value
Serial.println("Recu : " + Incoming_value);
if (Incoming_value == "marcheAv")
{
for (int y = 0; y < nombreMPAP; y ++)
{
MPAP[y].enableOutputs();
MPAP[y].move(CONTINUE);
}
}
if (Incoming_value == "marcheAr")
{
for (int y = 0; y < nombreMPAP; y ++)
{
MPAP[y].enableOutputs();
MPAP[y].move(-CONTINUE);
}
}
if (Incoming_value == "stopMoteurs")
{
for (int y = 0; y < nombreMPAP; y ++)
{
MPAP[y].stop();
MPAP[y].disableOutputs();
}
}
}
for (int y = 0; y < nombreMPAP; y ++)
{
MPAP[y].run();
}
}
à l'aide de l'application suivante:
Marche_AvAr_fini.zip (2,1 Ko)
J'aimerai les associés afin d'avoir un seul programme qui fonctionne avec les trois applications mais un problème est survenu lorsque je les ai combinés de la manière suivante:
#define btSerial Serial1
#define CONTINUE 0x7FFF
#include "AccelStepper.h"
const int relaisPin[] = {22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34}; // Liste des pin des relais
const int relaisNombre = sizeof(relaisPin) / sizeof(int); // Calcul du nombre de relais
const int relaisEtatOn = HIGH; // Etat pour faire tirer le relais
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);
//int CONTINUE = 32767;
enum mpapIndex {mpapIndex1, mpapIndex2, mpapIndex3, mpapIndex4, mpapIndex5, mpapIndex6, mpapIndex7,
mpapIndexRouge, mpapIndexBleu, mpapIndexJaune, mpapIndexViolet, mpapIndexGris};
const byte mpapStepPin[] = {37, 39, 41, 6, 3, 38, 36, 8, 35, 9, 7, 5};
const byte stepNombre = sizeof(mpapStepPin) / sizeof(byte);
const byte stepperDriverType = AccelStepper::DRIVER;
const byte mpapDirReversePin = 4;
boolean MPAPRunning[11];
//------------------------------------- Tableau de moteurs pas à pas
AccelStepper MPAP[] =
{
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex1], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex2], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex3], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex4], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex5], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex6], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndex7], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndexRouge], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndexBleu], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndexJaune], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndexViolet], mpapDirReversePin},
AccelStepper {stepperDriverType, mpapStepPin[mpapIndexGris], mpapDirReversePin},
};
const byte nombreMPAP = sizeof MPAP / sizeof * MPAP;
long mpapNombreDeToursAtourner = 2;
long mpapNombreDePasAtourner = 200;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial1.setTimeout(50); // Pour fin des commandes depuis Bluetooth
btSerial.begin(9600);
for (int r = 0; r < relaisNombre; r ++) // Initialisation des pin des relais
{
pinMode(relaisPin[r], OUTPUT);
digitalWrite(relaisPin[r], !relaisEtatOn); // Relais à OFF
}
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(mpapDirReversePin, false, true); //ligne modifiée
}
}
void loop() {
// put your main code here, to run repeatedly:
if (btSerial.available())
{
Incoming_value = btSerial.readStringUntil('\n');
Incoming_value.trim(); // Nettoyage de Incoming_value
Serial.println("Recu : " + Incoming_value);
//----------------------------- MPAP1
if (Incoming_value == "MPAP1")
{
MPAP[mpapIndex1].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndex1] = true;
}
else if (Incoming_value == "nonMPAP1")
{
MPAP[mpapIndex1].stop();
MPAP[mpapIndex1].setCurrentPosition(0);
MPAP[mpapIndex1].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndex1] = false;
}
//----------------------------- MPAP2
else if (Incoming_value == "MPAP2")
{
MPAP[mpapIndex2].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndex2] = true;
}
else if (Incoming_value == "nonMPAP2")
{
MPAP[mpapIndex2].stop();
MPAP[mpapIndex2].setCurrentPosition(0);
MPAP[mpapIndex2].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndex2] = false;
}
//----------------------------- MPAP3
else if (Incoming_value == "MPAP3")
{
MPAP[mpapIndex3].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndex3] = true;
}
else if (Incoming_value == "nonMPAP3")
{
MPAP[mpapIndex3].stop();
MPAP[mpapIndex3].setCurrentPosition(0);
MPAP[mpapIndex3].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndex3] = false;
}
//----------------------------- MPAP4
else if (Incoming_value == "MPAP4")
{
MPAP[mpapIndex4].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndex4] = true;
}
else if (Incoming_value == "nonMPAP4")
{
MPAP[mpapIndex4].stop();
MPAP[mpapIndex4].setCurrentPosition(0);
MPAP[mpapIndex4].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndex4] = false;
}
//----------------------------- MPAP5
else if (Incoming_value == "MPAP5")
{
MPAP[mpapIndex5].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndex5] = true;
}
else if (Incoming_value == "nonMPAP5")
{
MPAP[mpapIndex5].stop();
MPAP[mpapIndex5].setCurrentPosition(0);
MPAP[mpapIndex5].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndex5] = false;
}
//----------------------------- MPAP6
else if (Incoming_value == "MPAP6")
{
MPAP[mpapIndex6].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndex6] = true;
}
else if (Incoming_value == "nonMPAP6")
{
MPAP[mpapIndex6].stop();
MPAP[mpapIndex6].setCurrentPosition(0);
MPAP[mpapIndex6].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndex6] = false;
}
//----------------------------- MPAP7
else if (Incoming_value == "MPAP7")
{
MPAP[mpapIndex7].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndex7] = true;
}
else if (Incoming_value == "nonMPAP7")
{
MPAP[mpapIndex7].stop();
MPAP[mpapIndex7].setCurrentPosition(0);
MPAP[mpapIndex7].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndex7] = false;
}
//----------------------------- MPAProuge
else if (Incoming_value == "MPAProuge")
{
MPAP[mpapIndexRouge].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndexRouge] = true;
}
else if (Incoming_value == "nonMPAProuge")
{
MPAP[mpapIndexRouge].stop();
MPAP[mpapIndexRouge].setCurrentPosition(0);
MPAP[mpapIndexRouge].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndexRouge] = false;
}
//----------------------------- MPAPbleu
else if (Incoming_value == "MPAPbleu")
{
MPAP[mpapIndexBleu].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndexBleu] = true;
}
else if (Incoming_value == "nonMPAPbleu")
{
MPAP[mpapIndexBleu].stop();
MPAP[mpapIndexBleu].setCurrentPosition(0);
MPAP[mpapIndexBleu].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndexBleu] = false;
}
//----------------------------- MPAPjaune
else if (Incoming_value == "MPAPjaune")
{
MPAP[mpapIndexJaune].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndexJaune] = true;
}
else if (Incoming_value == "nonMPAPjaune")
{
MPAP[mpapIndexJaune].stop();
MPAP[mpapIndexJaune].setCurrentPosition(0);
MPAP[mpapIndexJaune].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndexJaune] = false;
}
//----------------------------- MPAPviolet
else if (Incoming_value == "MPAPviolet")
{
MPAP[mpapIndexViolet].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndexViolet] = true;
}
else if (Incoming_value == "nonMPAPviolet")
{
MPAP[mpapIndexViolet].stop();
MPAP[mpapIndexViolet].setCurrentPosition(0);
MPAP[mpapIndexViolet].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndexViolet] = false;
}
//----------------------------- MPAPgris
else if (Incoming_value == "MPAPgris")
{
MPAP[mpapIndexGris].enableOutputs(); // Activer les signaux du MPAP
MPAPRunning[mpapIndexGris] = true;
}
else if (Incoming_value == "nonMPAPgris")
{
MPAP[mpapIndexGris].stop();
MPAP[mpapIndexGris].setCurrentPosition(0);
MPAP[mpapIndexGris].disableOutputs(); // Desactiver les signaux du MPAP (ligne ajoutée)
MPAPRunning[mpapIndexGris] = false;
}
//moteur à courant continu
else if(Incoming_value == "mcc")
digitalWrite(relaisPin[12], relaisEtatOn);
else if(Incoming_value == "nonMcc")
digitalWrite(relaisPin[12], !relaisEtatOn);
//rouge
else if(Incoming_value == "rouge") // ON 1
digitalWrite(relaisPin[11], relaisEtatOn);
else if(Incoming_value == "nonRouge")
digitalWrite(relaisPin[11], !relaisEtatOn);
//jaune
else if(Incoming_value == "jaune") // ON 2
digitalWrite(relaisPin[10], relaisEtatOn);
else if(Incoming_value == "nonJaune")
digitalWrite(relaisPin[10], !relaisEtatOn);
//bleu
else if(Incoming_value == "bleu") // ON 3
digitalWrite(relaisPin[9], relaisEtatOn);
else if(Incoming_value == "nonBleu")
digitalWrite(relaisPin[9], !relaisEtatOn);
//gris
else if(Incoming_value == "gris") // ON 4
digitalWrite(relaisPin[8], relaisEtatOn);
else if(Incoming_value == "nonGris")
digitalWrite(relaisPin[8], !relaisEtatOn);
//violet
else if(Incoming_value == "violet") // ON 5
digitalWrite(relaisPin[7], relaisEtatOn);
else if(Incoming_value == "nonViolet")
digitalWrite(relaisPin[7], !relaisEtatOn);
//ing1
else if(Incoming_value == "ing1") // ON 6
digitalWrite(relaisPin[6], relaisEtatOn);
else if(Incoming_value == "nonIng1")
digitalWrite(relaisPin[6], !relaisEtatOn);
//ing2
else if(Incoming_value == "ing2") // ON 7
digitalWrite(relaisPin[5], relaisEtatOn);
else if(Incoming_value == "nonIng2")
digitalWrite(relaisPin[5], !relaisEtatOn);
//ing3
else if(Incoming_value == "ing3") // ON 8
digitalWrite(relaisPin[4], relaisEtatOn);
else if(Incoming_value == "nonIng3")
digitalWrite(relaisPin[4], !relaisEtatOn);
//ing4
else if(Incoming_value == "ing4") // ON 9
digitalWrite(relaisPin[3], relaisEtatOn);
else if(Incoming_value == "nonIng4")
digitalWrite(relaisPin[3], !relaisEtatOn);
//ing5
else if(Incoming_value == "ing5") // ON 10
digitalWrite(relaisPin[2], relaisEtatOn);
else if(Incoming_value == "nonIng5")
digitalWrite(relaisPin[2], !relaisEtatOn);
//ing6
else if(Incoming_value == "ing6") // ON 11
digitalWrite(relaisPin[1], relaisEtatOn);
else if(Incoming_value == "nonIng6")
digitalWrite(relaisPin[1], !relaisEtatOn);
//ing7
else if(Incoming_value == "ing7") // ON 12
digitalWrite(relaisPin[0], relaisEtatOn);
else if(Incoming_value == "nonIng7")
digitalWrite(relaisPin[0], !relaisEtatOn);
else if (Incoming_value == "marcheAv")
{
for (int y = 0; y < nombreMPAP; y ++)
{
MPAP[y].enableOutputs();
MPAP[y].move(CONTINUE);
}
}
else if (Incoming_value == "marcheAr")
{
for (int y = 0; y < nombreMPAP; y ++)
{
MPAP[y].enableOutputs();
MPAP[y].move(-CONTINUE);
}
}
else if (Incoming_value == "stopMoteurs")
{
for (int y = 0; y < nombreMPAP; y ++)
{
MPAP[y].stop();
MPAP[y].disableOutputs();
}
}
}
if (MPAPRunning[mpapIndex1])
{
MPAP[mpapIndex1].move(mpapNombreDePasAtourner);
//Serial.println("MPAP 1");
MPAP[mpapIndex1].run();
}
if (MPAPRunning[mpapIndex2])
{
MPAP[mpapIndex2].move(mpapNombreDePasAtourner);
//Serial.println("MPAP 2");
MPAP[mpapIndex2].run();
}
if (MPAPRunning[mpapIndex3])
{
MPAP[mpapIndex3].move(mpapNombreDePasAtourner);
//Serial.println("MPAP 3");
MPAP[mpapIndex3].run();
}
if (MPAPRunning[mpapIndex4])
{
MPAP[mpapIndex4].move(mpapNombreDePasAtourner);
//Serial.println("MPAP 4");
MPAP[mpapIndex4].run();
}
if (MPAPRunning[mpapIndex5])
{
MPAP[mpapIndex5].move(mpapNombreDePasAtourner);
//Serial.println("MPAP 5");
MPAP[mpapIndex5].run();
}
if (MPAPRunning[mpapIndex6])
{
MPAP[mpapIndex6].move(mpapNombreDePasAtourner);
//Serial.println("MPAP 6");
MPAP[mpapIndex6].run();
}
if (MPAPRunning[mpapIndex7])
{
MPAP[mpapIndex7].move(mpapNombreDePasAtourner);
//Serial.println("MPAP 7");
MPAP[mpapIndex7].run();
}
if (MPAPRunning[mpapIndexRouge])
{
MPAP[mpapIndexRouge].move(mpapNombreDePasAtourner);
//Serial.println("MPAP rouge");
MPAP[mpapIndexRouge].run();
}
if (MPAPRunning[mpapIndexBleu])
{
MPAP[mpapIndexBleu].move(mpapNombreDePasAtourner);
//Serial.println("MPAP bleu");
MPAP[mpapIndexBleu].run();
}
if (MPAPRunning[mpapIndexJaune])
{
MPAP[mpapIndexJaune].move(mpapNombreDePasAtourner);
//Serial.println("MPAP jaune");
MPAP[mpapIndexJaune].run();
}
if (MPAPRunning[mpapIndexViolet])
{
MPAP[mpapIndexViolet].move(mpapNombreDePasAtourner);
//Serial.println("MPAP violet");
MPAP[mpapIndexViolet].run();
}
if (MPAPRunning[mpapIndexGris])
{
MPAP[mpapIndexGris].move(mpapNombreDePasAtourner);
//Serial.println("MPAP gris");
MPAP[mpapIndexGris].run();
}
for (int y = 0; y < nombreMPAP; y ++)
{
MPAP[y].run();
}
}
quand je veux faire tourner les moteurs en même temps en marche arrière avec l'application prévu à cet effet j'ai des moteurs qui continuent de tourner en marche avant alors qu'avec le programme séparé les moteurs tournent bien comme voulu. Quelqu'un aurait-il une idée de la raison de ce disfonctionnement ?
Cordialement