Bonjour, j'ai ce code ma foie, assez simple. Par contre, il ne fait pas exactement ce que je veux. Actuellement, le moteur fait ses 147 steps. Par la suite, il calcule 10 minutes et recommence la loop. Ce qui donne par exemple 10 minutes et 1 seconde en tout.
Ce que j'aimerais, moi, c'est qu'au moment ou le moteur se met à tourner, un timer de 10 min s'exécute. Donc, la loop durerais 10 minutes bien justes incluant les 147 steps du moteur, au lieu de 10 minutes et 1 seconde (avec les 147 step du moteur)
J'ai entendu parler de la fonction millis(). Par contre, étant un gros débutant, je n'ai aucune idée comment adapter cette fonction à ce que je veux.
Alors, merci beaucoup de m'aider!
#include <Adafruit_MotorShield.h>
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_StepperMotor *myMotor1 = AFMS.getStepper(300, 1);
void setup() {
//start serial connection
Serial.begin(9600);
AFMS.begin(); // create with the default frequency 1.6KHz
myMotor1->setSpeed(100); // 10 rpm
}
void loop(){
myMotor1->step(147, BACKWARD, DOUBLE);
//analogWrite(PWMpin, i);
delay(600000);
}
Vous lisez millis() dans un unsigned long chrono; avant de lancer les 147 steps, puis vous faites les steps et ensuite vous attendez que millis() - chrono soit plus grand que 600000ul soit en attente active si vous n’avez rien d’autre à faire, soit en bouclant la loop() (cf l’exemple blink without delay)
#include <Adafruit_MotorShield.h>
Adafruit_MotorShield AFMS = Adafruit_MotorShield();
Adafruit_StepperMotor *myMotor1 = AFMS.getStepper(300, 1);
unsigned long Depart;
int MonDelai= 4000;
void setup() {
//start serial connection
Serial.begin(9600);
AFMS.begin(); // create with the default frequency 1.6KHz
myMotor1->setSpeed(300); // 10 rpm
}
void loop(){
Depart=millis();
myMotor1->step(147, BACKWARD, DOUBLE);
//analogWrite(PWMpin, i);
if(millis() > MonDelai) {
delay(596000);
}
}
Par contre, lorsque le programme s'exécute pour la première fois, le stepper tourne plus que 147 steps. Par contre, lorsque qu'il commence à ''looper'', il se fait correctement. Hummmm :-\
Il faut que tu analyse l'exemple 'blink without delay' comme le dit J-M-L. Le mélange millis() et delay ne me dit rien qui vaille. Tu peux aussi consulter l’excellent blog d'Eskimon ici
Benjoo:
Par contre, lorsque le programme s'exécute pour la première fois, le stepper tourne plus que 147 steps. Par contre, lorsque qu'il commence à ''looper'', il se fait correctement. Hummmm :-\
Bonjour,
C'est normal, lors de la première bloucle mills() est inférieur à Mondelai donc il n'y a pas de delay.