Motor paso a paso posiciones

Hola
Me gustaría darle 3 posiciones específicas a un
MOTOR PASO A PASO 28BYJ-48- 5V CON TARJETA ULN2003, asignar cada posición en grados a un pulsador
Ejemplo
El motor tendrá una posición inicial 0 y el sentido de giro será horario o antihorario

Su rango es desde posición inicial 0 hasta su tope Máximo 720 y de esos 720 pueda devolverse hasta 0

Pulsador1 = al presionar ,el motor gira 240 grados a la derecha
Pulsador2= al presionar, el motor gira 480 grados a la derecha
Pulsador3= al presionar, el motor gira 600 grados a la derecha

La lógica es que al presionar el botón esos grados partan de la posición inicial 0 y complete hasta llegar a posición pero si quiero apretar otro botón y complete con los grados que le Faltan para llegar o le quiten si tiene una posición menor

Ejemplo práctico

Presiono pulsador1 el motor se activa
desde posición inicial 0 ,y comienza a moverse hasta llegar a 240 grados.
Luego El motor se detiene

Ahora me gustaría presionar pulsador 3 , el motor al estar en posición 1 esos 240 grados ,dirá oh me faltan agregar 360 grados para llegar a los grados asignados a pulsador 3 que son 600 grados ,
El motor gira sentido horario hasta llegar a 600
Luego el motor se detiene

Y ahora me gustaría presionar el pulsador2

Al estar en 600 grados de giro
El motor dirá oh me debo devolver a 480 grados debo quitarme 120 grados para devolverme
El motor retrocede hasta llegar a 480 grados
El motor se detiene

Obviamente si vuelvo a presionar el mismo pulsador no hará nada ya que estaría en su misma posición asignada

La idea es que tenga como memoria y vaya presionando de manera aleatoria los pulsadores pero que ellos te lleven la posición asignada para adelante (horario) o se devuelva para atrás (anti horario )

Welcome! Please read the forum guidelines, you have an interesting project but we are not a free design or code writing service. We will be happy help out with your design and or code but first you have to make an attempt to design it, write it, post it and explain what is not working properly.

If there is hardware it is always best to post links to technical information as there are many versions of the same or different items. Since we cannot see your project, my eyes are to weak, you need to post using the language of electronics, an annotated schematic, (best) or a clear picture of a drawing. Pictures never hurt. Frizzing diagrams are not considered schematics here, they are wiring diagrams, they may be great for assembly lousy for troubleshooting.

Useful links - check here for reference posts / tutorials

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @fox_28.

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

Si tengo código, soy nuevo en arduino y en este foro, solo pido respeto y comprensión.

He logrado construir esto , funciona todo o motor es capaz de accionar con mis 3 pulsadores . Pero no de la manera que quiero.

// Definición de pines para el motor y pulsadores
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
#define PULSADOR1 2
#define PULSADOR2 3
#define PULSADOR3 4

// Variables para controlar el motor
int velocidadmotor = 10; // Controla la velocidad del motor
int contadorpasos = 0;   // Cuenta los pasos realizados
const int pasosporvuelta = 2048; // Total de pasos por una vuelta completa
int posicionactual = 0;  // Guarda la posición actual del motor en pasos

// Posiciones en grados que el motor deberá alcanzar
int pos1 = 90;   // Posición para el pulsador 1
int pos2 = 180;  // Posición para el pulsador 2
int pos3 = 270;  // Posición para el pulsador 3

// Tabla de secuencia de pasos
const int secuencia[8][4] = {
  {1, 0, 0, 0},
  {1, 1, 0, 0},
  {0, 1, 0, 0},
  {0, 1, 1, 0},
  {0, 0, 1, 0},
  {0, 0, 1, 1},
  {0, 0, 0, 1},
  {1, 0, 0, 1}
};

void setup() {
  // Configuración de los pines
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  pinMode(PULSADOR1, INPUT_PULLUP);
  pinMode(PULSADOR2, INPUT_PULLUP);
  pinMode(PULSADOR3, INPUT_PULLUP);

  Serial.begin(9600);
}

void loop() {
  // Leer los pulsadores
  if (digitalRead(PULSADOR1) == LOW) {
    moverMotor(pos1);
  } else if (digitalRead(PULSADOR2) == LOW) {
    moverMotor(pos2);
  } else if (digitalRead(PULSADOR3) == LOW) {
    moverMotor(pos3);
  }
}

void moverMotor(int posicionObjetivo) {
  // Convertir la posición objetivo en pasos
  int pasosObjetivo = (posicionObjetivo * pasosporvuelta) / 360;
  int pasosARealizar = pasosObjetivo - posicionactual;

  if (pasosARealizar > 0) {
    for (int i = 0; i < pasosARealizar; i++) {
      realizarPaso(1); // Mover en sentido horario
    }
  } else if (pasosARealizar < 0) {
    for (int i = 0; i < abs(pasosARealizar); i++) {
      realizarPaso(-1); // Mover en sentido antihorario
    }
  }

  posicionactual = pasosObjetivo;
}

void realizarPaso(int sentido) {
  static int pasoActual = 0;

  if (sentido == 1) {
    pasoActual++;
    if (pasoActual == 8) pasoActual = 0;
 
 if (sentido == -
    if (pasoActual == 0) pasoActual = 7;
    else pasoActual--;
  }

  // Energizar las bobinas según la secuencia
  for (int pin = 0; pin < 4; pin++) {
    digitalWrite(IN1 + pin, secuencia[pasoActual][pin]);
  }

  delay(velocidadmotor);
  contadorpasos++;
}

En realizarPaso, los if del inicio creo no son correctos.


  if (sentido == 1) {
    pasoActual++;
    if (pasoActual == 8) pasoActual = 0;
 
 if (sentido == -
    if (pasoActual == 0) pasoActual = 7;
    else pasoActual--;
  }