Mundarija:

LED Arja o'yini siklon: 4 qadam
LED Arja o'yini siklon: 4 qadam

Video: LED Arja o'yini siklon: 4 qadam

Video: LED Arja o'yini siklon: 4 qadam
Video: 🤩 ENDI LEDNIKNI TUSHURISH JUDA OSON || SINALGAN USUL 100% 2024, Sentyabr
Anonim
Image
Image
Armatura ichiga o'rnatish
Armatura ichiga o'rnatish

Ushbu loyihaning maqsadi Arduino yordamida bolalar uchun interaktiv va ko'ngilochar o'yinni yaratish edi. Men eslayman, siklon arja o'yini yoshligimda eng sevimli arja o'yinlaridan biri edi, shuning uchun men uni takrorlashga qaror qildim. Bu juda oddiy loyiha bo'lib, u Arduino, alohida yoritiladigan LEDlar va tugmachalardan iborat.

O'yinning maqsadi - velosiped nuri ko'rsatilgan (qizil) LEDga etib kelganda to'xtatish. Muvaffaqiyatli bo'lsa, qiyinchilik darajasi oshadi. Agar muvaffaqiyatsiz bo'lsa, yorug'lik aylanishi hozirgi qiyinchilik darajasida qayta boshlanadi.

Bu ko'rsatma mening kodlashim uchun katta manba bo'ldi.

1 -qadam: materiallarni yig'ish

  • Asosiy komponentlar:

    • Arduino (men BMTdan foydalandim)
    • Alohida adreslanadigan LEDlar chizig'i (men havolani ishlatganman)
    • Tugmani bosish (havolani ishlatganman)
    • Bosilgan elektron karta (PCB) yoki non paneli
    • Quvvat manbai (men ikkita alohida quvvat manbasidan foydalandim, agar siz ijodiy bo'lsangiz, ulardan birini olib qo'yishingiz mumkin)

      • LEDlar uchun 5V 3A
      • Arduino uchun 9V 1A
  • Asosiy:

    • Elektron korpus (men "Yaxshi niyat" dan yog'och chiroq armaturasini o'zgartirdim)
    • LED korpus (men sizning standart devor soatingizni o'zgartirdim va teshik belgilar sifatida daqiqali identifikatorlar yordamida burg'ulash qildim. Agar iloji bo'lsa, burg'ulashni osonlashtirish uchun yog'ochdan foydalaning.)
    • Tugma korpusi (men tirsakli PVX trubkadan foydalanardim)
  • Asboblar / Boshqa materiallar:

    • Sizning davringiz uchun zaxira simlar
    • 10K (kalit uchun ochiladigan qarshilik) va 470 ohmli (LEDlardagi ma'lumot simlari uchun) rezistorlar
    • LEDlarni joylashtirish uchun teshiklarni yaratish va armaturada simlarni o'tkazish uchun kerakli teshiklarni yaratish uchun burg'ulash
    • Tarmoqni PCB ga lehimlash uchun lehimli temir
    • LEDlarni qurilmangizga mahkamlash uchun issiq yopishtiruvchi qurol
    • Velcro yoki ramkani birgalikda mustahkamlashning ba'zi vositalari
    • Simlar o'tishi uchun burg'ulash qilingan teshiklar uchun ixtiyoriy qistirmalar

2 -qadam: Kodni yuklash

"FastLED" kutubxonasini yuklaganingizga va qo'shganingizga ishonch hosil qiling

Kod yadrosi (void loop) ikkita holatdan iborat: tugmani baland (O'yinni tugatish) va past tugmasini bosish (O'ynash). Foydalanuvchi tugmachani bosgandan so'ng, chiroq o'chirilgan LED manzili markaziy LED manziliga taqqoslanadi. Agar ular bir xil bo'lmasa, barcha chiroqlar ikki marta qizil yonadi va joriy daraja qayta boshlanadi. Agar ular bir xil bo'lsa, cylon (FastLED kutubxonasi skripti) ikki marta ishlaydi, qiyinchilik darajasi oshadi va o'ynash davom etadi. O'yinchi oxirgi darajani mag'lub qilgandan so'ng, silindr sakkizinchi marta ishlaydi va o'yin 1 -darajadan boshlanadi.

// Tsiklon o'yini

#"FastLED.h" ni qo'shing // 50 tagacha #NUM_LEDSni belgilang 40 #DARA_PIN 7ni aniqlang #LED_TYPE WS2811ni belgilang #Rang_O'ZOBINI RGB belgilang // 0-64 oralig'ida #BRIGHTNESSni belgilang 50 // Qiyinchilik darajalarini ta'riflang # EASY 1 #define MEDIUM 2 #define HARD 3 #de_inefine ON_SPEED 4 #define SONIC_SPEED 5 #deffine ROCKET_SPEED 6 #deffine LIGHT_SPEED 7 #define MISSION_IMPOSSIBLE 8 // boshlang'ich qiyinchilik int qiyinchilik = 1; // LEDlar CRGB leds [NUM_LEDS] qatorini aniqlang; // O'yinchi bu turda g'alaba qozondimi? Bu teg qiyinchilik parametrlari uchun ishlatiladi. bool wonThisRound = noto'g'ri; // velosiped chiroqining boshlanish joyi int LEDaddress = 0; // O'yin ishlayaptimi? bool Playing = rost; // Bu birinchi yutuqmi? bool CycleEnded = rost; // tugma tafsilotlari const int buttonPin = 9; int tugmasiState = 0; // Etakchi kutubxona va arduino funktsiyalarini bekor qilishni sozlash () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (Yorqinligi); pinMod (tugmaPin, Kirish); Serial.begin (9600); } // Go'sht va kartoshka // Ikki rejim - O'yinni bekor qilish va bekor qilish () {// GAME END tugmasiState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; // Foydalanuvchi tugmani bosdi, LED esa yutuqli manzilda to'xtadi. for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Qora; } leds [CENTER_LED] = CRGB:: Qizil; LEDlar [LEDaddress] = CRGB:: Yashil; FastLED.show (); if (CycleEnded = true) {int diff = abs (CENTER_LED - LEDadress); // Yoritgich va markaziy chiziq orasidagi masofani topadi, agar (diff == 0) {wonThisRound = true; // O'yinchi, agar (qiyinchilik! = MISSION_IMPOSSIBLE) {uchun (int i = 0; i <2; i ++) {cilon (); }} if (qiyinchilik == MISSION_IMPOSSIBLE) {uchun (int i = 0; i <8; i ++) {cilon (); } qiyinchilik = 0; } oshirishDifficulty (); wonThisRound = noto'g'ri; } boshqa {kechiktirish (1000); uchun (int i = 0; i <2; i ++) {flesh (); }} CycleEnded = noto'g'ri; } LED manzili = 0; kechikish (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) {O'ynash = to'g'ri; }} // PLAYING if (Playing) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // Barcha ledlarni o'chiradi} ledlar [CENTER_LED] = CRGB:: Qizil; // Markaziy rangni yashil LEDlarga o'rnatadi [LEDaddress] = CRGB:: Green; // Silindrli LED rangini qizil FastLED.show () ga o'rnatadi; // LEDaddress ++ yorug'lik davrini ishga tushiradi; // Yorug'lik davrini bir vaqtning o'zida bitta LEDga o'rnatadi, agar (LEDadress == NUM_LEDS) {LEDadress = 0; } kechikish (getTime (qiyinchilik)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; CycleEnded = rost; }}} // Darajaning parametrlari int getTime (int diff) // {int timeValue = 0; switch (diff) {case EASY: timeValue = 100; tanaffus; ish MEDIUM: timeValue = 80; tanaffus; HARD holati: timeValue = 60; tanaffus; holat ON_SPEED: timeValue = 40; tanaffus; SONIC_SPEED holati: timeValue = 30; tanaffus; ROCKET_SPEED holati: timeValue = 20; tanaffus; LIGHT_SPEED holati: timeValue = 13; tanaffus; MISSION_IMPOSSIBLE holati: timeValue = 7; } return timeValue; // Kechiktirish miqdorini qaytarish} // G'alaba qozongan qiyinchiliklar parametrlarni oshirishni bekor qiladiDifficulty () {if (qiyinchilik! = MISSION_IMPOSSIBLE && wonThisRound) {qiyinchilik ++; }} // Lost LED Show void flash () {fill_solid (leds, NUM_LEDS, CRGB:: Red); FastLED.show (); kechikish (500); fill_solid (LEDlar, NUM_LEDS, CRGB:: Qora); FastLED.show (); kechikish (500); } // LED Show void foidall () {for (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} bo'sh silindr () {statik uint8_t tue = 0; Serial.print ("x"); // Birinchidan, svetodiodni bir tomonga siljiting (int i = 0; i = 0; i--) {// I-chi svetodiodni qizil chiroqlarga o'rnating = CHSV (tus ++, 255, 255); // LEDlarni ko'rsatish FastLED.show (); // endi biz ledlarni ko'rsatganimizdan so'ng, i -chini qora rangga qaytaramiz // leds = CRGB:: Black; fadeall (); // Bir oz kutib turing va biz yana aylanamiz (10); }}

3 -qadam: Armatura ichiga o'rnatish

Armatura ichiga o'rnatish
Armatura ichiga o'rnatish
Armatura ichiga o'rnatish
Armatura ichiga o'rnatish

Men bu bo'limda batafsil ma'lumot bermoqchi emasman. Bu qismda minglab usullar bor va menimcha, siz o'zingizga yoqqan ko'rinishga ega bo'lish uchun ijodiy harakat qilishingiz kerak. Aytish kerakki, soatni LEDlarni joylashtirish uchun ishlatish juda qulay edi, chunki menda burg'ulash belgisi sifatida ishlata oladigan kichik ko'rsatkichlar bor edi. Bundan tashqari, shisha qopqog'i menga stol sifatida ishlatishga imkon beradi.

Velcro LED yoritgichini elektron korpusga mahkamlash uchun ham juda foydali edi. Men Arduino -da velcro ishlatardim. Agar men hech qachon kodni o'zgartirmoqchi bo'lsam, Arduino -ni chiqarib olish juda qulay bo'ldi.

Tavsiya: