M5StickC Plus2: Vytvořte mini projekt výherního automatu-3

Gratulujeme k dosažení závěrečného kroku vašeho projektu výherního automatu! V tomto kroku vás provedeme implementací super skvělé funkce: přechodu z ručního zastavení na automatické zastavení. Ale to není všechno! Ukážeme vám také, jak použít makro definice k vytvoření přepínače režimu jedním tlačítkem. S touto funkcí můžete snadno přepínat mezi automatickým a ručním režimem jen úpravou jedné hodnoty.

Je to jako kouzlo, přidává více flexibility a zábavy do vašeho projektu! Takže, jste připraveni posunout svůj výherní automat na další úroveň? Pojďme do toho společně a udělejme to skutečností!

  

Instalace a provoz

Předpoklad

Softwarová závislost: Arduino IDE, VScode nebo text atd.

Požadavky na hardware: USB-C kabel, M5StickCPlus2 atd.

Závislosti: Knihovna M5StickCPlus2, Arduino knihovna atd.

Instalace závislostí

1. Tato změna zahrnuje dvě hlavní části. Nejprve projdeme první část, navazující na úpravy představené v předchozí sekci. Analyzujeme každou změnu krok za krokem, začínaje odshora.

  • Definice automatizace: Definovali jsme přepínač automatizace, který vám umožňuje přepínat mezi automatickým a neautomatickým režimem.

  • Nastavení intervalu:

    • time_MAX a time_MIN: Tyto proměnné představují rozsah intervalu zastavení času.

    • initTime_MAX a initTime_MIN: Tyto označují počáteční interval zastavení času během raných fází hry.

  • Limity počtu zastavení:

    • startCount_MAX: Toto definuje maximální počet zastávek od začátku hry.

    • initTime_MAX a initTime_MIN: (Opakování) Tyto představují počáteční nastavení intervalu pro výběr doby zastavení.

    • startCount_MAX: Tato proměnná také určuje, kolik zastávek může nastat od začátku.

S těmito proměnnými máte větší kontrolu nad časováním a automatizací, což umožňuje plynulejší přechody mezi manuálním a automatickým režimem. V další části prozkoumáme, jak implementovat tyto intervaly a přepínače v kódu, čímž přineseme vašemu projektu větší flexibilitu.

2. Dále se podívejme na setup() funkci. Přidali jsme srand(time(0)) pro inicializaci náhodné funkce s aktuálním časem, což zajišťuje jedinečné náhodné hodnoty při každém spuštění.

Nyní si prohlédneme loop() funkci. Nejprve používáme Automatizaci jako přepínač k určení, zda systém pracuje v automatickém nebo manuálním režimu. Pokud je vybrán manuální režim, nejsou potřeba žádné změny. Naším zaměřením je však automatický režim.

V automatickém režimu je hlavním úkolem rozhodnout, zda by se vřetena měla zastavit. Vřetena se zastavují postupně na základě náhodně vygenerovaného času zastavení (Count_Num), takže uživatel nemusí tlačítko mačkat opakovaně.

Když je stisknuto tlačítko A (BtnA) nebo když čítač dosáhne zastavovací podmínky, vřetena se automaticky zastaví jedno po druhém.

  • Stav: SLOTS_INIT V tomto stavu všechny vřetena začnou současně rotovat a náhodný počet určuje, kdy se zastaví.

  • Vřetena se automaticky zastaví za dvou podmínek:

    • Tlačítko A je stisknuto.

    • náhodný čítač dosáhne určeného času zastavení.

Tato logika zajišťuje plynulý provoz v automatickém režimu, díky čemuž se vřetena zastaví bez manuálního zásahu, což zlepšuje herní zážitek ze slotu.

// Initialize M5StickC Plus2
#define Automatizace 1 #definovat Time_MAX 80 #define Čas_MIN 45 #define InitTime_MAX 100 #define InitTime_MIN 80 #define StartCount_MAX 6 void setup() { srand(time(0));//přidáno na začátek původního kódu } void loop() { statická int Slot_Start = 0; // Řízení počtu startů vřetena static int Slot_Stop = 0; // Zda zastavit vřeteno static int Count_Stop = 0; //Počítat tepové signály zastavovacího vřetena statická int Count_Num; // Náhodně generované časy zastavení v automatickém režimu M5.update(); //Aktualizovat stav tlačítka if (Automation) { // Pokud je povolen automatický režim if (M5.BtnA.byloStisknuto() || Slot_Stop == 1) { // stisk tlačítka nebo automatické zastavení režimu if (state == SLOTS_INIT) { // Pokud je ve stavu inicializace for (int i = 0; i < SLOT_COUNT; i++) { slots[i].start(); // Aktivujte každý vřeten } stav++; Slot_Start = 1; // Zaznamenat stav spuštění Count_Num = rand() % (InitTime_MAX - InitTime_MIN - 1) + InitTime_MIN;// Náhodně generované časy zastavení } else if (state < SLOTS_STOP) { // Pokud je vřeteno v chodu Slot_Start++; slots[state - 1].stop(); //Zastavit aktuální osu stav++; } } Slot_Stop = 0; // Resetovat stopku } jinak { // manuální režim if (M5.BtnA.wasPressed()) { //Stiskněte tlačítko pro spuštění nebo zastavení vřetena if (state == SLOTS_INIT) { for (int i = 0; i < SLOT_COUNT; i++) { slots[i].start(); // Aktivujte každý vřeten } stav++; } else if (state < SLOTS_STOP) { slots[state - 1].stop(); // zastavit vřeteno stav++; } } } }
✔ Zkopírováno!

 

3. Dále se podívejme na druhou část, která se zaměřuje na to, aby se každý sloupec zastavil náhodně. Tato část je umístěna na konci funkce smyčky a nemůže být přesunuta. Naším zaměřením zde je pouze automatický režim.

V této části je automatický režim povolen když je makro Automation definováno jako 1. V automatickém režimu uživatel nemusí stisknout tlačítko pro spuštění nebo zastavení každé vřetena. Místo toho kód automaticky řídí proces spuštění a zastavení každého vřetena.

Když je povolen automatický režim:

  • Systém automaticky spouští vřetena a používá čítač Count_Stop k sledování uplynulého času.
  • Pokaždé, když čítač dosáhne předem vygenerovaného náhodného času zastavení (Count_Num), systém spustí zastavení jednoho vřetena.
  • Jakmile všechny vřetena zastaví, systém resetuje svůj stav a připravuje se na další kolo provozu.
Tato implementace zajišťuje plynulou hru bez použití rukou automatizací spouštění a zastavování vřeten, čímž zlepšuje výkon a uživatelský zážitek výherního automatu.
// 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
  }
}


        
✔ Zkopírováno!

 

Kompilace a spuštění

 1. Po dokončení instalace závislostí otevřete stažený zip archiv.

2. Připojte M5StickC Plus 2 k počítači pomocí USB-C kabelu, poté přejděte na Nástroje -> Port a vyberte příslušný port.

3. Klikněte na Komplikovat a jakmile je kompilace dokončena, klikněte na Nahrát.

Zanechte komentář

Vaše e-mailová adresa nebude zveřejněna. Povinná pole jsou označena *

Přihlaste se k odběru našeho newsletteru

Získejte nejnovější informace o našich produktech a speciálních nabídkách.