Proyecto de mini máquina tragamonedas con M5StickC Plus2 -3
¡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++; } } } }
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.
// 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 } }
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.