Buonasera a tutti, sto avendo problemi con l'implementazione di un motore passo passo (28BYJ-48). Quando inserisco tutto nel loop il motore fa i suoi giri orari e antiorari in successione, però provando a mettere il tutto in due funzioni (dato che mi serve poter decidere quando azionare il motore) mi esegue in automatico la funzione open-box e lo fa una sola volta.
Non so più cosa fare, mi serve una mano.. Grazie
Vi posto il codice
#include <AccelStepper.h>
#define HALFSTEP 8
#define motorPin1 8 // IN1 on ULN2003 ==> Blue on 28BYJ-48
#define motorPin2 9 // IN2 on ULN2004 ==> Pink on 28BYJ-48
#define motorPin3 10 // IN3 on ULN2003 ==> Yellow on 28BYJ-48
#define motorPin4 11 // IN4 on ULN2003 ==> Orange on 28BYJ-48
int endPoint = 1024; // Move this many steps - 1024 = approx 1/4 turn
// NOTE: The sequence 1-3-2-4 is required for proper sequencing of 28BYJ-48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
void setup()
{
Serial.begin(9600);
Serial.println(stepper1.currentPosition());
stepper1.setMaxSpeed(1500.0);
stepper1.setAcceleration(200.0);
stepper1.setSpeed(500);
}
void loop()
{
if(Serial.available()>0){
int x = Serial.read();
//Serial.print(x);
if(x == 48) open_box(); //0 da seriale
else if(x==49)close_box(); //1 da seriale
}
stepper1.run();
}
void open_box(){
//Change direction at the limits
if (stepper1.distanceToGo() == 0){
//Serial.println(stepper1.currentPosition());
while(stepper1.currentPosition() <endPoint){
stepper1.setCurrentPosition(0);
endPoint = -endPoint;
stepper1.moveTo(endPoint);
Serial.println(stepper1.currentPosition());
}
}
}
void close_box(){
if (stepper1.distanceToGo() == 0){
//Serial.println(stepper1.currentPosition());
while(stepper1.currentPosition() >-endPoint){
stepper1.setCurrentPosition(0);
endPoint = -endPoint;
stepper1.moveTo(endPoint);
Serial.println(stepper1.currentPosition());
}
}
}
Vi aggiungo anche il codice sorgente senza modifiche:
#include <AccelStepper.h>
#define HALFSTEP 8
#define motorPin1 8 // IN1 on ULN2003 ==> Blue on 28BYJ-48
#define motorPin2 9 // IN2 on ULN2004 ==> Pink on 28BYJ-48
#define motorPin3 10 // IN3 on ULN2003 ==> Yellow on 28BYJ-48
#define motorPin4 11 // IN4 on ULN2003 ==> Orange on 28BYJ-48
int endPoint = 1024; // Move this many steps - 1024 = approx 1/4 turn
// NOTE: The sequence 1-3-2-4 is required for proper sequencing of 28BYJ-48
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
void setup()
{
Serial.begin(9600);
Serial.println(stepper1.currentPosition());
delay(5000);
stepper1.setMaxSpeed(1000.0);
stepper1.setAcceleration(100.0);
stepper1.setSpeed(200);
stepper1.moveTo(endPoint);
}
void loop()
{
//Change direction at the limits
if (stepper1.distanceToGo() == 0)
{
Serial.println(stepper1.currentPosition());
stepper1.setCurrentPosition(0);
endPoint = -endPoint;
stepper1.moveTo(endPoint);
Serial.println(stepper1.currentPosition());
}
stepper1.run();
}