Puerto. strong> y seleccione el puerto apropiado. 3. Haga clic en Compilar y, una vez completada la compilación, haga clic en Cargar.">
saltar al contenido

+49 1626571232

info@openelab.io

🚀 Envío gratuito a partir de 50€ en la UE / 80€ en todo el mundo

Proyecto de mini máquina tragamonedas con M5StickC Plus2 -3

17 Oct 2024 0 Comentarios

¡Felicitaciones por alcanzar el paso final de su proyecto de máquina tragamonedas! En este paso, lo guiaremos en la implementación de una función genial: cambiar de detención manual a automática. detener. ¡Pero eso no es todo! También le mostraremos cómo utilizar definiciones de macros para crear un cambio de modo de un botón. Con esta función, puedes cambiar sin esfuerzo entre los modos automático y manual simplemente modificando un solo valor.

¡Es como magia, agregar más flexibilidad y diversión a tu proyecto! Entonces, ¿estás listo para llevar tu máquina tragamonedas al siguiente nivel? ¡Sumerjámonos juntos y hagámoslo realidad!

  

Instalación y Operación

Precondición

Dependencia de software: ArduinoIDE, VScode o text, etc.

Requisitos de hardware: cable USB-C, M5StickCPlus2, etc.

Dependencias: biblioteca M5StickCPlus2, biblioteca Arduino, etc.

Instalación de dependencias

1. Este cambio implica dos partes principales. Primero repasemos la primera parte, basándose en las modificaciones introducidas en la sección anterior. Analizaremos cada cambio paso a paso, empezando desde arriba.

  • Definición de automatización: definimos el interruptor de automatización, que le permite alternar entre modos automáticos y no automáticos.

  • Configuración de Intervalos:

    • time_MAX y time_MIN: estas variables representan el rango del intervalo de tiempo de parada.

    • initTime_MAX e initTime_MIN: indican el intervalo de tiempo de parada inicial durante las primeras etapas del juego.

  • Límites de conteo de parada:

    • startCount_MAX: Define el número máximo de paradas desde el inicio del juego.

    • initTime_MAX y initTime_MIN: (Reiteración) Estos representan la configuración del intervalo inicial para la selección del tiempo de parada.

    • startCount_MAX: esta variable también controla cuántas paradas pueden ocurrir desde el principio.

Con estas variables, tienes más control sobre la timing y la automatización, lo que permite transiciones más suaves entre los modos manual y automático. En la siguiente parte, exploraremos cómo implementar estos intervalos y cambios en el código, aportando flexibilidad a su proyecto.

2. A continuación, veamos la función setup(). Hemos agregado srand(time(0)) para inicializar la función aleatoria con la hora actual, asegurando valores aleatorios únicos en cada ejecución.

Ahora, examinemos la función loop(). Primero, utilizamos Automatización como interruptor para determinar si el sistema funciona en modo automático o manual. Si se selecciona el modo manual, no se requieren cambios. Sin embargo, nos centramos en el modo automático.

En el modo automático, la tarea principal es decidir si los husillos deben detenerse. Los husillos se detienen gradualmente según un tiempo de parada generado aleatoriamente (Count_Num), por lo que no es necesario que el usuario para presionar el botón varias veces.

Cuando se presiona el Botón A (BtnA), o el contador alcanza la condición de parada, los husillos se detendrán uno por uno automáticamente.

  • Estado: SLOTS_INIT En este estado, todos los husillos comienzan a girar simultáneamente y un recuento aleatorio determina cuándo se detienen.

  • Los husillos se detienen automáticamente bajo dos condiciones:

    • Se pulsa el botónA.

    • El contador aleatorio llega al tiempo de parada designado.

Esta lógica garantiza un funcionamiento fluido en modo automático, haciendo que los ejes se detengan sin intervención manual, mejorando la experiencia de juego de la máquina tragamonedas.

// Initialize M5StickC Plus2
 #include "time.h"
#define Automation 1
#define Time_MAX 80
#define Time_MIN 45
#define InitTime_MAX 100
#define InitTime_MIN 80
#define StartCount_MAX 6

void setup() {
        srand(time(0));//added on top of the original few
}

void loop()  {
  static int Slot_Start = 0; // Control the number of spindle starts
  static int Slot_Stop = 0; // Whether to stop the spindle
  static int Count_Stop = 0; //Count the heartbeats of the stop spindle
  static int Count_Num; // Randomly generated stop times in automatic mode

  M5.update(); //Update button status

  if (Automation) { // If automatic mode is enabled
    if (M5.BtnA.wasPressed() || Slot_Stop == 1) { // button press or auto mode trigger stop
      if (state == SLOTS_INIT) { // If in the initialization state
        for (int i = 0; i < SLOT_COUNT; i++) {
          slots[i].start(); // Activate each spindle
        }
        state++;
        Slot_Start = 1; // Record startup status
        Count_Num = rand() % (InitTime_MAX - InitTime_MIN - 1) + InitTime_MIN;// Randomly generated stop times
      } else if (state < SLOTS_STOP) { // If the spindle is running
        Slot_Start++;
        slots[state - 1].stop(); //Stop the current axis
        state++;
      }
    }
    Slot_Stop = 0; // Reset stop sign
  } else { // manual mode
    if (M5.BtnA.wasPressed()) { //Press the button to start or stop the spindle
      if (state == SLOTS_INIT) {
        for (int i = 0; i < SLOT_COUNT; i++) {
          slots[i].start(); // Activate each spindle
        }
        state++;
      } else if (state < SLOTS_STOP) {
        slots[state - 1].stop(); // stop spindle
        state++;
      }
    }
  }
}
        
✔ ¡Copiado!

 

3. A continuación, veamos la segunda parte, que se centra en hacer que cada columna se detenga aleatoriamente. Esta sección se coloca al final de la función de bucle y no se puede mover. Nos centramos aquí sólo en el modo automático.

En esta parte, el modo automático se habilita cuando se activa la macro Automatización se define como 1. En el modo automático, el usuario no necesita presionar un botón para iniciar o detener cada husillo. En cambio, el código administra automáticamente el proceso de inicio y parada para cada huso.

Cuando el Modo automático está habilitado:

  • El sistema inicia automáticamente los husillos y utiliza el contador Count_Stop para realizar un seguimiento del tiempo transcurrido.
  • Cada vez que el contador alcanza un tiempo de parada aleatorio pregenerado (Count_Num), el sistema activa el parada de un husillo.
  • Una vez que se han detenido todos los husos, el sistema restablece su estado y se prepara para la siguiente ronda de operación.
Esta implementación garantiza un juego fluido y con manos libres al automatizar el inicio y la parada de los ejes, lo que mejora el rendimiento y la experiencia del usuario de la máquina tragamonedas.
// Initialize M5StickC Plus2
 if (Automation) { // If in automatic mode
  if (Slot_Start && Slot_Start < StartCount_MAX) { //When at least one shaft has been started and the maximum number of starts has not yet been reached
    Count_Stop++; // Counter increments to record time progress
    if (Count_Stop == Count_Num && state < SLOTS_STOP) { //If the counter reaches a randomly generated stop time
      Slot_Stop = 1; // Trigger auto-stop spindle
      Count_Stop = 0; //Counter resets to zero in preparation for the next stop
      Count_Num = rand() % (Time_MAX - Time_MIN - 1) + Time_MIN; //Randomly generate the next stop interval
    }
  } else if (Slot_Start == StartCount_MAX) { // If all spindles have been activated
    Slot_Start = 0; // Zero the startup counter in preparation for the next startup
  }
}


        
✔ ¡Copiado!

 

Compilar y Ejecutar

 1. Después de completar la instalación de las dependencias, abra el archivo zip descargado.

2. Conecte el M5StickC Plus 2 a su computadora usando un cable USB-C, luego vaya a Herramientas -> Puerto. strong> y seleccione el puerto apropiado.

3. Haga clic en Compilar y, una vez completada la compilación, haga clic en Cargar.

Publicación anterior
Siguiente publicación

Deja un comentario

Todos los comentarios del blog se revisan antes de publicarlos.

Alguien compró recientemente un

Compra el look

Elija opciones

Editar opción
Notificación de nuevo disponible
this is just a warning
Acceso
Carro de la compra
0 elementos