OK trop bien ! Je commence a saisir le fonctionnement du tableau, en effet c'est plus clair.
J'ai essayer de le prendre en main et voila ce que j'ai pour l'instant.
#include <AccelStepper.h>
#define turn 800
AccelStepper stepper1(AccelStepper::DRIVER, 2, 3);
AccelStepper stepper2(AccelStepper::DRIVER, 4, 5);
unsigned long startMillis;
unsigned long currentMillis;
struct Evenement
{
uint32_t temps;
float vitesseMoteur1;
float accelerationMoteur1;
uint8_t nbPasMoteur1;
float vitesseMoteur2;
float accelerationMoteur2;
uint8_t nbPasMoteur2;
};
void setup(){
startMillis = millis(); //initial start time
}
void loop(){
Evenement evenement[]={
(0, 800.0, 1500.0, 1, 0.0, 0.0, 0), // Le moteur 1 démarre seul
(5000, 0.0, 0.0, 0, 800.0, 1500.0, 1) //on laisse le moteur 1 continuer, et on rajoute le moteur 2 après 5s
};
for (mouvement = 0; mouvement < N; mouvement++)
{
if (millis() - startMillis < evenements[mouvement].temps; // attente de l'instant de début du mouvement
}
{
if (evenements[mouvement].vitesseMoteur1 > 0) // On demande à cet instant un départ de mouvement sur le moteur 1
stepper1.setMaxSpeed(evenements[mouvement].vitesseMoteur1); stepper1.setAcceleration(evenements[mouvement].accelerationMoteur1); stepper1.moveTo(evenements[mouvement].nbPasMoteur1*turn);
if (evenements[mouvement].vitesseMoteur2 > 0) // On demande à cet instant un départ de mouvement sur le moteur 2
stepper2.setMaxSpeed(evenements[mouvement].vitesseMoteur2); stepper2.setAcceleration(evenements[mouvement].accelerationMoteur2); stepper2.moveTo(evenements[mouvement].nbPasMoteur2*turn);
stepper1.run(); // Qu'il tourne ou pas
stepper2.run();
}
}
Mais j'ai le message d'erreur suivant : 'mouvement' was not declared in this scope
Et je ne vois pas où/comment je declare 'mouvement'.
EDIT : j'ai essayé la commande 'byte mouvement' et en modifiant deux trois trucs mais je reviens à la même erreur :
#include <AccelStepper.h>
#define turn 800
AccelStepper stepper1(AccelStepper::DRIVER, 2, 3);
AccelStepper stepper2(AccelStepper::DRIVER, 4, 5);
unsigned long startMillis;
unsigned long currentMillis;
struct Evenement
{
uint32_t temps;
float vitesseMoteur1;
float accelerationMoteur1;
uint8_t nbPasMoteur1;
float vitesseMoteur2;
float accelerationMoteur2;
uint8_t nbPasMoteur2;
};
void setup(){
startMillis = millis(); //initial start time
}
void loop(){
Evenement evenements[]={
(0, 800.0, 1500.0, 1, 0.0, 0.0, 0), // Le moteur 1 démarre seul
(5000, 0.0, 0.0, 0, 800.0, 1500.0, 1) //on laisse le moteur 1 continuer, et on rajoute le moteur 2 après 5s
};
for (byte mouvement = 0; mouvement < 2; mouvement++)
{
if (millis() - startMillis < evenements[mouvement].temps); // attente de l'instant de début du mouvement
}
{
if (evenements[mouvement].vitesseMoteur1 > 0) // On demande à cet instant un départ de mouvement sur le moteur 1
stepper1.setMaxSpeed(evenements[mouvement].vitesseMoteur1); stepper1.setAcceleration(evenements[mouvement].accelerationMoteur1); stepper1.moveTo(evenements[mouvement].nbPasMoteur1*turn);
if (evenements[mouvement].vitesseMoteur2 > 0) // On demande à cet instant un départ de mouvement sur le moteur 2
stepper2.setMaxSpeed(evenements[mouvement].vitesseMoteur2); stepper2.setAcceleration(evenements[mouvement].accelerationMoteur2); stepper2.moveTo(evenements[mouvement].nbPasMoteur2*turn);
stepper1.run(); // Qu'il tourne ou pas
stepper2.run();
}
}
Et est-ce que je dois bien mettre le tableau dans void loop ?
EDIT EDIT :
J'ai enlever le byte mouvelent et je l'ai déclaré au début en int mouvement = 0, comme ceci :
#include <AccelStepper.h>
#define turn 800
AccelStepper stepper1(AccelStepper::DRIVER, 23, 23);
AccelStepper stepper2(AccelStepper::DRIVER, 25, 24);
unsigned long startMillis;
unsigned long currentMillis;
struct Evenement
{
uint32_t temps;
float vitesseMoteur1;
float accelerationMoteur1;
uint8_t nbPasMoteur1;
float vitesseMoteur2;
float accelerationMoteur2;
uint8_t nbPasMoteur2;
};
int mouvement = 0;
void setup(){
startMillis = millis(); //initial start time
}
void loop(){
Evenement evenements[]={
(0, 800.0, 1500.0, 1, 0.0, 0.0, 0), // Le moteur 1 démarre seul
(5000, 0.0, 0.0, 0, 800.0, 1500.0, 1) //on laisse le moteur 1 continuer, et on rajoute le moteur 2 après 5s
};
for ( mouvement = 0; mouvement < 2; mouvement++)
{
if (millis() - startMillis < evenements[mouvement].temps); // attente de l'instant de début du mouvement
}
{
if (evenements[mouvement].vitesseMoteur1 > 0) // On demande à cet instant un départ de mouvement sur le moteur 1
stepper1.setMaxSpeed(evenements[mouvement].vitesseMoteur1); stepper1.setAcceleration(evenements[mouvement].accelerationMoteur1); stepper1.moveTo(evenements[mouvement].nbPasMoteur1*turn);
if (evenements[mouvement].vitesseMoteur2 > 0) // On demande à cet instant un départ de mouvement sur le moteur 2
stepper2.setMaxSpeed(evenements[mouvement].vitesseMoteur2); stepper2.setAcceleration(evenements[mouvement].accelerationMoteur2); stepper2.moveTo(evenements[mouvement].nbPasMoteur2*turn);
stepper1.run(); // Qu'il tourne ou pas
stepper2.run();
}
}
Je n'ai plus de message d'erreur, mais il ne se passe rien au niveau des moteurs...