Ciao a tutti,
avrei un'esigenza che è la seguente.
Sto costruendo un presepe in una scatola di legno (quelle delle bottiglie di vino) ho già montato un motore nema17 e creato delle leve per aprire e chiudere la porta.
Avrei bisogno di poter controllare il motore con un pulsante per fare una cosa di questo tipo:
Premo il pulsante --> il motore compie n-gradi di rotazione in senso orario
Premo di nuovo il pulsante --> il motore compie n-gradi di rotazione in senso antiorario.
Leggendo sul forum, decine di ricerche, sono riuscito con le mie scarse competenze a scrivere questo codice:
#define dirPin 4
#define stepPin 5
#define EnablePin 6
#define Pulsante 11
bool rotazione = false; // variabile per senso rotazione
bool pressione; // variabile per leggere lo stato del pulsante
bool ultimapressione = false; // variabile per salvare lo stato della pressione pulsante
const int numStepMotore = 200;
const long velocita = 2000;
void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
pinMode(EnablePin, OUTPUT);
pinMode(Pulsante, INPUT_PULLUP);
digitalWrite(EnablePin, LOW); // Enable è attivo se LOW
}
void loop() {
pressione = digitalRead(Pulsante);
if (pressione == LOW && ultimapressione == HIGH) {
rotazione = !rotazione; // Inverte lo stato del motore
}
ultimapressione = pressione;
if (rotazione == true) { // se true allora il motore gira in Avanti
digitalWrite(dirPin, HIGH);
}
if (rotazione == false) { // se true allora il motore gira in Indietro
digitalWrite(dirPin, LOW);
}
for (int x = 0; x < numStepMotore; x++);
digitalWrite(stepPin, HIGH);
delayMicroseconds(velocita);
digitalWrite(stepPin, LOW);
delayMicroseconds(velocita);
}
Il problema è che riesco a invertire il senso di rotazione ma il motore, in un verso o nell'altro gira all'infinito rendendo impossibile ciò che devo fare.
Credo che il problema sia nel ciclo for ma non saprei come uscirmene, qualcuno può darmi una mano?
Grazie in anticipo.