جدول المحتويات:

لعبة Cyclone LED Arcade: 4 خطوات
لعبة Cyclone LED Arcade: 4 خطوات

فيديو: لعبة Cyclone LED Arcade: 4 خطوات

فيديو: لعبة Cyclone LED Arcade: 4 خطوات
فيديو: Arduino Cyclone Arcade Game 2024, سبتمبر
Anonim
Image
Image
تثبيت في تركيبات
تثبيت في تركيبات

كان الهدف من هذا المشروع هو إنشاء لعبة بسيطة باستخدام Arduino تكون تفاعلية ومسلية للأطفال. أتذكر أن لعبة Cyclone arcade كانت إحدى ألعاب الآركيد المفضلة عندما كنت أصغر سناً ، لذلك قررت تكرارها. هذا مشروع بسيط للغاية يتكون من Arduino وسلسلة من مصابيح LED القابلة للعقد بشكل فردي وزر ضغط.

الهدف من اللعبة هو إيقاف ضوء ركوب الدراجات عندما يصل إلى مؤشر LED (الأحمر) المشار إليه. إذا نجحت ، سيزداد مستوى الصعوبة. إذا لم تنجح ، ستتم إعادة تشغيل دورة الضوء عند مستوى الصعوبة الحالي.

كانت هذه التعليمات مصدرًا ضخمًا لجوهر الترميز الخاص بي.

الخطوة 1: جمع المستلزمات

  • المكونات الرئيسية:

    • اردوينو (كنت أستخدم UNO)
    • سلسلة من مصابيح LED القابلة للعنونة بشكل فردي (استخدمت رابطًا)
    • زر الضغط (كنت أستخدم الرابط)
    • لوحة الدوائر المطبوعة (PCB) أو اللوح
    • مزود الطاقة (لقد استخدمت مصدرين منفصلين للطاقة ، وقد تفلت من أحدهما إذا كنت مبدعًا)

      • 5V 3A للمصابيح
      • 9V 1A لاردوينو
  • إطار العمل:

    • غلاف الإلكترونيات (قمت بتعديل مصباح خشبي من Goodwill)
    • مبيت LED (لقد قمت بتعديل ساعة الحائط القياسية الخاصة بك وحفرت ثقوبًا باستخدام محددات الدقائق كعلامات ثقب. استخدم ساعة خشبية إذا أمكن لتسهيل الحفر.)
    • غلاف الزر (لقد استخدمت أنبوبًا بكوعًا PVC)
  • أدوات / مواد أخرى:

    • الأسلاك الاحتياطية لدارتك
    • 10 كيلو (المقاوم المنسدل للمفتاح) و 470 أوم (لسلك البيانات على المصابيح) المقاومات
    • حفر لإنشاء ثقوب لإيواء مصابيح LED الخاصة بك وعمل أي ثقوب ضرورية في تركيباتك لتمرير الأسلاك من خلالها
    • لحام الحديد لحام الدائرة الخاصة بك إلى ثنائي الفينيل متعدد الكلور
    • مسدس الغراء الساخن لتثبيت مصابيح LED في تركيباتك
    • الفيلكرو أو بعض وسائل تأمين الإطار معًا
    • الحشيات اختيارية للفتحات المحفورة لتمرير الأسلاك من خلالها

الخطوة الثانية: تحميل الكود

تأكد من تنزيل وإضافة مكتبة "FastLED"

يتكون جوهر الكود (حلقة باطلة) من حالتين: زر ضغط مرتفع (نهاية اللعبة) وزر ضغط منخفض (تشغيل). بمجرد أن يضغط المستخدم على الزر ، تتم مقارنة عنوان LED الذي تم إيقاف الضوء عليه بعنوان مؤشر LED المركزي. إذا لم تكن هي نفسها ، تومض جميع الأضواء باللون الأحمر مرتين ويعاد تشغيل المستوى الحالي. إذا كانت متماثلة ، يتم تشغيل cylon (برنامج مكتبة FastLED) مرتين ، ويزيد مستوى الصعوبة ، ويستأنف اللعب. بمجرد أن يتفوق اللاعب على المستوى الأخير ، يجري cylon ثامن مرات وتستأنف اللعبة عند المستوى 1.

// لعبة الإعصار

# تضمين "FastLED.h" // up to 50 #define NUM_LEDS 40 #define CENTER_LED 21 #define DATA_PIN 7 #define LED_TYPE WS2811 #define COLOR_ORDER RGB // range 0-64 #define BRIGHTNESS 50 // تعريف مستويات الصعوبة # تعريف 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 // بدء الصعوبة في الصعوبة = 1 ؛ // تحديد مجموعة المصابيح CRGB المصابيح [NUM_LEDS] ؛ // هل فاز اللاعب بهذه الجولة؟ هذه العلامة تستخدم لمعلمات الصعوبة. bool wonThisRound = false ؛ // موقع بدء مصباح ركوب الدراجات int LEDaddress = 0 ؛ // هل اللعبة قيد التشغيل؟ منطقية اللعب = صحيح ؛ // هل هذا هو أول فوز؟ منطقي CycleEnded = صحيح ؛ // تفاصيل الزر const int buttonPin = 9 ؛ int buttonState = 0 ؛ // تهيئة مكتبة LED ووظائف arduino الإعداد الباطل () {FastLED.addLeds (المصابيح ، NUM_LEDS) ؛ FastLED.setBrightness (سطوع) ؛ pinMode (buttonPin ، INPUT) ؛ Serial.begin (9600) ؛ } // The meat and potatoes // وضعان - تشغيل وإنهاء حلقة باطلة () {// END GAME buttonState = digitalRead (buttonPin)؛ إذا (buttonState == HIGH) {تشغيل = خطأ ؛ // لقد ضغط المستخدم على الزر ، وتوقف مؤشر LED على العنوان الفائز. لـ (int i = 0 ؛ i <NUM_LEDS ؛ i ++) {المصابيح = CRGB:: Black ؛ } المصابيح [CENTER_LED] = CRGB:: أحمر ؛ المصابيح [عنوان LED] = CRGB:: أخضر ؛ FastLED.show () ، إذا (CycleEnded = صحيح) {int diff = abs (CENTER_LED - LEDaddress) ؛ // يكتشف المسافة بين المصباح المضاء والمركز المصباح إذا (فرق == 0) {فازتيس راوند = صحيح ؛ // اللاعب فاز بنجاح على المستوى إذا (الصعوبة! = MISSION_IMPOSSIBLE) {for (int i = 0؛ i <2؛ i ++) {cylon ()؛ }} إذا (الصعوبة == MISSION_IMPOSSIBLE) {لـ (int i = 0؛ i <8؛ i ++) {cylon ()؛ } صعوبة = 0 ؛ } زيادة الصعوبة ()؛ WonThisRound = خطأ ؛ } else {delay (1000)؛ لـ (int i = 0 ؛ i <2 ؛ i ++) {flash () ؛ }} CycleEnded = خطأ ؛ } عنوان LED = 0 ؛ تأخير (250) ؛ buttonState = digitalRead (buttonPin) ؛ إذا (buttonState == LOW) {تشغيل = صحيح ؛ }} // PLAYING if (playing) {for (int i = 0؛ i <NUM_LEDS؛ i ++) {leds = CRGB:: Black؛ // يطفئ كل المصابيح} المصابيح [CENTER_LED] = CRGB:: أحمر ؛ // يعين لون الصمام المركزي إلى المصابيح الخضراء [عنوان LED] = CRGB:: أخضر ؛ // يعين لون led cyling إلى أحمر FastLED.show () ؛ // تهيئة دورة الضوء LEDaddress ++ ؛ // يعين دورة الضوء على مصباح واحد في كل مرة إذا (LEDaddress == NUM_LEDS) {LEDaddress = 0 ؛ } تأخير (getTime (صعوبة))؛ buttonState = digitalRead (buttonPin) ؛ إذا (buttonState == HIGH) {تشغيل = خطأ ؛ CycleEnded = صحيح ، }}} // معلمات المستوى int getTime (int diff) // إرجاع التأخير الزمني لقاعدة حركة led على مستوى الصعوبة {int timeValue = 0؛ التبديل (فرق) {الحالة EASY: timeValue = 100 ؛ استراحة؛ الحالة المتوسطة: قيمة الوقت = 80 ؛ استراحة؛ الحالة صعبة: timeValue = 60 ؛ استراحة؛ الحالة ON_SPEED: timeValue = 40 ؛ استراحة؛ الحالة SONIC_SPEED: timeValue = 30 ؛ استراحة؛ الحالة ROCKET_SPEED: timeValue = 20 ؛ استراحة؛ الحالة LIGHT_SPEED: timeValue = 13 ؛ استراحة؛ الحالة MISSION_IMPOSSIBLE: timeValue = 7 ؛ } return timeValue؛ // Return the delay amount} // زيادة الصعوبة الفائزة للمعلمات باطل زيادة Difficulty () {if (trouble! = MISSION_IMPOSSIBLE && wonThisRound) {trouble ++؛ }} // Lost LED Show void flash () {fill_solid (leds، NUM_LEDS، CRGB:: Red)؛ FastLED.show () ، تأخير (500) ؛ fill_solid (المصابيح ، NUM_LEDS ، CRGB:: أسود) ؛ FastLED.show () ، تأخير (500) ؛ } // فاز عرض LED باطل fadeall () {لـ (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 أدى إلى المصابيح الحمراء = CHSV (تدرج اللون ++ ، 255 ، 255) ؛ // إظهار المصابيح FastLED.show () ؛ // الآن بعد أن أظهرنا المصابيح ، أعد ضبط المصباح إلى // leds سوداء = CRGB:: Black ؛ fadeall () ؛ // انتظر قليلاً قبل أن نلتف ونفعل ذلك مرة أخرى تأخير (10) ؛ }}

الخطوة 3: التثبيت في Fixture

تثبيت في تركيبات
تثبيت في تركيبات
تثبيت في تركيبات
تثبيت في تركيبات

لن أخوض في التفاصيل في هذا القسم. هناك آلاف الطرق المختلفة للقيام بهذا الجزء وأعتقد أنه يجب أن تكون مبدعًا لجعله يبدو كما يحلو لك. ومع ذلك ، كانت الساعة ملائمة جدًا للاستخدام لإيواء مصابيح LED حيث تحتوي على مؤشرات دقيقة تمكنت من استخدامها كعلامات حفر. أيضًا ، يتيح لي الغطاء الزجاجي أيضًا استخدام هذا كطاولة.

كان الفيلكرو مفيدًا جدًا أيضًا لتأمين تركيبات LED بتركيبات مبيت الإلكترونيات. لقد استخدمت أيضًا الفيلكرو على Arduino. جعل هذا الأمر مناسبًا جدًا لسحب Arduino إذا كنت أرغب في تعديل الكود.

موصى به: