Muovere Passo passo tramite pulsante

Che ne dite conoscete altri modi per fermare un loop?

non ci siamo, direi che manca un sacco di roba :slight_smile:
dici che vuoi usare 2 tasti ma nel codice vedo il tentativo di usarne solo uno
le condizioni possibili sono solo 3
nessun tasto premuto (default)
tasto dx premuto
tasto sx premuto
(entrambi i tasti premuti, non utilizzato)
controlla all'inizio del codice le condizioni e metti il codice conseguente, sono 3 if :slight_smile:
la prima controlli che entrambi i pin dei tasti siano==0
la seconda e la terza controlli che i rispettivi pin (dei tasti) siano a 1

Niente ho provato varie soluzioni ma niente sono riuscito a fare andare il motore a destra premendo il tasto 1 ma premendo il tasto 2 non succede nulla ]:slight_smile:
Se lo setto a 1 invece di 0 sull'IF mi va di continuo destra sinistra come se facesse il loop dei 500 passi prima positivi poi negativi all'infinito

Nessuno mi saprebbe aiutare?

int DIR_PIN_M1 =3; //7
int STEP_PIN_M1 =2; //5
int SLEEP = 6; // PIN 12 = SLP
int DIR_PIN_M2 =3;
int STEP_PIN_M2 =2;

const int buttonPin = 10; //Setting button number 1 to Pin 2
int buttonState = 1; //Setting button state to off

const int buttonPin1 = 12; //Setting button number 1 to Pin 2

void setup() {
pinMode(DIR_PIN_M1, OUTPUT);
pinMode(STEP_PIN_M1, OUTPUT);

}

void loop(){

//specifica numero giri e tempo di attesa
if ( digitalRead(buttonPin1) == 1){
digitalWrite(SLEEP, LOW); } // Sveglia il motore.
if ( digitalRead(buttonPin1) == 0){
digitalWrite(SLEEP, HIGH); } // Sveglia il motore.
if ( digitalRead(buttonPin) == 0) {
rotateDeg(-500, 0.7);
delay(000);
digitalWrite(SLEEP, LOW); // Spegne il motore
}

if ( digitalRead(buttonPin) == 1) {
rotateDeg(500, 0.7);
delay(000);
}
}

void rotateDeg(float deg, float speed){
//rotate a specific number of degrees (negitive for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
int dir = (deg > 0)? HIGH:LOW;
digitalWrite(DIR_PIN_M1,dir);

int steps = abs(deg)*(1/0.225);
float usDelay = (1/speed) *70;

for(int i=0; i < steps; i++){
digitalWrite(STEP_PIN_M1, HIGH);
delayMicroseconds(usDelay);

digitalWrite(STEP_PIN_M1, LOW);
delayMicroseconds(usDelay);
}

}
void rotate_M2(int steps, float speed){
//rotate a specific number of microsteps (8 microsteps per step) - (negitive for reverse movement)
//speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
int dir = (steps > 0)? HIGH:LOW;
steps = abs(steps);

digitalWrite(DIR_PIN_M2,dir);

float usDelay = (1/speed) * 70;

for(int i=0; i < steps; i++){
digitalWrite(STEP_PIN_M2, HIGH);
delayMicroseconds(usDelay);

digitalWrite(STEP_PIN_M2, LOW);
delayMicroseconds(usDelay);
}

}

io con il mio passo passo della stapante epson ho fatto cosi'.
lo alimento con un l293d (che accendo solo quando serve che giri)
con 2 pulsanti lo faccio girare a destra o sinistra
semplicissimo

#include <Stepper.h>
//
//http://www.gioblu.com/tutorials/azionamenti/75-motori-stepper
//http://arduino.cc/en/Tutorial/MotorKnob
//
//definisce il numero di step dello stepper
#define STEPS 200

Stepper stepper(STEPS, 9, 8);
void setup()
{
// setta la velocità a max 150 RPMs
stepper.setSpeed(150);
pinMode(13, OUTPUT);
pinMode(11, INPUT);
pinMode(10, INPUT);
}

void loop()
{
 if (digitalRead(10) == HIGH) {     
    digitalWrite(13, HIGH);   // set L293d on
    stepper.step(5);        //lo stepper farà 5 step in un senso
    digitalWrite(13, LOW);    // set L293d off
    }
 if (digitalRead(11) == HIGH) {     
    digitalWrite(13, HIGH);   // set L293d on
    stepper.step(-5);        //lo stepper farà 5 step in un senso
    digitalWrite(13, LOW);    // set L293d off
  }
}

ma quei delay(000); a che servono?
dov'è lo stato dell'altro tasto? non sarebbe più logico fare così visto che gestisci due tasti??

const int buttonPin = 10; //Setting button number 1 to Pin 10
int buttonState = 0; //Setting button state to off

const int buttonPin1 = 12; //Setting button number 2 to Pin 12
int buttonState1 = 0; //Setting button state to off

Salve,
ho un applicativo touch che sto sviluppando
e volevo alcune indicazioni di come far girare lentamente il motore semplicemente al comando di 2 tasti. Tasto 1 girerà in senso orario e tasto 2 anti orario. grazie. pls help =(