Bonjour ylfylf et Jay M
Faire tourner un moteur pas à pas (MPAP) en continu, commandé par un bouton ON et OFF c'est pas vraiment sa vocation, d'où les problèmes rencontrés par @ylfylf.
Normalement, le MPAP on "l'envoie" à une position, puis à une autre et ainsi de suite.
La commande moteurPaP.runSpeed(); doît être répétée en continu pour un fonctionnement "pseudo" continu, à voire les explications ici et l'exemple de la bibliothèque AccelStepper ConstantSpeed.
Quels carte Arduino et quel contrôleur de MPAP utilises-tu?
D'autre part, je ne comprend pas l'usage Switch case alors qu'un if avec un éventuel else sont suffisants et plus simples. J'ai, ainsi, retouché ton programme et le MPAP fonctionne, c'est testé aven un contrôleur A4988. J'ai mis quelques Serial.println pour mieux voire "vivre" ton programme, à virer après!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| // https://www.pjrc.com/teensy/td_libs_AccelStepper.html
#include <OneButton.h>
#include <AccelStepper.h>
const byte pinBoutonMarcheAvantPetiteVitesse = A0; // mon bouton est sur la pin A0
OneButton BoutonMarcheAvantPetiteVitesse(pinBoutonMarcheAvantPetiteVitesse, true); // true pour le mettre en INPUT_PULLUP
const byte pinBoutonArret = A4; // mon bouton est sur la pin A4
OneButton boutonArret(pinBoutonArret, true); // true pour le mettre en INPUT_PULLUP
AccelStepper moteurPaP(1, 8, 4); // Mode, Step, Dir
// la pins utilisées pour la LED
const int PinLedVerte = 11;
// Etats possible du système ainsi qu'une variable EtatLedVerte prenant une de ces valeurs
enum {ETAT_STOP, ETAT_MAVPV} EtatLedVerte;
void moteurDemarrage () { // Ce qui me permet de faire tourner mon moteur
digitalWrite(PinLedVerte, HIGH);
EtatLedVerte = ETAT_MAVPV;
}
void moteurArret()// Ce qui initialise ma variable sur ETAT_STOP;
{
digitalWrite(PinLedVerte, LOW);
EtatLedVerte = ETAT_STOP;
}
void clickMarcheAvantPetiteVitesse()//marche avant petite vitesse
{
Serial.println("clickMarcheAvantPetiteVitesse");
if (EtatLedVerte != ETAT_MAVPV)
{
Serial.println("\tMoteur démarre");
moteurDemarrage();
}
else
{
Serial.println("\tMoteur déjà en marche");
}
}
void clickArret()// Callback Bouton arret
{
Serial.println("clickArret");
if (EtatLedVerte != ETAT_STOP)
{
Serial.println("\tMoteur Stop");
moteurArret();
}
else
{
Serial.println("\tMoteur déjà arrêté");
}
}
// On initialise notre système dans le setup
void setup() {
Serial.begin(9600);
pinMode (PinLedVerte, OUTPUT);
moteurPaP.setMaxSpeed(4000);
moteurPaP.setSpeed(500);
//conditions Initiales
moteurArret();
// On attache la fonction simpleClick() comme callBack
BoutonMarcheAvantPetiteVitesse.attachClick(clickMarcheAvantPetiteVitesse);
boutonArret.attachClick(clickArret);
}
void loop() {
// On vérifie l'état des boutons, ce qui déclenche l'appel de la fonction callBack si nécessaire
BoutonMarcheAvantPetiteVitesse.tick();
boutonArret.tick();
if (EtatLedVerte == ETAT_MAVPV)
{
moteurPaP.runSpeed(); // Le moteur tourne
}
} |
Pour ce qui est de l'exemple d'Accel stepper, n'oublies pas qu'il faut l'adapter à ta configuration:
AccelStepper stepper(1, 8, 4); // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| // ConstantSpeed.pde
// -*- mode: C++ -*-
//
// Shows how to run AccelStepper in the simplest,
// fixed speed mode with no accelerations
/// \author Mike McCauley (mikem@airspayce.com)
// Copyright (C) 2009 Mike McCauley
// $Id: ConstantSpeed.pde,v 1.1 2011/01/05 01:51:01 mikem Exp mikem $
#include <AccelStepper.h>
AccelStepper stepper(1, 8, 4); // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5
void setup()
{
stepper.setMaxSpeed(1000);
stepper.setSpeed(50);
}
void loop()
{
stepper.runSpeed();
} |
Bonne après-midi
Cordialement
jpbbricole
Partager