M5StickC Plus2: Opret et mini spilleautomatprojekt-3

Tillykke med at nå det sidste trin i dit spilleautomatprojekt! I dette trin vil vi guide dig gennem implementeringen af en super fed funktion: at skifte fra manuel stop til automatisk stop. Men det er ikke alt! Vi vil også vise dig, hvordan du bruger makrodefinitioner til at skabe en en-knaps tilstandsskifter. Med denne funktion kan du ubesværet skifte mellem auto- og manuel tilstand blot ved at ændre en enkelt værdi.

Det er som magi, der tilføjer mere fleksibilitet og sjov til dit projekt! Så, er du klar til at tage din spilleautomat til det næste niveau? Lad os dykke ned i det sammen og få det til at ske!

  

Installation og drift

Forudsætning

Softwareafhængighed: Arduino IDE, VScode eller tekst osv.

Hardwarekrav: USB-C kabel, M5StickCPlus2 osv.

Afhængigheder: M5StickCPlus2 bibliotek, Arduino bibliotek osv.

Installation af afhængigheder

1. Denne ændring involverer to hoveddele. Lad os først gennemgå den første del, som bygger videre på de ændringer, der blev introduceret i det foregående afsnit. Vi vil analysere hver ændring trin for trin, startende fra toppen.

  • Automationsdefinition: Vi definerede automationsafbryderen, som giver dig mulighed for at skifte mellem automatisk og ikke-automatisk tilstand.

  • Intervalindstillinger:

    • time_MAX og time_MIN: Disse variabler repræsenterer intervallet for stop-tidsintervallet.

    • initTime_MAX og initTime_MIN: Disse angiver det indledende stoptidsinterval i spillets tidlige faser.

  • Stop tællegrænser:

    • startCount_MAX: Dette definerer det maksimale antal stop fra spillets begyndelse.

    • initTime_MAX og initTime_MIN: (Gentagelse) Disse repræsenterer de indledende intervalindstillinger for valg af stoptid.

    • startCount_MAX: Denne variabel styrer også, hvor mange stop der kan ske fra starten.

Med disse variabler har du mere kontrol over timing og automatisering, hvilket muliggør glattere overgange mellem manuel og automatisk tilstand. I næste del vil vi udforske, hvordan man implementerer disse intervaller og kontakter i koden, hvilket bringer fleksibilitet til dit projekt.

2. Dernæst ser vi på setup()-funktionen. Vi har tilføjet srand(time(0)) for at initialisere den tilfældige funktion med den aktuelle tid, hvilket sikrer unikke tilfældige værdier ved hver kørsel.

Lad os nu se på loop()-funktionen. Først bruger vi Automation som en kontakt for at afgøre, om systemet kører i automatisk eller manuel tilstand. Hvis manuel tilstand vælges, kræves der ingen ændringer. Vores fokus er dog på automatisk tilstand.

I automatisk tilstand er den primære opgave at afgøre, om spindlerne skal stoppe. Spindlerne stopper gradvist baseret på en tilfældigt genereret stoptid (Count_Num), så brugeren behøver ikke at trykke på knappen flere gange.

Når Knappen A (BtnA) trykkes, eller tælleren når stopbetingelsen, vil spindlerne stoppe én efter én automatisk.

  • Status: SLOTS_INIT I denne tilstand starter alle spindler samtidig med at dreje, og en tilfældig tælling bestemmer, hvornår de stopper.

  • Spindlerne stopper automatisk under to betingelser:

    • Knap A trykkes.

    • Den tilfældige tæller når den angivne stoptid.

Denne logik sikrer en jævn drift i automatisk tilstand, så spindlerne stopper uden manuel indgriben, hvilket forbedrer spilleoplevelsen på spilleautomaten.

// 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));//tilføjet ovenpå det originale få } void loop() { static int Slot_Start = 0; // Kontroller antallet af spindelstarter static int Slot_Stop = 0; // Om spindlen skal stoppes static int Count_Stop = 0; // Tæl hjerteslag for stop af spindlen static int Count_Num; // Tilfældige genererede stoptider i automatisk tilstand M5.update(); // Opdater knapstatus if (Automation) { // Hvis automatisk tilstand er aktiveret if (M5.BtnA.wasPressed() || Slot_Stop == 1) { // knaptryk eller automatisk tilstand udløser stop if (state == SLOTS_INIT) { // Hvis i initialiseringstilstand for (int i = 0; i < SLOT_COUNT; i++) { slots[i].start(); // Aktiver hver spindel } state++; Slot_Start = 1; // Registrer opstartstatus Count_Num = rand() % (InitTime_MAX - InitTime_MIN - 1) + InitTime_MIN; // Tilfældigt genererede stoptider } else if (state < SLOTS_STOP) { // Hvis spindlen kører Slot_Start++; slots[state - 1].stop(); //Stop den aktuelle akse state++; } } Slot_Stop = 0; // Nulstil stoptegn } else { // manuel tilstand if (M5.BtnA.wasPressed()) { //Tryk på knappen for at starte eller stoppe spindlen if (state == SLOTS_INIT) { for (int i = 0; i < SLOT_COUNT; i++) { slots[i].start(); // Aktiver hver spindel } state++; } else if (state < SLOTS_STOP) { slots[state - 1].stop(); // stop spindel state++; } } } }
✔ Kopieret!

 

3. Dernæst ser vi på anden del, som fokuserer på at få hver kolonne til at stoppe tilfældigt. Denne sektion er placeret sidst i loop-funktionen og kan ikke flyttes. Vores fokus her er kun på automatisk tilstand.

I denne del aktiveres automatisk tilstand når macro Automation er defineret som 1. I automatisk tilstand behøver brugeren ikke trykke på en knap for at starte eller stoppe hver spindel. I stedet styrer koden automatisk start- og stopprocessen for hver spindel.

Når Auto Mode er aktiveret:

  • Systemet starter automatisk spindlerne og bruger tælleren Count_Stop til at holde styr på den forløbne tid.
  • Hver gang tælleren når et forudgenereret tilfældigt stoptidspunkt (Count_Num), udløser systemet stop af en spindel.
  • Når alle spindler er stoppet, nulstiller systemet sin tilstand og forbereder sig til næste runde.
Denne implementering sikrer en glat, håndfri spiloplevelse ved automatisk at starte og stoppe spindlerne, hvilket forbedrer spilleautomatens ydelse og brugeroplevelse.
// 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
  }
}


        
✔ Kopieret!

 

Kompilér og kør

 1. Når installationen af afhængighederne er fuldført, skal du åbne den downloadede zip-arkiv.

2. Tilslut M5StickC Plus 2 til din computer med et USB-C kabel, og gå derefter til Værktøjer -> Port og vælg den passende port.

3. Klik på Compile, og når kompileringen er færdig, klik på Upload.

Efterlad en kommentar

Din e-mail-adresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

Sidebar

Seneste indlæg

Dette afsnit inkluderer i øjeblikket ikke noget indhold. Tilføj indhold til dette afsnit ved hjælp af sidebar'en.

Tilmeld dig vores nyhedsbrev

Få de seneste oplysninger om vores produkter og særlige tilbud.