Salve a tutti, sono entrato nel mondo di Arduino da poco, ho dei vaghi ricordi di quando usavo il Basic.
Ho necessità di pilotare un motore passo passo e che cambi direzione tramite uno switch.
Fino ad ora sono riuscito a fargli fare il cambio di rotazione solo alla fine della rotazione dei 360°, ma io ho bisogno che la rotazione possa cambiare in qualsiasi punto del percorso.
Allego il listato di quanto fatto e ringrazio chi mi sarà di aiuto.
Claudio
/* 17-02-2015, Claudio G.
Programma per pilotare un motore Passo-Passo
Deve cambiare senso di rotazione quando rileva il cambio di stato di un ingresso
*/
#include <Stepper.h>;
int SwDir = 7; //Sensore Forcella per Cambio Direzione
int SwUpDw = 6; //Pulsante per incremento velocità
int OutLed01 = 9; //Led
int SpeedValue = 5; // Variabile su cui andrà memorizzato la velocità di rotazione
int Speed = SpeedValue;
int SpeedUp = 2;
int ValDir = 0; // variabile che memorizza il valore letto di SwDir
//10 = IN1, 11 = IN 2, 12 = IN 3, 13 = IN 4;
Stepper myStepper(2048, 10, 12, 11, 13);
void setup() {
Serial.begin(9600);
pinMode (SwDir, INPUT); // Definito SWDir come INPUT
pinMode (SwUpDw, INPUT); // Definito SwUpDw come INPUT
pinMode (OutLed01, OUTPUT); // Definito OutLed01 come OUTPUT
myStepper.setSpeed(Speed); // Velocità motore
}
void loop() {
ValDir = digitalRead(SwDir); // legge il pin di SwDir e lo memorizza in ValDir
digitalWrite(OutLed01, ValDir); // imposta il LED a seconda dell'azione svolta sul pulsante
if (ValDir == HIGH) // Se Stato_Pulsante è uguale a 1 o HIGH (5 volt)
{
digitalWrite(OutLed01, ValDir); // imposta il LED a seconda dell'azione svolta sul pulsante
delay (100); // delay per debounce switch
myStepper.step(2048);
delay(1000);
// Avanti ();
}
else { // Altrimenti
digitalWrite(OutLed01, LOW); // Scriviamo sul pin 9 lo stato basso (0 Volt)
delay (1000);
myStepper.step(-2048);
delay(1000);
// Indietro();
}
}
void Avanti() {
myStepper.step(2048);
delay(1000);
}
void Indietro() {
myStepper.step(-2048);
delay(1000);
}
void ChkSwHigh() {
ValDir = digitalRead(SwDir); // legge il pin di SwDir e lo memorizza in ValDir
digitalWrite(OutLed01, ValDir); // imposta il LED a seconda dell'azione svolta sul pulsante
if (ValDir == HIGH) // Se Stato_Pulsante è uguale a 1 o HIGH (5 volt)
{
digitalWrite(OutLed01, ValDir); // imposta il LED a seconda dell'azione svolta sul pulsante
delay (100); // delay per debounce switch
}
else { // Altrimenti
digitalWrite(OutLed01, LOW); // Scriviamo sul pin 9 lo stato basso (0 Volt)
Salve a tutti, sono entrato nel mondo di Arduino da poco, ho dei vaghi ricordi di quando usavo il Basic.
Ho necessità di pilotare un motore passo passo e che cambi direzione tramite uno switch.
Fino ad ora sono riuscito a fargli fare il cambio di rotazione solo alla fine della rotazione dei 360°, ma io ho bisogno che la rotazione possa cambiare in qualsiasi punto del percorso.
Allego il listato di quanto fatto e ringrazio chi mi sarà di aiuto.
Claudio
/* 17-02-2015, Claudio G.
Programma per pilotare un motore Passo-Passo
Deve cambiare senso di rotazione quando rileva il cambio di stato di un ingresso
*/
#include <Stepper.h>;
int SwDir = 7; //Sensore Forcella per Cambio Direzione
int SwUpDw = 6; //Pulsante per incremento velocità
int OutLed01 = 9; //Led
int SpeedValue = 5; // Variabile su cui andrà memorizzato la velocità di rotazione
int Speed = SpeedValue;
int SpeedUp = 2;
int ValDir = 0; // variabile che memorizza il valore letto di SwDir
//10 = IN1, 11 = IN 2, 12 = IN 3, 13 = IN 4;
Stepper myStepper(2048, 10, 12, 11, 13);
void setup() {
Serial.begin(9600);
pinMode (SwDir, INPUT); // Definito SWDir come INPUT
pinMode (SwUpDw, INPUT); // Definito SwUpDw come INPUT
pinMode (OutLed01, OUTPUT); // Definito OutLed01 come OUTPUT
myStepper.setSpeed(Speed); // Velocità motore
}
void loop() {
ValDir = digitalRead(SwDir); // legge il pin di SwDir e lo memorizza in ValDir
digitalWrite(OutLed01, ValDir); // imposta il LED a seconda dell'azione svolta sul pulsante
if (ValDir == HIGH) // Se Stato_Pulsante è uguale a 1 o HIGH (5 volt)
{
digitalWrite(OutLed01, ValDir); // imposta il LED a seconda dell'azione svolta sul pulsante
delay (100); // delay per debounce switch
myStepper.step(2048);
delay(1000);
// Avanti ();
}
else { // Altrimenti
digitalWrite(OutLed01, LOW); // Scriviamo sul pin 9 lo stato basso (0 Volt)
delay (1000);
myStepper.step(-2048);
delay(1000);
// Indietro();
}
}
void Avanti() {
myStepper.step(2048);
delay(1000);
}
void Indietro() {
myStepper.step(-2048);
delay(1000);
}
void ChkSwHigh() {
ValDir = digitalRead(SwDir); // legge il pin di SwDir e lo memorizza in ValDir
digitalWrite(OutLed01, ValDir); // imposta il LED a seconda dell'azione svolta sul pulsante
if (ValDir == HIGH) // Se Stato_Pulsante è uguale a 1 o HIGH (5 volt)
{
digitalWrite(OutLed01, ValDir); // imposta il LED a seconda dell'azione svolta sul pulsante
delay (100); // delay per debounce switch
}
else { // Altrimenti
digitalWrite(OutLed01, LOW); // Scriviamo sul pin 9 lo stato basso (0 Volt)
}
}