Gratulacje z okazji dotarcia do ostatniego kroku Twojego projektu automatu do gry! W tym kroku przeprowadzimy Cię przez implementację super fajnej funkcji: zmiany z ręcznego zatrzymania na automatyczne zatrzymanie. Ale to nie wszystko! Pokażemy Ci również, jak używać definicji makr, aby stworzyć przełącznik trybu jednym przyciskiem. Dzięki tej funkcji możesz bez wysiłku przełączać się między trybami automatycznym i ręcznym po prostu modyfikując jedną wartość.
To jak magia, dodająca więcej elastyczności i zabawy do twojego projektu! Więc, czy jesteś gotowy, aby przenieść swoją maszynę do gry na wyższy poziom? Zanurzmy się razem i sprawmy, by to się stało!
Instalacja i Obsługa
Warunek wstępny
Zależność oprogramowania: Arduino IDE, VScode lub tekst itp.
Wymagania sprzętowe: kabel USB-C, M5StickCPlus2 itd.
Zależności: biblioteka M5StickCPlus2, biblioteka Arduino itp.
Instalacja zależności
1. Ta zmiana obejmuje dwie główne części. Najpierw przejdźmy przez pierwszą część, opierając się na modyfikacjach wprowadzonych w poprzedniej sekcji. Przeanalizujemy każdą zmianę krok po kroku, zaczynając od góry.
-
Definicja automatyzacji: Zdefiniowaliśmy przełącznik automatyzacji, który pozwala przełączać się między trybami automatycznym i nieautomatycznym.
-
Ustawienia interwału:
-
time_MAX i time_MIN: Te zmienne reprezentują zakres przedziału czasu zatrzymania.
-
initTime_MAX i initTime_MIN: Oznaczają one początkowy przedział czasu zatrzymania na wczesnym etapie gry.
-
-
Limity liczby zatrzymań:
-
startCount_MAX: To definiuje maksymalną liczbę przystanków od początku gry.
-
initTime_MAX i initTime_MIN: (Powtórzenie) Reprezentują one początkowe ustawienia interwału dla wyboru czasu zatrzymania.
-
startCount_MAX: Ta zmienna kontroluje również ile zatrzymań może wystąpić od początku.
-
Dzięki tym zmiennym masz większą kontrolę nad czasem i automatyzacją, co pozwala na płynniejsze przejścia między trybami ręcznym a automatycznym. W następnej części omówimy, jak zaimplementować te interwały i przełączniki w kodzie, wprowadzając elastyczność do Twojego projektu.
2. Następnie przyjrzyjmy się setup()
funkcji. Dodaliśmy srand(time(0))
, aby zainicjalizować funkcję losową aktualnym czasem, zapewniając unikalne wartości losowe przy każdym uruchomieniu.
Teraz przyjrzyjmy się loop()
funkcji. Najpierw używamy Automatyzacji jako przełącznika, aby określić, czy system działa w trybie automatycznym czy ręcznym. Jeśli wybrano tryb ręczny, nie są wymagane żadne zmiany. Naszym celem jest jednak tryb automatyczny.
W trybie automatycznym głównym zadaniem jest zdecydowanie, czy wrzeciona powinny się zatrzymać. Wrzeciona zatrzymują się stopniowo na podstawie losowo wygenerowanego czasu zatrzymania (Count_Num
), więc użytkownik nie musi wielokrotnie naciskać przycisku.
Gdy przycisk A (BtnA) zostanie naciśnięty lub licznik osiągnie warunek zatrzymania, wrzeciona zatrzymają się automatycznie jedno po drugim.
-
Stan: SLOTS_INIT W tym stanie wszystkie wrzeciona zaczynają się obracać jednocześnie, a losowa liczba decyduje, kiedy się zatrzymają.
-
Wrzeciona zatrzymują się automatycznie w dwóch warunkach:
-
Przycisk A jest naciśnięty.
-
Losowy licznik osiąga wyznaczony czas zatrzymania.
-
Ta logika zapewnia płynną pracę w trybie automatycznym, powodując zatrzymanie wrzecion bez ręcznej interwencji, co poprawia doświadczenie gry na automacie do gier.
// Initialize M5StickC Plus2
#define Automatyzacja 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));//dodano na górze oryginalnego kilku } void loop() { static int Slot_Start = 0; // Kontroluj liczbę startów wrzeciona static int Slot_Stop = 0; // Czy zatrzymać wrzeciono static int Count_Stop = 0; //Zliczaj impulsy zatrzymania wrzeciona static int Count_Num; // Losowo generowane czasy zatrzymania w trybie automatycznym M5.update(); //Aktualizuj status przycisku if (Automation) { // Jeśli tryb automatyczny jest włączony jeśli (M5.BtnA.zostałNaciśnięty() || Slot_Stop == 1) { // naciśnięcie przycisku lub automatyczne zatrzymanie trybu if (state == SLOTS_INIT) { // Jeśli w stanie inicjalizacji dla (int i = 0; i < SLOT_COUNT; i++) { slots[i].start(); // Aktywuj każdą wrzeciono } state++; Slot_Start = 1; // Rejestruj status uruchomienia Count_Num = rand() % (InitTime_MAX - InitTime_MIN - 1) + InitTime_MIN;// Losowo wygenerowane czasy zatrzymania } else if (state < SLOTS_STOP) { // Jeśli wrzeciono pracuje Slot_Start++; slots[state - 1].stop(); //Zatrzymaj bieżącą oś state++; } } Slot_Stop = 0; // Zresetuj znak stopu } else { // tryb ręczny if (M5.BtnA.wasPressed()) { //Naciśnij przycisk, aby rozpocząć lub zatrzymać wrzeciono if (state == SLOTS_INIT) { dla (int i = 0; i < SLOT_COUNT; i++) { slots[i].start(); // Aktywuj każdą wrzeciono } state++; } else if (state < SLOTS_STOP) { slots[state - 1].stop(); // zatrzymaj wrzeciono state++; } } } }
3. Następnie przyjrzyjmy się drugiej części, która koncentruje się na losowym zatrzymywaniu każdej kolumny. Ta sekcja jest umieszczona na końcu funkcji pętli i nie może być przeniesiona. Naszym celem jest tutaj tylko tryb automatyczny.
W tej części tryb automatyczny jest włączany gdy makro Automation
jest zdefiniowane jako 1. W trybie automatycznym użytkownik nie musi naciskać przycisku, aby rozpocząć lub zatrzymać każdy wrzeciono. Zamiast tego kod automatycznie zarządza procesem startu i zatrzymania dla każdego wrzeciona.
Gdy tryb automatyczny jest włączony:
-
System automatycznie uruchamia wrzeciona i używa licznika
Count_Stop
do śledzenia upływającego czasu. -
Za każdym razem, gdy licznik osiąga wygenerowany wcześniej losowy czas zatrzymania (
Count_Num
), system wywołuje zatrzymanie jednej wrzeciona. -
Gdy wszystkie wrzeciona zostaną zatrzymane, system resetuje swój stan i przygotowuje się do kolejnej rundy działania.
// 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 } }
Kompiluj i Uruchom
1. Po zakończeniu instalacji zależności, otwórz pobrany archiwum zip.
2. Podłącz M5StickC Plus 2 do komputera za pomocą kabel USB-C, następnie przejdź do Narzędzia -> Port i wybierz odpowiedni port.
3. Kliknij Kompiluj, a po zakończeniu kompilacji kliknij Prześlij.