Spisu treści:

Gra zręcznościowa Cyclone LED: 4 kroki
Gra zręcznościowa Cyclone LED: 4 kroki

Wideo: Gra zręcznościowa Cyclone LED: 4 kroki

Wideo: Gra zręcznościowa Cyclone LED: 4 kroki
Wideo: Zrób to sam gra DIY KIT 4 gry 2024, Wrzesień
Anonim
Image
Image
Zainstaluj w urządzeniu
Zainstaluj w urządzeniu

Intencją tego projektu było stworzenie prostej gry przy użyciu Arduino, która byłaby interaktywna i zabawna dla dzieci. Pamiętam, że gra zręcznościowa Cyclone była jedną z moich ulubionych gier zręcznościowych, kiedy byłem młodszy, więc postanowiłem ją powtórzyć. Jest to bardzo prosty projekt, który składa się z Arduino, ciągu indywidualnie adresowalnych diod LED i przycisku.

Celem gry jest zatrzymanie cyklicznego światła, gdy osiągnie wskazaną (czerwoną) diodę LED. Jeśli się powiedzie, poziom trudności wzrośnie. Jeśli się nie powiedzie, cykl świetlny zostanie wznowiony na obecnym poziomie trudności.

Ta instrukcja była ogromnym źródłem dla rdzenia mojego kodowania.

Krok 1: Zbierz zapasy

  • Główne składniki:

    • Arduino (użyłem UNO)
    • Ciąg indywidualnie adresowalnych diod LED (użyłem linku)
    • Przycisk (użyłem linku)
    • Płytka drukowana (PCB) lub płytka stykowa
    • Zasilacz (użyłem dwóch oddzielnych zasilaczy, jeden może ci ujść na sucho, jeśli jesteś kreatywny)

      • 5V 3A dla diod LED
      • 9V 1A dla Arduino
  • Struktura:

    • Obudowa elektroniki (zmodyfikowałem drewnianą oprawę lampy z Goodwill)
    • Obudowa LED (zmodyfikowałem twój standardowy zegar ścienny i wywierciłem otwory, używając identyfikatorów minut jako oznaczeń otworów. Użyj drewnianego zegara, jeśli to możliwe, aby ułatwić wiercenie.)
    • Obudowa przycisku (użyłem kolanka PCV)
  • Narzędzia / Inne materiały:

    • Zapasowe okablowanie dla twojego obwodu
    • Rezystory 10K (rezystor pull-down dla przełącznika) i 470 omów (dla przewodu danych na diodach LED)
    • Wiertło do tworzenia otworów do umieszczenia diod LED i wykonywania niezbędnych otworów w urządzeniu, aby przepuścić przez nie przewody
    • Lutownica do lutowania obwodu do płytki drukowanej
    • Pistolet do klejenia na gorąco do mocowania diod LED do oprawy
    • Rzep lub jakieś środki do zabezpieczenia ramy razem
    • Uszczelki opcjonalne do otworów wywierconych w celu przeprowadzenia przewodów

Krok 2: Prześlij kod

Upewnij się, że pobierasz i dodajesz bibliotekę „FastLED”

Rdzeń kodu (pętla pusta) składa się z dwóch stanów: wysoki przycisk (Zakończ grę) i niski przycisk (Granie). Gdy użytkownik naciśnie przycisk, adres diody, na której światło zostało zatrzymane, jest porównywany z adresem środkowej diody LED. Jeśli nie są takie same, wszystkie kontrolki migają na czerwono dwa razy i aktualny poziom jest ponownie uruchamiany. Jeśli są takie same, Cylon (skrypt biblioteki FastLED) uruchamia się dwukrotnie, poziom trudności wzrasta, a gra zostaje wznowiona. Gdy gracz pokona ostatni poziom, Cylon biegnie ósmy raz, a gra rozpoczyna się od nowa na poziomie 1.

//Gra w cyklon

#include "FastLED.h" //do 50 #define NUM_LEDS 40 #define CENTER_LED 21 #define DATA_PIN 7 #define LED_TYPE WS2811 #define COLOR_ORDER RGB //zakres 0-64 #define BRIGHTNESS 50 //Define poziomów trudności #define EASY 1 #define MEDIUM 2 #define HARD 3 #define ON_SPEED 4 #define SONIC_SPEED 5 #define ROCKET_SPEED 6 #define LIGHT_SPEED 7 #define MISSION_IMPOSSIBLE 8 //Początkowa trudność int trudność = 1; // Zdefiniuj tablicę diod LED Diody CRGB[NUM_LEDS]; // Czy gracz wygrał tę rundę? Ten tag jest używany do parametrów trudności. bool wonThisRound = false; // Lokalizacja początkowa światła rowerowego int LEDaddress = 0; // Czy gra działa? bool Gra = prawda; // Czy to pierwsza wygrana? bool CycleEnd = prawda; // Szczegóły przycisku const int buttonPin = 9; int Stan przycisku = 0; // Zainicjuj bibliotekę led i funkcje arduino void setup() { FastLED.addLeds(leds, NUM_LEDS); FastLED.setJasność(JASNOŚĆ); pinMode(buttonPin, INPUT); Serial.początek(9600); } // Mięso i ziemniaki //Dwa tryby - Gra i Koniec gry void loop() { //KONIEC GRY buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { Playing = false; //Użytkownik nacisnął przycisk i dioda LED zatrzymała się na zwycięskim adresie. for (int i = 0; i < NUM_LEDS; i++) { diody = CRGB::Black; } diody LED[CENTER_LED] = CRGB::Czerwony; diody [Adres LED] = CRGB::Zielony; FastLED.show(); if (CycleEnded = true) { int diff = abs(CENTER_LED - LEDaddress); //Znajdź odległość między zapaloną diodą a środkową diodą if (diff == 0) { wonThisRound = true; //Gracz pomyślnie pokonał poziom if (trudność != MISSION_IMPOSSIBLE) { for (int i = 0; i < 2; i++) { cylon(); } } if (trudność == MISSION_IMPOSSIBLE) { for (int i = 0; i < 8; i++) { cylon(); } trudność = 0; } wzrost trudności(); wonThisRound = false; } inny { opóźnienie(1000); for (int i = 0; i < 2; i++) { flash(); } } CycleEnded = false; } adres LED = 0; opóźnienie(250); buttonState = digitalRead(buttonPin); if (buttonState == LOW) { Playing = true; } } //PLAYING if(Playing) { for (int i = 0; i < NUM_LEDS; i++) { diody = CRGB::Black; //Wyłącza wszystkie diody } diody LED[CENTER_LED] = CRGB::Czerwony; //Ustawia kolor środkowej diody led na zielony diody [LEDaddress] = CRGB::Green; //Ustawia czerwony kolor diody LED FastLED.show(); //Inicjuje diodę LEDaddress ++; //Ustawia cykl świecenia na jedną diodę na raz if (LEDaddress == NUM_LEDS) { LEDaddress = 0; } delay(getTime(trudność)); buttonState = digitalRead(buttonPin); if (buttonState == HIGH) { Playing = false; Cykl zakończony = prawda; } } } //Parametry poziomu int getTime(int diff) // Zwraca opóźnienie czasowe dla ruchu led na podstawie trudności { int timeValue = 0; switch (diff) { case EASY: timeValue = 100; przerwa; przypadek ŚREDNI: timeValue = 80; przerwa; wielkość liter HARD: timeValue = 60; przerwa; przypadek ON_SPEED: timeValue = 40; przerwa; przypadek SONIC_SPEED: timeValue = 30; przerwa; przypadek ROCKET_SPEED: timeValue = 20; przerwa; przypadek LIGHT_SPEED: timeValue = 13; przerwa; przypadek MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue;// Zwróć wartość opóźnienia } //Parametry wzrostu trudności wygranej void IncreaseDifficulty() { if (trudność != MISSION_IMPOSSIBLE && wonThisRound) { trudność++; } } //Zgubiony pokaz LED void flash() { fill_solid(leds, NUM_LEDS, CRGB::Red); FastLED.show(); opóźnienie (500); fill_solid(ledy, NUM_LEDS, CRGB::Czarny); FastLED.show(); opóźnienie (500); } //Won LED Show void fadeall() { for(int i = 0; i < NUM_LEDS; i++) { leds.nscale8(250); } } void cylon() { statyczny uint8_t barwa = 0; Serial.print("x"); // Najpierw przesuń diodę w jednym kierunku for(int i = 0; i = 0; i--) { // Ustaw i-tą diodę na czerwone diody = CHSV(hue++, 255, 255); // Pokaż diody FastLED.show(); // teraz, gdy pokazaliśmy diody, zresetuj i-tą diodę na czarną // diody = CRGB::Black; fadeall(); // Poczekaj chwilę, zanim wykonamy pętlę i zrobimy to ponownie delay(10); } }

Krok 3: Zainstaluj w urządzeniu

Zainstaluj w urządzeniu
Zainstaluj w urządzeniu
Zainstaluj w urządzeniu
Zainstaluj w urządzeniu

Nie będę wchodził w szczegóły w tej sekcji. Jest tysiąc różnych sposobów na wykonanie tej części i myślę, że powinieneś być kreatywny, aby wyglądać tak, jak lubisz. Biorąc to pod uwagę, zegar był całkiem wygodny w użyciu do przechowywania diod LED, ponieważ miał minuty wskaźniki, które mogłem wykorzystać jako oznaczenia wierteł. Ponadto szklana osłona pozwala mi również użyć tego jako stolika.

Rzep był również bardzo przydatny do mocowania oprawy LED do oprawy obudowy elektroniki. Użyłem również rzepów na Arduino. Dzięki temu bardzo wygodnie było wyciągnąć Arduino, jeśli kiedykolwiek będę chciał zmodyfikować kod.

Zalecana: