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
|
#include <AccelStepper.h>
class Button {
public:
Button(uint8_t pin) : pin(pin) {}
void begin() {
pinMode(pin, INPUT_PULLUP);
}
operator bool() {
bool current = digitalRead(pin) == LOW;
if (current != prevState && (millis() - prevMillis >= 20)) {
prevState = current;
prevMillis = millis();
return current;
}
return false;
}
private:
uint8_t pin;
bool prevState = true;
uint32_t prevMillis = 0;
};
const uint8_t pinCommencer = 44;
const uint8_t pinRaz = A5;
const uint8_t pinDir = 45;
const uint8_t pinStep = 46;
const uint8_t pinFdcArrivee = 35;
const uint8_t pinFdcDepart = 36;
const uint8_t pinEnable = A0;
const float SPEED = 1000;
Button boutonCommencer(pinCommencer);
Button boutonRaz(pinRaz);
AccelStepper moteur(AccelStepper::DRIVER, pinStep, pinDir);
void setup() {
// spécialement pour votre machine on met tous les enable à LOW
for (int p = A0; p < A4; p++) {
digitalWrite(p, LOW);
pinMode(p, OUTPUT);
}
pinMode(pinFdcArrivee, INPUT_PULLUP);
pinMode(pinFdcDepart, INPUT_PULLUP);
boutonCommencer.begin();
boutonRaz.begin();
moteur.stop();
moteur.setCurrentPosition(0);
moteur.setMaxSpeed(SPEED);
Serial.begin(115200);
}
void loop() {
if (boutonCommencer && digitalRead(pinFdcArrivee) != LOW) {
digitalWrite(pinEnable, HIGH);
moteur.move(-2000);
moteur.setSpeed(-SPEED);
}
if (boutonRaz && digitalRead(pinFdcDepart) != LOW) {
digitalWrite(pinEnable, HIGH);
moteur.move(100000); // retour vers zéro
moteur.setSpeed(+SPEED);
}
// arrêt automatique si on atteint une fin de course
if (digitalRead(pinFdcArrivee) == LOW && moteur.distanceToGo() < 0) {
digitalWrite(pinEnable, LOW);
moteur.setCurrentPosition(0);
moteur.moveTo(0);
moteur.stop();
}
if (digitalRead(pinFdcDepart) == LOW && moteur.distanceToGo() > 0) {
digitalWrite(pinEnable, LOW);
moteur.setCurrentPosition(0);
moteur.moveTo(0);
moteur.stop();
}
moteur.runSpeed();
} |
Partager