Come posso accendete/spegnere motore passo-passo con un pulsante?

Come posso accendere/spegnere un motore passo-passo con un pulsante o interruttore? Sono alle prime armi con Arduino e ho provato a scrivere il codice... questo è quello che è venuto fuori

byte val=0;
byte val_prec=0;
int motorPin1 = 2;
int motorPin2 = 3;
int motorPin3 = 4;
int motorPin4 = 5;
int delayTime = 5;

//Pulsante come interruttore
void setup() 
{   
    //Inizializzare i pin
    pinMode(6,INPUT);
    pinMode(motorPin1,OUTPUT);
    pinMode(motorPin2,OUTPUT);
    pinMode(motorPin3,OUTPUT);
    pinMode(motorPin4,OUTPUT);
}

void loop() 
{
    //Analizzare il pin di INPUT(6)
    val = digitalRead(6);
    if(val == HIGH and val_prec == 0);
    {
       void loop()
            {
              val_prec = 1;
              //Faccio girare il motore passo passo
              digitalWrite(motorPin1,HIGH);
              digitalWrite(motorPin2,LOW);
              digitalWrite(motorPin3,LOW);
              digitalWrite(motorPin4,LOW);
              delay(delayTime);
              digitalWrite(motorPin1,LOW);
              digitalWrite(motorPin2,HIGH);
              digitalWrite(motorPin3,LOW);
              digitalWrite(motorPin4,LOW);
              delay(delayTime);
              digitalWrite(motorPin1,LOW);
              digitalWrite(motorPin2,LOW);
              digitalWrite(motorPin3,HIGH);
              digitalWrite(motorPin4,LOW);
              delay(delayTime);
              digitalWrite(motorPin1,LOW);
              digitalWrite(motorPin2,LOW);
              digitalWrite(motorPin3,LOW);
              digitalWrite(motorPin4,HIGH);
              delay(delayTime);
            }

    }

Non so se hai notato ma hai scritto lo stesso post in 2 posti diversi, comunque ci sono i tutorial se sei alle prime armi.

tutorial https://www.arduino.cc/en/Tutorial/HomePage

con pulsante metodo switch https://www.arduino.cc/en/tutorial/switch

ps: tra pulsante e interruttore c'è una grande differenza, con un interruttore non mi sembra tanto complicato se lo metti in serie all'alimentazione motore

>VinnavoiG: Prima di tutto, essendo il tuo primo post, ti chiedo di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il REGOLAMENTO ...

... poi, in conformità al suddetto REGOLAMENTO, punto 13, il cross-posting è proibito ([u]anche tra lingue diverse[/u]) e tu hai posto [u]la stessa domanda[/u] nella sezione di lingua Inglese, per di più usando l'Italiano, cosa che NON è permessa.

Pertanto, il tuo post nella sezione Inglese è stato cancellato e ti prego di continuare qui senza aprire ulteriori thread per lo stesso argomento. Grazie.

Guglielmo

P.S.: Ti sei reso conto che hai messo DUE volte il loop() nel tuo codice? Uno dentro l'altro ... ::)

pablos:
Non so se hai notato ma hai scritto lo stesso post in 2 posti diversi, comunque ci sono i tutorial se sei alle prime armi.

tutorial
https://www.arduino.cc/en/Tutorial/HomePage

con pulsante metodo switch
Arduino - Switch

ps: tra pulsante e interruttore c’è una grande differenza, con un interruttore non mi sembra tanto complicato se lo metti in serie all’alimentazione motore

Così funziona?

byte val=0;
byte val_prec=0;
int motorPin1 = 8;
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
int delayTime = 5;

//Pulsante come interruttore
void setup() 
{   
    //Inizializzare i pin
    pinMode(6,INPUT);
    pinMode(motorPin1,OUTPUT);
    pinMode(motorPin2,OUTPUT);
    pinMode(motorPin3,OUTPUT);
    pinMode(motorPin4,OUTPUT);
}

void loop() 
{
    //Analizzare il pin di INPUT(6)
    val = digitalRead(6);
    if(val == HIGH and val_prec == 0);
      {for(int i=0;i<1000;i++){rotazione();}}
    if(val == LOW and val_prec == 1);
      {for(int i=0;i<1000;i++){fermo();}}
}

void rotazione()
{           
    //Faccio girare il motore passo passo
    digitalWrite(motorPin1,HIGH);
    digitalWrite(motorPin2,LOW);
    digitalWrite(motorPin3,LOW);
    digitalWrite(motorPin4,LOW);
    delay(delayTime);
    digitalWrite(motorPin1,LOW);
    digitalWrite(motorPin2,HIGH);
    digitalWrite(motorPin3,LOW);
    digitalWrite(motorPin4,LOW);
    delay(delayTime);
    digitalWrite(motorPin1,LOW);
    digitalWrite(motorPin2,LOW);
    digitalWrite(motorPin3,HIGH);
    digitalWrite(motorPin4,LOW);
    delay(delayTime);
    digitalWrite(motorPin1,LOW);
    digitalWrite(motorPin2,LOW);
    digitalWrite(motorPin3,LOW);
    digitalWrite(motorPin4,HIGH);
    delay(delayTime);
}

void fermo()
{   digitalWrite(motorPin1,LOW);
    digitalWrite(motorPin2,LOW);
    digitalWrite(motorPin3,LOW);
    digitalWrite(motorPin4,LOW);
}

— I tag code vanno tra parentesi quadre e sono quelli che, in fase di edit, ti inserisce il bottone </> … primo a sinistra. Ho corretto io il post. - gpb01

Nel tuo codice usi un ciclo di 1000 ripetizioni, quindi non puoi fermare il motore fino a che il ciclo non termina.

Dovresti usare un ciclo while() in cui nella condizione verifichi la pressione del pusante.

Esempio:

byte stato=0;

void setup()
{
}


void loop(){

    delay(300);//Permette di alzare il dito dal pulsante, quando si preme nella funzione rotazione()
    if(digitalRead(6)==HIGH)//Premendo il pulsante a motore fermo parte
            rotazione();

}



void rotazione(){


    delay(300);//Permette di alzare il dito dal pulsante, altrimente legge HIGH anche quando non deve.
    while(1){// Esegue di continuo
        
         
         if(digitalRead(6)==HIGH){//se premi il pulsante quanto il motore è in funzione
              
                  retrun;// esce dalla funzione e termina la rotazione...
         }


           //codice per muovere il motore
            digitalWrite(motorPin1,HIGH);
    digitalWrite(motorPin2,LOW);
    digitalWrite(motorPin3,LOW);
    digitalWrite(motorPin4,LOW);
    delay(delayTime);
    digitalWrite(motorPin1,LOW);
    digitalWrite(motorPin2,HIGH);
    digitalWrite(motorPin3,LOW);
    digitalWrite(motorPin4,LOW);
    delay(delayTime);
    digitalWrite(motorPin1,LOW);
    digitalWrite(motorPin2,LOW);
    digitalWrite(motorPin3,HIGH);
    digitalWrite(motorPin4,LOW);
    delay(delayTime);
    digitalWrite(motorPin1,LOW);
    digitalWrite(motorPin2,LOW);
    digitalWrite(motorPin3,LOW);
    digitalWrite(motorPin4,HIGH);
    delay(delayTime);


    }


}