Sto iniziando ad utilizzare lo stepper motor ed ho un problema che non riesco a risolvere, secondo il datasheet del mio 28BYJ-48 per fare un giro completo di 360° ci vogliono circa 4.090 passi, così ho deciso di stampare i passi su un monitor seriale ma me ne da la metà per ogni ciclo di 360°, perchè questo? Il motore si attiva solamente quando un pulsante è premuto.
int button_1 = 2; //Pulsante 1 sul pin 2
int button_2 = 3; //Pulsante 2 sul pin 3
int motorPin1 = 8; //IN1 sul pin 8
int motorPin2 = 9; //IN2 sul pin 9
int motorPin3 = 10; //IN3 sul pin 10
int motorPin4 = 11; //IN4 sul pin 11
int val=0; //Passi
int motor_Speed = 4;
int motor_Step;
int val1 = 0;
int val2 = 0;
void setup() {
pinMode(button_1, INPUT); //Imposto il pin 2 come input
pinMode(button_2, INPUT); //Imposto il pin 3 come input
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(motorPin3, OUTPUT);
pinMode(motorPin4, OUTPUT);
Serial.begin(9600);
}
void loop() {
Serial.println(val,DEC); //Stampo i passi
val1 = digitalRead(button_1); //Quando premo il pulsante 1 gira a sinistra
if (val1 == HIGH)
{
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(motor_Speed);
val= val+1; //incremento di un passo
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, LOW);
delay(motor_Speed);
val= val+1; //incremento di un passo
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin4, LOW);
delay(motor_Speed);
val= val+1; //incremento di un passo
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin4, HIGH);
delay(motor_Speed);
val= val+1; //incremento di un passo
}
val2 = digitalRead(button_2); //Quando premo il pulsante 2 gira a destra
if (val2 == HIGH)
{
digitalWrite(motorPin4, HIGH);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);
delay(motor_Speed);
val= val+1; //incremento di un passo
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, HIGH);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, LOW);
delay(motor_Speed);
val= val+1; //incremento di un passo
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, HIGH);
digitalWrite(motorPin1, LOW);
delay(motor_Speed);
val= val+1; //incremento di un passo
digitalWrite(motorPin4, LOW);
digitalWrite(motorPin3, LOW);
digitalWrite(motorPin2, LOW);
digitalWrite(motorPin1, HIGH);
delay(motor_Speed);
val= val+1; //incremento di un passo
}
}