bonjour,
j'ai besoin d'aide afin de faire fonctionner mon moteur PàP en manuel avec les touches UP et DOWN du clavier intégré à l’écran LCD.
#include <LCDKeypad.h>
#include <AccelStepper.h>
LCDKeypad lcdKeypad;
enum {
BUTTON_NONE,
BUTTON_UP,
BUTTON_DOWN,
BUTTON_LEFT,
BUTTON_RIGHT,
BUTTON_SELECT,};
const int btnsPin = A0;
int btnsVal = 0;
#define dirPin 22 //DIR+
#define stepPin 24 //PUL+
#define motorInterfaceType 1
AccelStepper stepper = AccelStepper ( AccelStepper::DRIVER, stepPin, dirPin) ;
const int stepsPerRevolution = 400; // Nombre de pas du servomoteur
long initial_homing = -100000; // utilisé pour le Home
//Deinition des PIN pour les switchs
const int FDC_Home = 42; // pin 42 fin de course écartement mini
// Definition des PIN voyant
const int led_verte = 34; // pin 34 led verte
const int led_rouge = 32; // pin 32 led rouge
void setup(){{
Serial.begin(115200);
pinMode(stepPin, OUTPUT); //pin 24 PUL+
pinMode(dirPin, OUTPUT); //pin 22 DIR+
pinMode(FDC_Home, INPUT_PULLUP); // pin 42 fin de course écartement mini
pinMode(led_rouge, OUTPUT); // pin 32 led rouge defaut ou attendre
pinMode(led_verte, OUTPUT); // pin 34 led vertevoyant ok
lcdKeypad.begin();
lcdKeypad.ecran.ecrire("Hello lolo",3,0);
lcdKeypad.ecran.ecrire("ATTENDRE",4,1);
delay(1000);
}
// Debut procedure de positionnement du prehensseur
stepper.setMaxSpeed(1400.0);
stepper.setAcceleration(800.0);
digitalWrite(led_rouge, 1);
lcdKeypad.ecran.effacer(1);
lcdKeypad.ecran.ecrire("Positionnement",1,0);
lcdKeypad.ecran.ecrire("initial en cours",0,1);
while (digitalRead(FDC_Home)) { // Fait tourner le moteur jusqu'à ce que le fdc soit activé
stepper.moveTo(initial_homing); // Definit a quelle position bouger
stepper.run(); // Demarre le moteur
}
stepper.setCurrentPosition(0); // Definit la position courante à O pas
initial_homing = 1;
while (!digitalRead(FDC_Home)) { // Tourne le moteur dans l'autre sens juste pour desactiver le fdc
stepper.moveTo(initial_homing);
stepper.run();
initial_homing++;
delay(5);
}
lcdKeypad.ecran.effacer(1);
lcdKeypad.ecran.ecrire("Positionnement",1,0);
lcdKeypad.ecran.ecrire("Fini",6,1);
delay(1000);
digitalWrite(led_verte, 1);digitalWrite(led_rouge, 0);
delay(1000);
lcdKeypad.ecran.effacer(1);
lcdKeypad.ecran.ecrire("Position",4,0);
lcdKeypad.ecran.ecrire("sac de 35 a 40cm",0,1);
}
void loop(){
btnListener(getBtnPressed());
}
void btnListener(byte btnStatus) { /* function btnListener */
//// Get button value when pressed
switch (btnStatus) {
case BUTTON_UP:
lcdKeypad.ecran.effacer(1);
lcdKeypad.ecran.ecrire("ATTENTION MANU",1,0);
lcdKeypad.ecran.ecrire("AUGMENTE",4,1);
break;
case BUTTON_DOWN:
lcdKeypad.ecran.effacer(1);
lcdKeypad.ecran.ecrire("ATTENTION MANU",1,0);
lcdKeypad.ecran.ecrire("REDUIRE",4,1);
break;
case BUTTON_LEFT:
lcdKeypad.ecran.effacer(1);
lcdKeypad.ecran.ecrire("Position",4,0);
lcdKeypad.ecran.ecrire("sac de 42 a 45cm",0,1);
stepper.runToNewPosition(600);
break;
case BUTTON_RIGHT:
lcdKeypad.ecran.effacer(1);
lcdKeypad.ecran.ecrire("Position",4,0);
lcdKeypad.ecran.ecrire("sac de 45 a 52cm",0,1);
stepper.runToNewPosition(700);
break;
case BUTTON_SELECT:
lcdKeypad.ecran.effacer(1);
lcdKeypad.ecran.ecrire("Position",4,0);
lcdKeypad.ecran.ecrire("sac de 40 a 42cm",0,1);
stepper.runToNewPosition(500);
break;
}
delay(100);
}
byte getBtnPressed() { /* function getBtnPressed */
//// Get button value when pressed
btnsVal = analogRead(btnsPin);
if (btnsVal < 50)
return BUTTON_RIGHT;
else if (btnsVal < 250)
return BUTTON_UP;
else if (btnsVal < 350)
return BUTTON_DOWN;
else if (btnsVal < 450)
return BUTTON_LEFT;
else if (btnsVal < 650)
return BUTTON_SELECT;
else
return BUTTON_NONE;
}
j'ai essayé pas mal de truc, au mieux le moteur fait un micro pas une pause un micro pas une pause ...et ainsi de suite.