Herzlichen Glückwunsch, dass du den letzten Schritt deines Spielautomat-Projekts erreicht hast! In diesem Schritt werden wir dir zeigen, wie du eine super coole Funktion implementiert: den Wechsel von manuellem Stopp zu automatischem Stopp. Aber das ist noch nicht alles! Wir werden dir auch zeigen, wie du Makrodefinitionen verwendest, um einen Ein-Knopf-Moduswechsel zu erstellen. Mit dieser Funktion kannst du mühelos zwischen Auto- und Handbetrieb wechseln, indem du einfach einen einzigen Wert änderst.
Es ist wie Magie, die mehr Flexibilität und Spaß in dein Projekt bringt! Bist du bereit, deinen Spielautomaten auf die nächste Stufe zu bringen? Lass uns gemeinsam eintauchen und es verwirklichen!
Installation und Bedienung
Voraussetzungen
Softwareabhängigkeiten: Arduino IDE, VScode oder Texteditor usw.
Hardwareanforderungen: USB-C-Kabel, M5StickCPlus2, usw.
Abhängigkeiten: M5StickCPlus2-Bibliothek, Arduino-Bibliothek, usw.
Installation der Abhängigkeiten
1. Diese Änderung umfasst zwei Hauptteile. Lass uns zuerst den ersten Teil durchgehen, aufbauend auf den Änderungen, die im vorherigen Abschnitt eingeführt wurden. Wir werden jede Änderung Schritt für Schritt analysieren, angefangen von oben.
-
Automatisierungsdefinition: Wir haben den Automatisierungsschalter definiert, der es dir ermöglicht, zwischen automatischen und nicht-automatischen Modi zu wechseln.
-
Intervall-Einstellungen:
-
time_MAX und time_MIN: Diese Variablen repräsentieren den Bereich für das Stop-Zeitintervall.
-
initTime_MAX und initTime_MIN: Diese geben das eingangs Stop-Zeitintervall in den frühen Phasen des Spiels an.
-
-
Stop-Zählgrenzen:
-
startCount_MAX: Dies definiert die maximale Anzahl von Stopps zu Beginn des Spiels.
-
initTime_MAX und initTime_MIN: (Wiederholung) Diese stellen die initialen Intervaleinstellungen für die Auswahl der Stop-Zeiten dar.
-
startCount_MAX: Diese Variable kontrolliert ebenfalls wie viele Stopps vom Anfang an erfolgen können.
-
Mit diesen Variablen hast du mehr Kontrolle über Zeit und Automatisierung, was sanftere Übergänge zwischen manuellem und automatischem Modus ermöglicht. Im nächsten Teil werden wir erkunden, wie wir diese Intervalle und Schalter im Code implementieren, um dein Projekt flexibler zu gestalten.
2. Als Nächstes betrachten wir die setup()
-Funktion. Wir haben srand(time(0))
hinzugefügt, um die Zufallsfunktion mit der aktuellen Zeit zu initialisieren, um in jedem Durchlauf einzigartige Zufallswerte zu gewährleisten.
Jetzt schauen wir uns die loop()
-Funktion an. Zuerst verwenden wir Automatisierung als Schalter, um festzustellen, ob das System im automatischen oder manuellen Modus betrieben wird. Wenn der manuelle Modus ausgewählt ist, sind keine Änderungen erforderlich. Unser Fokus liegt jedoch auf dem automatischen Modus.
Im automatischen Modus besteht die Hauptaufgabe darin zu entscheiden, ob die Walzen anhalten sollten. Die Walzen stoppen allmählich basierend auf einer zufällig generierten Stop-Zeit (Count_Num
), sodass der Benutzer nicht mehrere Male den Knopf drücken muss.
Wenn Knopf A (BtnA) gedrückt wird oder der Zähler die Stopp-Bedingung erreicht, stoppen die Walzen eine nach der anderen automatisch.
-
Status: SLOTS_INIT In diesem Status begonnen alle Walzen gleichzeitig zu drehen, und eine zufällige Anzahl bestimmt, wann sie anhalten.
-
Die Walzen stoppen automatisch unter zwei Bedingungen:
-
Knopf A wird gedrückt.
-
Der zufällige Zähler erreicht die festgelegte Stoppzeit.
-
Diese Logik gewährleistet einen reibungslosen Betrieb im automatischen Modus, wodurch die Walzen ohne manuelles Eingreifen stoppen und das Spielerlebnis des Spielautomaten verbessern.
// Initialisiere M5StickC Plus2
#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));//hinzugefügt an die Spitze der ursprünglichen Funktionen } void loop() { static int Slot_Start = 0; // Steuere die Anzahl der Walzenstarts static int Slot_Stop = 0; // Ob die Walze stoppen soll static int Count_Stop = 0; // Zähle die Herzschläge der stoppenden Walze static int Count_Num; // Zufällig generierte Stop-Zeiten im automatischen Modus M5.update(); // Aktualisiere den Button-Status if (Automation) { // Wenn der Automatikmodus aktiviert ist if (M5.BtnA.wasPressed() || Slot_Stop == 1) { // Knopfdruck oder automatische Stopp-Auslösung if (state == SLOTS_INIT) { // Wenn im Initialisierungszustand for (int i = 0; i < SLOT_COUNT; i++) { slots[i].start(); // Aktiviere jede Walze } state++; Slot_Start = 1; // Starte den Startup-Status Count_Num = rand() % (InitTime_MAX - InitTime_MIN - 1) + InitTime_MIN;// Zufällig generierte Stop-Zeiten } else if (state < SLOTS_STOP) { // Wenn die Walze läuft Slot_Start++; slots[state - 1].stop(); // Stoppe die aktuelle Walze state++; } } Slot_Stop = 0; // Setze das Stoppsignal zurück } else { // manueller Modus if (M5.BtnA.wasPressed()) { // Drücke den Knopf, um die Walze zu starten oder zu stoppen if (state == SLOTS_INIT) { for (int i = 0; i < SLOT_COUNT; i++) { slots[i].start(); // Aktiviere jede Walze } state++; } else if (state < SLOTS_STOP) { slots[state - 1].stop(); // stoppe die Walze state++; } } } }
3. Als Nächstes betrachten wir den zweiten Teil, der sich darauf konzentriert, jede Spalte zufällig anzuhalten. Dieser Abschnitt wird am Ende der Schleifenfunktion platziert und kann nicht verschoben werden. Unser Fokus liegt hier nur auf dem automatischen Modus.
In diesem Teil ist der automatische Modus aktiviert, wenn das Makro Automation
auf 1 definiert ist. Im automatischen Modus muss der Benutzer keinen Knopf drücken, um jede Walze zu starten oder zu stoppen. Stattdessen verwaltet der Code automatisch den Start- und Stoppprozess für jede Walze.
Wenn Auto-Modus aktiviert ist:
-
Das System startet die Walzen automatisch und verwendet den Zähler
Count_Stop
, um die verstrichene Zeit zu verfolgen. -
Jedes Mal, wenn der Zähler eine vorher generierte zufällige Stop-Zeit (
Count_Num
) erreicht, löst das System das Stoppen einer Walze aus. -
Sobald alle Walzen gestoppt wurden, setzt das System seinen Status zurück und bereitet sich auf die nächste Runde vor.
// Initialisiere M5StickC Plus2 if (Automation) { // Wenn im automatischen Modus if (Slot_Start && Slot_Start < StartCount_MAX) { // Wenn mindestens eine Walze gestartet wurde und die maximale Anzahl von Starts noch nicht erreicht ist Count_Stop++; // Zähler erhöht sich, um den Zeitfortschritt zu erfassen if (Count_Stop == Count_Num && state < SLOTS_STOP) { // Wenn der Zähler eine zufällig generierte Stop-Zeit erreicht Slot_Stop = 1; // Auslösen des Auto-Stopps der Walze Count_Stop = 0; // Zähler wird auf Null zurückgesetzt, um sich auf den nächsten Stopp vorzubereiten Count_Num = rand() % (Time_MAX - Time_MIN - 1) + Time_MIN; // Zufällig die nächste Stop-Intervallgenerierung } } else if (Slot_Start == StartCount_MAX) { // Wenn alle Walzen aktiviert sind Slot_Start = 0; // Setze den Startzähler auf Null, um sich auf den nächsten Start vorzubereiten } }
Komplilieren und Ausführen
1. Nachdem du die Installation der Abhängigkeiten abgeschlossen hast, öffne das heruntergeladene Zip-Archiv.
2. Verbinde den M5StickC Plus 2 mit deinem Computer über ein USB-C-Kabel und gehe zu Werkzeuge -> Port und wähle den entsprechenden Port aus.
3. Klicke auf Kompilieren, und sobald die Kompilation abgeschlossen ist, klicke auf Hochladen.