Bonjour
J'ai essayé de créer un code et une application sur MAI qui servirait à piloter 3 moteurs pas à pas à partir de modification d'une application et d'un code obtenu précédemment:
#include "AccelStepper.h"
char Incoming_value = 0;
boolean mpap1Running = false;
const bool boutonPinEtatOn = LOW;
const char mpapDirPin = 4; // Pour driver MPAP pin pas
const char mpapStepPin = 5; // Pour driver MPAP pin direction
AccelStepper MPAP1(1, mpapStepPin, mpapDirPin);
int mpapNombreDePasAtourner = 200;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
MPAP1.setMaxSpeed(400);
MPAP1.setAcceleration(500);
MPAP1.setPinsInverted(false, false, true);
MPAP1.enableOutputs(); // Activer les signaux du MPAP
}
void loop()
{
if (Serial.available() > 0)
{
Incoming_value = Serial.read();
Serial.print(Incoming_value);
Serial.print("\n");
if (Incoming_value == '0')
{
MPAP1.stop();
MPAP1.setCurrentPosition(0);
mpap1Running = false;
}
if (Incoming_value == '1')
{
mpap1Running = true;
}
}
if (mpap1Running)
{
MPAP1.run();
MPAP1.move(mpapNombreDePasAtourner);
}
}
L'application communique avec l'arduino au travers d'un module bluetooth hc-05. Le code fait que tant que l'on reste appuié sur le bouton de l'application, le mpap continue de tourner et ne s'arrête qu'une fois le bouton relâché.
J'ai fait évolué le code en dupliquant les instructions relatives aux mpap puis en changeant le type de la variable "Incoming_value" en String puis en le téléversant sur une arduino mega afin d'avoir la même fonction que le système précédent mais pour 3 moteurs. L'application a également adaptée avec l'ajout de deux boutons:
Sur l'image ci-dessus je n'ai représenté qu'un seul moteur pas à pas mais il y en a en réalité 3, un à chaque driver
#include "AccelStepper.h"
String Incoming_value;
boolean MPAP1Running = false;
boolean MPAP2Running = false;
boolean MPAP3Running = false;
const bool boutonPinEtatOn = LOW;
const char mpapDirPin = 4; // Pour driver MPAP pin pas
const char mpapStepPin = 5; // Pour driver MPAP pin direction
const char mpapDirPin2 = 6; // Pour driver MPAP pin pas
const char mpapStepPin2 = 7; // Pour driver MPAP pin direction
const char mpapDirPin3 = 8; // Pour driver MPAP pin pas
const char mpapStepPin3 = 9; // Pour driver MPAP pin direction
AccelStepper MPAP1(1, mpapStepPin, mpapDirPin);
AccelStepper MPAP2(1, mpapStepPin2, mpapDirPin2);
AccelStepper MPAP3(1, mpapStepPin3, mpapDirPin3);
int mpapNombreDePasAtourner = 200;
void setup() {
Serial.begin(9600);
// initialisation du mpap
MPAP1.setMaxSpeed(400);
MPAP1.setAcceleration(500);
MPAP1.setPinsInverted(false, false, true);
MPAP1.enableOutputs(); // Activer les signaux du MPAP
// initialisation du mpap2
MPAP2.setMaxSpeed(400);
MPAP2.setAcceleration(500);
MPAP2.setPinsInverted(false, false, true);
MPAP2.enableOutputs(); // Activer les signaux du MPAP
// initialisation du mpap2
MPAP3.setMaxSpeed(400);
MPAP3.setAcceleration(500);
MPAP3.setPinsInverted(false, false, true);
MPAP3.enableOutputs(); // Activer les signaux du MPAP
}
void loop()
{
if (Serial.available() > 0)
{
Incoming_value = Serial.read();
Serial.print(Incoming_value);
Serial.print("\n");
//MPAP1
if (Incoming_value == "nonMPAP1")
{
MPAP1.stop();
MPAP1.setCurrentPosition(0);
MPAP1Running = false;
}
if (Incoming_value == "MPAP1")
{
MPAP1Running = true;
}
//MPAP2
if (Incoming_value == "nonMPAP2")
{
MPAP2.stop();
MPAP2.setCurrentPosition(0);
MPAP2Running = false;
}
if (Incoming_value == "MPAP2")
{
MPAP2Running = true;
}
//MPAP3
if (Incoming_value == "nonMPAP3")
{
MPAP3.stop();
MPAP3.setCurrentPosition(0);
MPAP3Running = false;
}
if (Incoming_value == "MPAP3")
{
MPAP3Running = true;
}
}
//rotation de MPAP1
if (MPAP1Running)
{
MPAP1.run();
MPAP1.move(mpapNombreDePasAtourner);
}
//rotation de MPAP2
if (MPAP2Running)
{
MPAP2.run();
MPAP2.move(mpapNombreDePasAtourner);
}
//rotation de MPAP3
if (MPAP3Running)
{
MPAP3.run();
MPAP3.move(mpapNombreDePasAtourner);
}
}
le fichier aia de l'application que j'utilise:
Plusieurs_moteur_mpap_a_l_appuie.zip (2,3 Ko)
Le problème est que je n'ai aucune rotation des mpap, et que j'ai dans le moniteur série des chiffres non-voulus à chaque appuie d'un des boutons à la place des mots:
Comment dois-je modifier le programme de sorte à avoir le même résultat que le montage et programme originel mais avec trois moteurs et une variable String ?
Cordialement