Мазмуну:

Циклон LED аркада оюну: 4 кадам
Циклон LED аркада оюну: 4 кадам

Video: Циклон LED аркада оюну: 4 кадам

Video: Циклон LED аркада оюну: 4 кадам
Video: KING OF CRABS BUTTERFLY EFFECT 2024, Ноябрь
Anonim
Image
Image
Арматура орнотуу
Арматура орнотуу

Бул долбоордун максаты Arduino аркылуу интерактивдүү жана балдар үчүн кызыктуу боло турган жөнөкөй оюнду түзүү болчу. Жаш кезимде Циклон аркада оюну менин эң жакшы көргөн аркада оюндарынын бири экенин эстеп калдым, ошондуктан мен аны кайталоону чечтим. Бул абдан жөнөкөй проект, ал Arduino, өзүнчө адрестүү LED диапазону жана баскычтан турат.

Оюндун максаты - көрсөтүлгөн (кызыл) LEDге жеткенде велосипед жарыгын токтотуу. Эгер ийгиликтүү болсо, кыйынчылыктын деңгээли жогорулайт. Эгер ийгиликсиз болсо, жарык айлампасы учурдагы кыйынчылык деңгээлинде кайра башталат.

Бул көрсөтмө менин коддоомдун өзөгү үчүн чоң булак болду.

1 -кадам: Берилиштерди чогултуу

  • Негизги компоненттер:

    • Ардуино (Мен БУУну колдондум)
    • Жеке даректүү LED диапазону (мен шилтемени колдондум)
    • Баскыч басуу (шилтемени колдондум)
    • Басылган райондук плата (ПХБ) же нан
    • Электр энергиясы менен камсыздоо (мен эки башка электр энергиясын колдондум, эгер сиз чыгармачыл болсоңуз, бирөөсүнөн кутулуп кетишиңиз мүмкүн)

      • LEDлар үчүн 5V 3A
      • 9V 1A Arduino үчүн
  • Негиз:

    • Электроника корпусу (Мен Гудвиллден жыгач чырактын жабдууларын өзгөрттүм)
    • LED корпусу (Мен сиздин стандарттык дубал саатын өзгөртүп, тешик белгилөө катары мүнөттүк идентификаторлорду колдонуп тешип койдум. Мүмкүн болсо, бургулоону жеңилдетүү үчүн жыгач саатын колдонуңуз.)
    • Түймө корпусу (мен чыканак ПВХ түтүгүн колдондум)
  • Куралдар / Башка материалдар:

    • Сиздин схемаңыз үчүн запастык зымдар
    • 10K (которуштуруу үчүн ылдый каршылык) жана 470 ом (светодиоддогу маалымат зымы үчүн) каршылыгы
    • Светодиоддорду жайгаштыруу үчүн тешиктерди түзүү жана зымдарды өткөрүү үчүн арматураңызга керектүү тешиктерди жасоо үчүн бургулаңыз
    • ПХБга сиздин схемаңызды ширетүүчү темир
    • Светодиоддорду жабдууңузга бекитүү үчүн ысык желим тапанча
    • Velcro же бирге рамканы камсыздоонун кээ бир каражаттары
    • Зымдардын өтүшү үчүн тешилген тешиктер үчүн милдеттүү эмес прокаттар

2 -кадам: Кодду жүктөө

"FastLED" китепканасын жүктөп жана кошкондугуңузду текшериңиз

Коддун өзөгү (боштук цикл) эки абалдан турат: баскыч баскычы жогору (Оюнду бүтүрүү) жана баскыч баскычы төмөн (ойнотуу). Колдонуучу баскычты баскандан кийин, жарык токтотулган LED дареги борбордук LEDдин дарегине салыштырылат. Эгерде алар окшош болбосо, анда бардык жарыктар эки жолу кызыл күйүп, учурдагы деңгээл кайра башталат. Эгерде алар бирдей болсо, цилон (FastLED китепканасынын скрипти) эки жолу иштейт, кыйынчылыктын деңгээли жогорулайт жана ойнотуу кайра башталат. Оюнчу акыркы деңгээлди ургандан кийин, цилон сегизинчи жолу чуркайт жана оюн 1 -деңгээлде кайра башталат.

// Циклон оюну

#"FastLED.h" кошуу // 50гө чейин #NUM_LEDSти аныктоо 40 #аныктоо ЦЕНТРИ_21 21 #аныктоо DATA_PIN 7 #аныктоо LED_TYPE WS2811 #COLOR_ORDER RGB диапазону 0-64 #аныктоо BRIGHTNESS 50 // Кыйынчылыктын деңгээлин аныктоо # ОҢОЙ 1 #аныктоо Орто 2 #аныктоо КАТУУ 3 #аныктоо ON_SPEED 4 #аныктоо SONIC_Speed 5 #аныктоо ROCKET_SPEED 6 #аныктоо LIGHT_SPEED 7 #аныктоо МИССИЯ_МҮМКҮН эмес 8 // Баштапкы кыйынчылык int кыйынчылык = 1; // LEDлар CRGB леддеринин массивин аныктоо [NUM_LEDS]; // Бул турда оюнчу жеңдиби? Бул тег татаалдык параметрлери үчүн колдонулат. bool wonThisRound = false; // велосипед жарыгынын башталышы int LEDaddress = 0; // Оюн иштеп жатабы? bool Playing = true; // Бул биринчи жеңишпи? bool CycleEnded = true; // Button details const int buttonPin = 9; int buttonState = 0; // Жетектөөчү китепкананы жана arduino функцияларын жокко чыгарууну баштоо () {FastLED.addLeds (leds, NUM_LEDS); FastLED.setBrightness (BRIGHTNESS); pinMode (buttonPin, INPUT); Serial.begin (9600); } // Эт жана картошка // Эки режим - Ойнотуу жана токтотуу оюну void loop () {// GAME END түймөсүState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; // Колдонуучу кнопканы басып, LED утуучу дарекке токтоду. for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; } leds [CENTER_LED] = CRGB:: Red; leds [LEDaddress] = CRGB:: Green; FastLED.show (); if (CycleEnded = true) {int diff = abs (CENTER_LED - LEDaddress); // Жарыктандырылган лед менен борбордун ортосундагы аралыкты табат, эгерде (diff == 0) {wonThisRound = true; // Оюнчу деңгээлди ийгиликтүү жеңди, эгерде (кыйынчылык! = MISSION_IMPOSSIBLE) {for (int i = 0; i <2; i ++) {cylon (); }} if (кыйынчылык == MISSION_IMPOSSIBLE) {үчүн (int i = 0; i <8; i ++) {cylon (); } кыйынчылык = 0; } boostDifficulty (); wonThisRound = false; } else {delay (1000); for (int i = 0; i <2; i ++) {flash (); }} CycleEnded = false; } LEDaddress = 0; кечигүү (250); buttonState = digitalRead (buttonPin); if (buttonState == LOW) {Playing = true; }} // PLAYING if (Playing) {for (int i = 0; i <NUM_LEDS; i ++) {leds = CRGB:: Black; // Бардык леддерди өчүрөт} leds [CENTER_LED] = CRGB:: Red; // Борбордун түсүн жашыл леддерге коёт [LEDaddress] = CRGB:: Green; // Цилиндрдин түсүн кызыл FastLED.show () кылып коёт; // LEDaddress ++ жарык айлампасын баштайт; // Жарык айлампасын бир убакта бир LEDга коёт, эгерде (LEDaddress == NUM_LEDS) {LEDaddress = 0; } кечигүү (getTime (кыйынчылык)); buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {Playing = false; CycleEnded = true; }}} // Деңгээлдин параметрлери int getTime (int diff) // Кыйынчылыкта {int timeValue = 0; switch (diff) {case EASY: timeValue = 100; тыныгуу; case MEDIUM: timeValue = 80; тыныгуу; case HARD: timeValue = 60; тыныгуу; Case ON_SPEED: timeValue = 40; тыныгуу; case SONIC_SPEED: timeValue = 30; тыныгуу; case ROCKET_SPEED: timeValue = 20; тыныгуу; case LIGHT_SPEED: timeValue = 13; тыныгуу; case MISSION_IMPOSSIBLE: timeValue = 7; } return timeValue; // Кечигүү суммасын кайтаруу} // Жеңиш кыйынчылыктары параметрлерди жогорулатуу void жогорулатууDifficulty () {if (кыйынчылык! = MISSION_IMPOSSIBLE && wonThisRound) {кыйынчылык ++; }} // Lost LED Show void flash () {fill_solid (leds, NUM_LEDS, CRGB:: Red); FastLED.show (); кечигүү (500); fill_solid (leds, NUM_LEDS, CRGB:: Black); FastLED.show (); кечигүү (500); } // LED Show void foidall () {for (int i = 0; i <NUM_LEDS; i ++) {leds .nscale8 (250); }} void cylon () {static uint8_t hue = 0; Serial.print ("x"); // Биринчиден, жетектөөнү бир багытта жылдырыңыз (int i = 0; i = 0; i--) {// i'th led'ди кызыл леддерге коюңуз = CHSV (hue ++, 255, 255); // LEDлерди көрсөтүү FastLED.show (); // азыр биз леддерди көрсөттүк, i'th алып баруучуну кара кылып калыбына келтириңиз // leds = CRGB:: Black; fadeall (); // Бир аз күтө туруңуз, биз айланып, кайра кылабыз (10); }}

3 -кадам: Арматурага орнотуңуз

Арматура орнотуу
Арматура орнотуу
Арматура орнотуу
Арматура орнотуу

Мен бул бөлүмдө майда -чүйдөсүнө чейин барбайм. Бул бөлүктү өткөрүүнүн миң түрдүү жолдору бар жана менимче, сизге чыгармачыл болушуңуз керек, бул сизге кандай жагып жаткандай көрүнүшү үчүн. Айтор, саат диоддорду жайгаштыруу үчүн колдонууга абдан ыңгайлуу болчу, анткени мен бургулоо белгилери катары колдоно алган мүнөттүк көрсөткүчтөргө ээ болчумун. Ошондой эле, айнек капкак мага муну стол катары колдонууга мүмкүнчүлүк берет.

Velcro электроника корпусуна LED жабдууну бекитүү үчүн абдан пайдалуу болгон. Мен Arduinoдо велкро да колдондум. Бул, эгерде мен качандыр бир убакта кодду өзгөрткүм келсе, Arduino -ны сууруп чыгууга абдан ыңгайлуу кылды.

Сунушталууда: