Poort strong> en selecteer de juiste poort. 3. Klik op Compileren en zodra de compilatie is voltooid, klikt u op Uploaden.">
Doorgaan naar artikel

+49 1626571232

info@openelab.io

🚀Gratis verzending vanaf 50€ in de EU / 80€ wereldwijd

Mini-gokautomaatproject met M5StickC Plus2 -3

17 Oct 2024 0 Opmerkingen

Gefeliciteerd met het bereiken van de laatste stap van uw gokautomaatproject! In deze stap begeleiden we u bij het implementeren van een supercoole functie: overschakelen van handmatige stop naar automatisch stoppen. Maar dat is nog niet alles! We laten u ook zien hoe u macrodefinities gebruikt om een ​​modusschakelaar met één knop. Met deze functie kunt u moeiteloos schakelen tussen automatische en handmatige modi door slechts een enkele waarde te wijzigen.

Het is als magie: u voegt meer flexibiliteit en plezier toe aan uw project! Dus, ben je klaar om je gokautomaat naar een hoger niveau te tillen? Laten we er samen in duiken en het laten gebeuren!

  

Installatie en werking

Voorwaarde

Softwareafhankelijkheid: Arduino IDE, VScode of text, etc.

Hardwarevereisten: USB-C kabel, M5StickCPlus2, enz.

Afhankelijkheden: M5StickCPlus2-bibliotheek, Arduino-bibliotheek, enz.

Installatie van afhankelijkheden

1. Deze verandering bestaat uit twee hoofdonderdelen. Laten we eerst door het eerste deel lopen, voortbouwend op de wijzigingen die in de vorige sectie zijn geïntroduceerd. We zullen elke verandering stap voor stap analyseren, beginnend bij de top.

  • Automatiseringsdefinitie: we hebben de automatiseringsschakelaar gedefinieerd, waarmee u kunt schakelen tussen automatische en niet-automatische modi.

  • Intervalinstellingen:

    • time_MAX en time_MIN: deze variabelen vertegenwoordigen het bereik voor het stoptijdinterval.

    • initTime_MAX en initTime_MIN: deze geven het initiële stoptijdsinterval aan tijdens de vroege stadia van het spel.

  • Stop Aantal Limieten:

    • startCount_MAX: dit definieert het maximale aantal stops vanaf het begin van het spel.

    • initTime_MAX en initTime_MIN: (herhaling) Deze vertegenwoordigen de initiële intervalinstellingen voor de stoptijdselectie.

    • startCount_MAX: deze variabele bepaalt ook hoeveel stops er vanaf het begin kunnen plaatsvinden.

Met deze variabelen heeft u meer controle over timing en automatisering, waardoor vloeiendere overgangen tussen handmatige en automatische modi mogelijk zijn. In het volgende deel onderzoeken we hoe u deze intervallen en schakelaars in de code kunt implementeren, waardoor uw project flexibeler wordt.

2. Laten we vervolgens eens kijken naar de setup() functie. We hebben srand(time(0)) toegevoegd om de willekeurige functie te initialiseren met de huidige tijd, waardoor bij elke uitvoering unieke willekeurige waarden worden gegarandeerd.

Laten we nu de functie loop() onderzoeken. Ten eerste gebruiken we Automatisering als schakelaar om te bepalen of het systeem in de automatische of handmatige modus werkt. Als de handmatige modus is geselecteerd, zijn er geen wijzigingen vereist. Onze focus ligt echter op de automatische modus.

In de automatische modus is de primaire taak het beslissen of de spindels moeten stoppen. De spindels stoppen geleidelijk op basis van een willekeurig gegenereerde stoptijd (Count_Num), dus de gebruiker hoeft niets te doen om meerdere keren op de knop te drukken.

Wanneer Knop A (BtnA) wordt ingedrukt, of de teller de stopconditie bereikt, stoppen de spindels één voor één automatisch.

  • Status: SLOTS_INIT In deze status beginnen alle spindels tegelijkertijd te draaien, en een willekeurige telling bepaalt wanneer ze stoppen.

  • De spindels stoppen automatisch onder twee voorwaarden:

    • Knop A is ingedrukt.

    • De willekeurige teller bereikt de aangegeven stoptijd.

Deze logica zorgt voor een soepele werking in de automatische modus, waardoor de spindels stoppen zonder handmatige tussenkomst, wat de gameplay-ervaring van de gokautomaat verbetert.

// 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++;
      }
    }
  }
}
        
✔ Gekopieerd!

 

3. Laten we vervolgens eens kijken naar het tweede deel, waarin de nadruk ligt op het willekeurig stoppen van elke kolom. Deze sectie wordt aan het einde van de lusfunctie geplaatst en kan niet worden verplaatst. Onze focus ligt hier alleen op de automatische modus.

In dit deel wordt de automatische modus ingeschakeld wanneer de macro Automatisering wordt gedefinieerd als 1. In de automatische modus hoeft de gebruiker niet op een knop te drukken om elke spil te starten of stoppen. In plaats daarvan beheert de code automatisch het start- en stopproces voor elke spil.

Wanneer Automatische modus is ingeschakeld:

  • Het systeem start automatisch de spindels en gebruikt de teller Count_Stop om de verstreken tijd bij te houden.
  • Elke keer dat de teller een vooraf gegenereerde willekeurige stoptijd (Count_Num) bereikt, activeert het systeem de stoppen van één spil.
  • Zodra alle spindels zijn gestopt, resett het systeem zijn status en bereidt het zich voor op de volgende bedieningsronde.
Deze implementatie zorgt voor een soepele, handsfree gameplay door het starten en stoppen van de spindels te automatiseren, wat de prestaties en gebruikerservaring van de gokkast verbetert.
// 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
  }
}


        
✔ Gekopieerd!

 

Compileren en uitvoeren

 1. Nadat u de installatie van de afhankelijkheden hebt voltooid, opent u het gedownloade zip-archief.

2. Sluit de M5StickC Plus 2 aan op uw computer met behulp van een USB-C kabel en ga vervolgens naar Extra -> Poort strong> en selecteer de juiste poort.

3. Klik op Compileren en zodra de compilatie is voltooid, klikt u op Uploaden.

Vorig bericht
Volgende bericht

laat een reactie achter

Alle blogreacties worden vóór publicatie gecontroleerd

Iemand heeft onlangs een gekocht

Bedankt voor het abonneren!

Deze e-mail is geregistreerd!

Shop de look

Kies opties

Bewerk optie
Terug op voorraad melding
this is just a warning
Log in
Winkelmand
0 artikelen