Contatore motore passo passo.

Salve,

vorrei controllare un motore passo passo inserendo un minimo (punto di partenza) e un massimo (massime rotazioni possibili). Si può fare agendo solo lato software? Di seguito allego il codice:

#define LED 13                
#define BUTTON 7  
#define BUTTON2 4
int motorPin1 = 8;
int motorPin2 = 9;
int motorPin3 = 10;
int motorPin4 = 11;
int delayTime = 2;
int  val = 0;     
int  val2 = 0; 
int  val3 = 0;
int c=0;
 
void setup() {
  pinMode(LED, OUTPUT);       
  pinMode(BUTTON, INPUT);     
  pinMode(BUTTON2, INPUT);
  pinMode(motorPin1, OUTPUT);
  pinMode(motorPin2, OUTPUT);
  pinMode(motorPin3, OUTPUT);
  pinMode(motorPin4, OUTPUT);
}
 
void loop() {
  val = digitalRead(BUTTON);  
  val2 = digitalRead(BUTTON2);
 
  
  if (val == HIGH) {
  digitalWrite(LED, HIGH);  
  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);
  }
  else {
    digitalWrite(LED, LOW);   
  }



  if (val2 == HIGH) {
  digitalWrite(LED, HIGH);  
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, HIGH);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, HIGH);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, LOW);
  digitalWrite(motorPin2, HIGH);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  digitalWrite(motorPin1, HIGH);
  digitalWrite(motorPin2, LOW);
  digitalWrite(motorPin3, LOW);
  digitalWrite(motorPin4, LOW);
  delay(delayTime);
  }
  else {
    digitalWrite(LED, LOW); 
  }
}

Grazie per il vostro aiuto! :smiley:

Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Non è molto chiaro cosa vuoi fare, valore minimo o valore massimo a cosa ti riferisci, vuoi forse avere un numero di giri motore minimo e un numero giri motore massimo??? Nel tuo codice alla pressione di un pulsante ruoti in un senso, alla pressione di un altro pulsante ruoti in un altro, quindi il tuo codice è basilare e non può fare molto.

Detto questo, spiega cosa vuoi fare dettagliatamente che sicuramente si può fare a livello di codice.

Adesso sicuramente posso darti il consiglio di creare funzioni personalizzate per la rotazione del motore, ossia invece di avere una sequenza di digitalWrite nel loop(), abbiamo una funzione che si occupa di fare un passo motore, in pratica la successione di digitalWrite() del loop() la inseriamo in una funzione.
In tal modo abbiamo uno strumento che esegue un passo motore, nel codice possiamo usarlo per creare un numero di passi o giri a una data velocità, il tutto molto più leggibile e facile da scrivere.

Ciao, grazie per la tua risposta.

Quello che avevo in mente di fare era fissare un punto zero al motore e un massimo di giri che esso può compiere, ho provato con il ciclo for ma non va.

Grazie per l'aiuto.

Ciao!

  1. Ti crei una funzione che fa un passo motore. Nella funzione dovrai mettere i digitalWrate() in sequenza per fare un singolo passo motore.

2)Ti crei una funzione che fa un giro completo del motore. Sara composta al suo interno da un ciclo for(), che ripete per il numero di passi necessario a fare un giro "esempio 200 volte", all'interno del for() richiama la funzione che fa un singolo passo.

  1. Nel loop(), alla pressione di un pulsante con un if() aziono un ciclo for() per i numero di giri voluto, e richiamo al suo interno la funzione che fa un giro completo.