Grattis till att ha nått slutsteget i ditt spelautomatprojekt! I detta steg guidar vi dig genom att implementera en supercool funktion: att byta från manuell stopp till automatisk stopp. Men det är inte allt! Vi visar dig också hur du använder makrodefinitioner för att skapa en en-knapps lägesväxling. Med denna funktion kan du enkelt växla mellan auto- och manuella lägen bara genom att ändra ett enda värde.
Det är som magi, att lägga till mer flexibilitet och roligt till ditt projekt! Så, är du redo att ta din spelautomat till nästa nivå? Låt oss dyka in tillsammans och göra det möjligt!
Installation och drift
Förutsättning
Mjukvaruberoende: Arduino IDE, VScode eller text osv.
Hårdvarukrav: USB-C kabel, M5StickCPlus2 osv.
Beroenden: M5StickCPlus2-bibliotek, Arduino-bibliotek osv.
Installation av beroenden
1. Denna ändring involverar två huvuddelar. Låt oss först gå igenom den första delen, med utgångspunkt i de ändringar som introducerades i föregående avsnitt. Vi kommer att analysera varje ändring steg för steg, med början från toppen.
-
Automationsdefinition: Vi definierade automationsbrytaren, som låter dig växla mellan automatiska och icke-automatiska lägen.
-
Intervallinställningar:
-
time_MAX och time_MIN: Dessa variabler representerar intervallet för stopp-tidsintervallet.
-
initTime_MAX och initTime_MIN: Dessa anger det initiala stopptidsintervallet under spelets tidiga skeden.
-
-
Gränser för stoppantal:
-
startCount_MAX: Detta definierar maximalt antal stopp från spelets början.
-
initTime_MAX och initTime_MIN: (Upprepning) Dessa representerar de initiala intervallinställningarna för val av stopptid.
-
startCount_MAX: Denna variabel styr också hur många stopp som kan ske från start.
-
Med dessa variabler har du mer kontroll över timing och automation, vilket möjliggör smidigare övergångar mellan manuellt och automatiskt läge. I nästa del ska vi utforska hur man implementerar dessa intervaller och brytare i koden för att ge flexibilitet till ditt projekt.
2. Nästa steg är att titta på setup()
-funktionen. Vi har lagt till srand(time(0))
för att initiera slumpfunktionen med aktuell tid, vilket säkerställer unika slumpvärden vid varje körning.
Nu ska vi undersöka loop()
-funktionen. Först använder vi Automation som en brytare för att avgöra om systemet ska köras i automatiskt eller manuellt läge. Om manuellt läge väljs krävs inga ändringar. Vårt fokus är dock på automatiskt läge.
I automatiskt läge är huvuduppgiften att avgöra om spindlarna ska stanna. Spindlarna stannar gradvis baserat på en slumpmässigt genererad stopptid (Count_Num
), så användaren behöver inte trycka på knappen flera gånger.
När Knapp A (BtnA) trycks ned, eller när räknaren når stoppvillkoret, kommer spindlarna att stanna en efter en automatiskt.
-
Status: SLOTS_INIT I detta läge startar alla spindlar att snurra samtidigt, och en slumpmässig räkning avgör när de stannar.
-
Spindlarna stannar automatiskt under två förutsättningar:
-
Knapp A trycks ned.
-
Den slumpmässiga räknaren når den angivna stopptiden.
-
Denna logik säkerställer smidig drift i automatiskt läge, så att spindlarna stannar utan manuell inblandning, vilket förbättrar spelupplevelsen i spelautomaten.
// Initialize 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));//lagt till ovanpå originalet } void loop() { static int Slot_Start = 0; // Styr antalet spindelstarter static int Slot_Stop = 0; // Om spindeln ska stoppas static int Count_Stop = 0; // Räkna hjärtslagen för att stoppa spindeln static int Count_Num; // Slumpmässigt genererade stopptider i automatiskt läge M5.update(); // Uppdatera knappstatus if (Automation) { // Om automatiskt läge är aktiverat if (M5.BtnA.wasPressed() || Slot_Stop == 1) { // knapptryckning eller automatisk lägesutlösning för stopp if (state == SLOTS_INIT) { // Om i initialiseringsläge for (int i = 0; i < SLOT_COUNT; i++) { slots[i].start(); // Aktivera varje spindel } state++; Slot_Start = 1; // Registrera startstatus Count_Num = rand() % (InitTime_MAX - InitTime_MIN - 1) + InitTime_MIN; // Slumpmässigt genererade stopptider } else if (state < SLOTS_STOP) { // Om spindeln är igång Slot_Start++; slots[state - 1].stop(); //Stoppa den aktuella axeln state++; } } Slot_Stop = 0; // Återställ stopptecken } else { // manuellt läge if (M5.BtnA.wasPressed()) { //Tryck på knappen för att starta eller stoppa spindeln if (state == SLOTS_INIT) { for (int i = 0; i < SLOT_COUNT; i++) { slots[i].start(); // Aktivera varje spindel } state++; } else if (state < SLOTS_STOP) { slots[state - 1].stop(); // stoppa spindel state++; } } } }
3. Nästa, låt oss titta på andra delen, som fokuserar på att varje kolumn stoppar slumpmässigt. Denna sektion är placerad i slutet av loop-funktionen och kan inte flyttas. Vårt fokus här är endast på automatiskt läge.
I denna del aktiveras automatiskt läge när makrot Automation
är satt till 1. I automatiskt läge behöver användaren inte trycka på någon knapp för att starta eller stoppa varje spindel. Istället hanterar koden automatiskt start- och stoppprocessen för varje spindel.
När Automatiskt läge är aktiverat:
-
Systemet startar automatiskt spindlarna och använder räknaren
Count_Stop
för att hålla koll på förfluten tid. -
Varje gång räknaren når en förgenererad slumpmässig stopptid (
Count_Num
), triggar systemet stopp av en spindel. -
När alla spindlar har stoppats, återställer systemet sitt tillstånd och förbereder för nästa omgång.
// 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 } }
Kompilera och kör
1. Efter att ha slutfört installationen av beroenden, öppna den nedladdade zip-arkivet.
2. Anslut M5StickC Plus 2 till din dator med en USB-C kabel, gå sedan till Verktyg -> Port och välj rätt port.
3. Klicka på Komplilera, och när kompileringen är klar, klicka på Ladda upp.