bonjour la communauté,
en ce début d'année tous mes vœux de réussite et d'épanouissements.
étant complètement novice ici,
je sollicite votre aide, j'essaie depuis quelques mois de comprendre et d'apprendre la programmation arduino mais....il arrive de vite être bloqué par manque de logique ou d'inexpériences malgré des heures passées a essayer de comprendre certain tuto ou réponses sur ce forum. je n'arrive pas a faire ce que je voudrai.
voila je souhaiterais déclencher un mouvement aller/retour continue d' un mpap (nema17 avec
A4988 ou TMC2208) grâce a un poussoir (bouton 1) configuré en ON/OFF et pouvoir aussi, stopper la rotation à tous moments par un autre poussoir(bouton 2 ou bouton 3), ses deux boutons étant des commandes manuelles aux mouvements du moteur (bouton 2) pour tourner horaire, (bouton 3) pour tourner antihoraire.
j'ai donc suivi les divers programmes existants avec ou sans LED pour les poussoirs ON/OFF,
les programmes de mise en rotation d'un mpap pour la rotation en continue en aller/retour, mais ne sont jamais commander par des boutons .
Pourriez vous m'aider?
#include <AccelStepper.h>
AccelStepper stepper(AccelStepper::DRIVER, 3, 2);
#define ENABLE_PIN 4
#define RIGHT_PIN 6
#define LEFT_PIN 5
#define LED_PIN 11
#define MS2_PIN 8
#define BALAYAGE_PIN 10
#define ROTATIF_PIN 9
#define LED2_PIN 7
#define SPEED_PIN A0
#define MAX_SPEED 2000
#define MIN_SPEED 60
const byte distancePin = A1;
int angle_balayage_pot = A3;
int BALAYAGEState = LOW;
int ROTATIFState = LOW;
int ledState = LOW;
int led2State = LOW;
int OnOrOffState = LOW;
byte lastLEFTState = digitalRead(LEFT_PIN);
byte lastRIGHTState = digitalRead(RIGHT_PIN);
byte lastROTATIFState = digitalRead(ROTATIF_PIN);
byte lastBALAYAGEState = digitalRead(BALAYAGE_PIN);
static float current_speed = 0.0; // Holds current motor speed in steps/second
static int analog_read_counter = 300; // Counts down to 0 to fire analog read
static char direction = 0; // Holds -1, 1 or 0 to turn the motor on/off and control direction
static int analog_value = 0;
void setup() {
Serial.begin(115200);
stepper.setMaxSpeed (2000);
stepper.setSpeed(2000);
stepper.setAcceleration(10000);
pinMode(LEFT_PIN, INPUT_PULLUP);
pinMode(BALAYAGE_PIN, INPUT_PULLUP);
pinMode(RIGHT_PIN, INPUT_PULLUP);
pinMode(ROTATIF_PIN, INPUT_PULLUP);
pinMode(LED_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
pinMode(ENABLE_PIN, OUTPUT);
pinMode(MS2_PIN, OUTPUT);
}
void loop() {
digitalWrite(ENABLE_PIN, LOW) ;
digitalWrite(MS2_PIN, HIGH) ;
if (analog_read_counter > 0) {
analog_read_counter--;
}
else {
analog_read_counter = 300;
analog_value = analogRead(SPEED_PIN);
stepper.runSpeed();
current_speed = direction * (((analog_value/1023.0) * (MAX_SPEED - MIN_SPEED)) + MIN_SPEED);
stepper.setSpeed(current_speed);
}
stepper.runSpeed();
gauche_droite();
balayage();
//rotatif();
}
void gauche_droite()
{
if (digitalRead(LEFT_PIN) == 0) {
direction = 1;
}
else if(digitalRead(RIGHT_PIN) == 0) {
direction = -1;
}
else {
direction = 0;
}
}
void balayage()
{
stepper.runToNewPosition(0);
bool BALAYAGEState = !BALAYAGEState;
if (digitalRead(BALAYAGE_PIN) == 0 && !BALAYAGEState){
BALAYAGEState = !BALAYAGEState;
if(ledState == 0) { // Si la led est éteinte on l’allume
digitalWrite(LED_PIN, HIGH);
Serial.println("allume") ;
ledState = 1;
stepper.run();
}
else { // Si la led est allumée on l’éteint
digitalWrite(LED_PIN, LOW);
ledState = 0;
Serial.println("eteint");
while (digitalRead(BALAYAGE_PIN) == 0 && !BALAYAGEState){
stepper.moveTo(-5000);
stepper.moveTo(5000);
stepper.runSpeed();
stepper.run();
stepper.setCurrentPosition(0);
}
}
if ((digitalRead(BALAYAGE_PIN) == 0 && BALAYAGEState) || (digitalRead(RIGHT_PIN) == 0) || (digitalRead(LEFT_PIN) ==0)){
BALAYAGEState = !BALAYAGEState;
stepper.stop();
}
}
}