18 pinMode(
pinA, OUTPUT);
19 pinMode(
pinB, OUTPUT);
20 pinMode(
pinC, OUTPUT);
21 pinMode(
pinD, OUTPUT);
71 case 0: digitalWrite(
pinA, HIGH); digitalWrite(
pinB, LOW); digitalWrite(
pinC, LOW); digitalWrite(
pinD, LOW);
break;
72 case 1: digitalWrite(
pinA, HIGH); digitalWrite(
pinB, HIGH); digitalWrite(
pinC, LOW); digitalWrite(
pinD, LOW);
break;
73 case 2: digitalWrite(
pinA, LOW); digitalWrite(
pinB, HIGH); digitalWrite(
pinC, LOW); digitalWrite(
pinD, LOW);
break;
74 case 3: digitalWrite(
pinA, LOW); digitalWrite(
pinB, HIGH); digitalWrite(
pinC, HIGH); digitalWrite(
pinD, LOW);
break;
75 case 4: digitalWrite(
pinA, LOW); digitalWrite(
pinB, LOW); digitalWrite(
pinC, HIGH); digitalWrite(
pinD, LOW);
break;
76 case 5: digitalWrite(
pinA, LOW); digitalWrite(
pinB, LOW); digitalWrite(
pinC, HIGH); digitalWrite(
pinD, HIGH);
break;
77 case 6: digitalWrite(
pinA, LOW); digitalWrite(
pinB, LOW); digitalWrite(
pinC, LOW); digitalWrite(
pinD, HIGH);
break;
78 case 7: digitalWrite(
pinA, HIGH); digitalWrite(
pinB, LOW); digitalWrite(
pinC, LOW); digitalWrite(
pinD, HIGH);
break;
92 unsigned long ahora = micros();
118 for (
int i = 0; i < this->
pasos; i++) {
126 for (
int i = 0; i < this->
pasos; i++) {
174 float diff = objetivo - actual;
176 if (diff > 180.0f) diff -= 360.0f;
177 if (diff < -180.0f) diff += 360.0f;
186 float g = fmod(grados, 360.0f);
187 return (g < 0) ? g + 360.0f : g;
201 Serial.println(
"====================================");
202 Serial.print(
"Paso actual: ");
203 Serial.print(pasoActualDelBucle);
205 Serial.println(this->
pasos);
207 Serial.print(
"Diferencia circular: ");
209 Serial.println(
" grados");
211 Serial.print(
"Pasos totales calculados: ");
212 Serial.println(this->
pasos);
214 Serial.print(
"Dirección: ");
217 else Serial.println(
"Sin movimiento");
219 Serial.print(
"Grados recorridos hasta ahora: ");
221 Serial.println(
" grados");
223 Serial.print(
"Grado actual (antes de normalizar): ");
226 Serial.println(
"====================================");
float gradosCorriendo
Ángulo recorrido durante el movimiento (progreso).
void movimientoPosicionRelativo(float grados, bool debugMSG=false)
Mueve el motor hacia un ángulo relativo usando el camino más corto.
int pasos
Pasos totales a ejecutar en el movimiento actual.
int pasoActual
Índice de la secuencia (0–7).
float diferenciaCircular(float gradosActuales, float gradosObjetivo)
Calcula la diferencia circular entre dos ángulos.
float gradoActual
Ángulo actual del motor (0–360 normalizado).
void pasoAtras()
Retrocede un paso en la secuencia del motor.
bool direccionAdelante
Dirección: true = adelante.
void movimientoContinuo()
Ejecuta movimiento continuo según la velocidad configurada.
int convertirGradosAPasos(float grados)
Convierte grados a pasos del motor.
float movimientoDePosicionGradosCorriendo(int movimientoPasos)
Actualiza y devuelve los grados recorridos durante el movimiento.
unsigned long retardoPaso
Microsegundos entre pasos (determina la velocidad).
MotorPaso(uint8_t pinA, uint8_t pinB, uint8_t pinC, uint8_t pinD)
Constructor del motor paso a paso.
float convertirPasosAGrados(int pasos)
Convierte pasos del motor a grados.
void aplicarPaso(int indicePaso)
Aplica un paso específico de la secuencia (0–7).
bool direccionAtras
Dirección: true = atrás.
int pasosPorVuelta
Pasos necesarios para 360°
unsigned long tiempoUltimoPaso
Marca temporal del último paso ejecutado.
void fijarVelocidad(float rpm)
Establece la velocidad del motor en RPM.
void pasoAdelante()
Avanza un paso en la secuencia del motor.
float diferencia
Diferencia circular entre gradoActual y gradosObjetivo (–180 a +180).
void debugMovimientoRelativo(int pasoActualDelBucle)
Imprime información detallada del movimiento relativo.
short rpm
Velocidad configurada en RPM.
float normalizarGrados(float grados)
Normaliza un ángulo al rango 0–360 grados.
float gradosObjetivo
Ángulo objetivo solicitado.