Come ho detto nel titolo vorrei pilotare 2 motori passo passo con arduino mega,
in poche parole avrei due pulsanti, uno che manda avanti un motore e l'altro che manda avanti l altro motore, che in seguito monterei su una tavola di legno. cosi facendo, attivando entrambi i motori mi si muoverebbe in avanti, se ne premessi solo uno girerebbe.
Da solo non ci son riuscito, ho avuto un paio di problemi.
Il primo è stato che quando premevo il pulsante il motore partiva ma al mio rilascio non si fermava.
Il secondo è che contemporaneamente non vanno, solo se li premo separatamente i motori girano.
Questo è il mio sketch.
#include <LiquidCrystal.h>
//LiquidCrystal lcd(8,9,4,5,6,7);
#define BUTTONO 8
#define LED 13 // LED collegato al pin digitale 13
#define BUTTON 7 // pin di input dove è collegato il pulsante
int val = 0; // si userà val per conservare lo stato del pin di input
int valo = 0;
void setup() {
pinMode(22, OUTPUT);
pinMode(23, OUTPUT);
pinMode(24, OUTPUT);
pinMode(25, OUTPUT);
//forzo le uscite a livello logico basso
digitalWrite(22, LOW);
digitalWrite(23, LOW);
digitalWrite(24, LOW);
digitalWrite(25, LOW);
pinMode(32, OUTPUT);
pinMode(33, OUTPUT);
pinMode(34, OUTPUT);
pinMode(35, OUTPUT);
//forzo le uscite a livello logico basso
digitalWrite(32, LOW);
digitalWrite(33, LOW);
digitalWrite(34, LOW);
digitalWrite(35, LOW);
pinMode(LED, OUTPUT); // imposta il pin digitale come output
pinMode(BUTTON, INPUT); // imposta il pin digitale come input
pinMode(BUTTONO,INPUT);
}
void loop() {
val = digitalRead(BUTTON); // legge il valore dell'input e lo conserva
valo = digitalRead(BUTTONO);
if (val==HIGH) {
for(int i=0;i<1000;i++){antiorario();}
delay(10000);
}
if (valo==HIGH) {
for(int i=0;i<1000;i++){orario();}
delay(10000);
}
// controlla che l'input sia HIGH (pulsante premuto)
if (val == HIGH) {
digitalWrite(LED, HIGH); //accende il led
}
else {
digitalWrite(LED, LOW); //spegne il led
}
}
void antiorario()
{
//FASE 1
//Alimento solo la prima bobina
digitalWrite(32, LOW);
digitalWrite(33, LOW);
digitalWrite(34, LOW);
digitalWrite(35, HIGH);
delay(5);
//FASE 2
//Alimento solo la seconda bobina
digitalWrite(32, LOW);
digitalWrite(33, HIGH);
digitalWrite(34, LOW);
digitalWrite(35, LOW);
delay(5);
//FASE 3
//Alimento solo la terza bobina
digitalWrite(32, LOW);
digitalWrite(33, LOW);
digitalWrite(34, HIGH);
digitalWrite(35, LOW);
delay(5);
//fase 4
//Alimento solo la quarta bobina
digitalWrite(32, HIGH);
digitalWrite(33, LOW);
digitalWrite(34, LOW);
digitalWrite(35, LOW);
delay(5);
}
void orario()
{
//FASE 1
//Alimento solo la prima bobina
digitalWrite(22, HIGH);
digitalWrite(23, LOW);
digitalWrite(24, LOW);
digitalWrite(25, LOW);
delay(5);
//FASE 2
//Alimento solo la seconda bobina
digitalWrite(22, LOW);
digitalWrite(23, LOW);
digitalWrite(24, HIGH);
digitalWrite(25, LOW);
delay(5);
//FASE 3
//Alimento solo la terza bobina
digitalWrite(22, LOW);
digitalWrite(23, HIGH);
digitalWrite(24, LOW);
digitalWrite(25, LOW);
delay(5);
//fase 4
//Alimento solo la quarta bobina
digitalWrite(22, LOW);
digitalWrite(23, LOW);
digitalWrite(24, LOW);
digitalWrite(25, HIGH);
delay(5);
}
Uso un ln298n come driver del motore. Spero che mi aiutiate! grazie in anticipo!