byte B[] = {15, 2, 4, 16}; // Pines de control del motor
int Tiempo = 15000; // Tiempo de espera entre pasos
int g = 0; // Contador de pasos (posición actual del motor)
void setup() {
Serial.begin(115200); // Inicia la comunicación serial
for (byte i = 0; i < 4; i++) {
pinMode(B[i], OUTPUT); // Configura los pines como salida
}
moverHome(); // Mueve el motor a la posición "Home" (45 grados)
}
void loop() {
Serial.println("Giro a 30 grados");
Giros(30);
delay(5000);
Serial.println("Giro a 60 grados");
Giros(60);
delay(5000);
Serial.println("Giro a 90 grados");
Giros(90);
delay(5000);
Serial.println("Giro a 120 grados");
Giros(120);
delay(5000);
Serial.println("Giro a -50 grados");
Giros(-50);
delay(5000);
// Regresa a la posición "Home" después de completar los movimientos
Serial.println("Regresando a Home");
moverHome();
}
void pasosFWD() {
// Secuencia para mover el motor hacia adelante
Bobinas(1, 0, 0, 0);
delayMicroseconds(Tiempo);
Bobinas(1, 1, 0, 0);
delayMicroseconds(Tiempo);
Bobinas(0, 1, 0, 0);
delayMicroseconds(Tiempo);
Bobinas(0, 1, 1, 0);
delayMicroseconds(Tiempo);
Bobinas(0, 0, 1, 1);
delayMicroseconds(Tiempo);
Bobinas(0, 0, 0, 1);
delayMicroseconds(Tiempo);
Bobinas(1, 0, 0, 1);
delayMicroseconds(Tiempo);
}
void pasosBACK() {
// Secuencia para mover el motor hacia atrás
Bobinas(1, 0, 0, 1);
delayMicroseconds(Tiempo);
Bobinas(0, 0, 0, 1);
delayMicroseconds(Tiempo);
Bobinas(0, 0, 1, 1);
delayMicroseconds(Tiempo);
Bobinas(0, 1, 1, 0);
delayMicroseconds(Tiempo);
Bobinas(0, 1, 0, 0);
delayMicroseconds(Tiempo);
Bobinas(1, 1, 0, 0);
delayMicroseconds(Tiempo);
Bobinas(1, 0, 0, 0);
delayMicroseconds(Tiempo);
}
void Bobinas(byte a, byte b, byte c, byte d) {
// Controla los pines del motor
digitalWrite(B[0], a);
digitalWrite(B[1], b);
digitalWrite(B[2], c);
digitalWrite(B[3], d);
}
void Giros(int Grados) {
// Mueve el motor a un número específico de grados
int Grados_giro = map(Grados, 0, 360, 0, 512); // Mapea grados a pulsos
if (g < Grados_giro) {
while (g < Grados_giro) {
pasosFWD();
g++;
}
} else {
while (g > Grados_giro) {
pasosBACK();
g--;
}
}
}
void moverHome() {
// Mueve el motor a la posición "Home" (45 grados)
int homePos = map(45, 0, 360, 0, 512); // Convertir 45 grados a pulsos
if (g < homePos) {
while (g < homePos) {
pasosFWD();
g++;
}
} else if (g > homePos) {
while (g > homePos) {
pasosBACK();
g--;
}
}
}