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

مصفوفة NeoPixels لعبة الأفعى: 4 خطوات
مصفوفة NeoPixels لعبة الأفعى: 4 خطوات

فيديو: مصفوفة NeoPixels لعبة الأفعى: 4 خطوات

فيديو: مصفوفة NeoPixels لعبة الأفعى: 4 خطوات
فيديو: Arduino Connect4 Game- Human vs Microcontroller 2024, يوليو
Anonim
مصفوفة NeoPixels لعبة الأفعى
مصفوفة NeoPixels لعبة الأفعى

هل ما زلت تتذكر لعبة الثعبان التي لعبناها على صندوق الألعاب أو الهاتف المحمول خلال طفولتنا؟ سنتعلم اليوم كيفية صنع لعبة ثعبان باستخدام 8 * 8 NeoPixels Matrix. اخترنا Arduino uno كمركز تحكم ووحدة كسر جويستيك للتحكم في الثعبان.

الخطوة 1: قائمة المكونات:

المعدات:

1 × Freaduino UNO Rev2.2 MB_EFUNO

1 X Flexible 64 RGB LED 8 * 8 NeoPixels Matrix

1 X جويستيك اندلاع وحدة BKOUT_MD01

3 X دليل الخط

برمجة:

اردوينو IDE

الخطوة 2: توصيل الأجهزة

قم بتوصيل NeoPixels بدبوس D2.

"X" على وحدة كسر جويستيك ، قم بتوصيل دبوس A0 على لوحة Arduino UNO ، و "Y" قم بتوصيل دبوس A1 ، و "K" قم بتوصيل دبوس A2.

الخطوة الثالثة: البرمجة

تتضمن P #

#define PIN 2 // Output Pin #define MAX_LED 64 // كمية الخرزة uint32_t c ؛ int a = 0 ، رقم ؛ char huan غير الموقعة = 0 ، ci = 0 ؛ حرف u غير موقع = 40 ؛ // حجم خط مجموعة الكلمات غير الموقعة char x = 0 ؛ لون حرف غير موقعة [3]؛ حرف غير موقّع = {2، 3، 4، 5، 9، 14، 17، 20، 22، 26، 27، 29، 34، 35، 36، 37، 41، 46، 49، 54، 58، 59 ، 60 ، 61} ؛ // 24 char light [8] [8] = {{0، 1، 2، 3، 4، 5، 6، 7}، {15، 14، 13، 12، 11، 10، 9، 8} ، {16 ، 17 ، 18 ، 19 ، 20 ، 21 ، 22 ، 23} ، {31 ، 30 ، 29 ، 28 ، 27 ، 26 ، 25 ، 24} ، {32 ، 33 ، 34 ، 35 ، 36 ، 37 ، 38 ، 39} ، {47 ، 46 ، 45 ، 44 ، 43 ، 42 ، 41 ، 40} ، {48 ، 49 ، 50 ، 51 ، 52 ، 53 ، 54 ، 55} ، {63 ، 62 ، 61 ، 60 ، 59 ، 58 ، 57 ، 56} ،} ؛ حرف حرف بدون إشارة [8] = // تعيين الكلمة المطلوب إرسالها {{0 ، 1 ، 1 ، 1 ، 1 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 0 ، 1 ، 0 ، 0 ، // 0 {0 ، 1 ، 1 ، 1 ، 1 ، 1 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، // 1 {0 ، 1 ، 1 ، 1 ، 1 ، 1 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 1 ، 0 ، 1 ، 1 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 1 ، 0 ، 1 ، 0 ، 0 ، // 2 {0 ، 1 ، 1 ، 1 ، 0 ، 1 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 1 ، 0 ، 1 ، 0 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 1 ، 0 ، 1 ، 0 ، 0} ، // 3 {0 ، 1 ، 1 ، 1 ، 1 ، 1 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 1 ، 1 ، 1 ، 0 ، 0 ، 0 ، 0 ، {0 ، 0 ، 0 ، 1 ، 0 ، 0 ، 0 ، 0 ، // 4 {0 ، 1 ، 1 ، 1 ، 1 ، 1 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 1 ، 1 ، 1 ، 0 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 1 ، 0 ، 1 ، 0 ، 0} ، // 5 {0 ، 1 ، 0 ، 1 ، 1 ، 1 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 1 ، 1 ، 1 ، 1 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 1 ، 0 ، 1 ، 0 ، 0 ، // 6 {0 ، 1 ، 0 ، 1 ، 1 ، 1 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 1 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، // 7 {0 ، 1 ، 1 ، 1 ، 1 ، 1 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0} ، {0 ، 1 ، 1 ، 1 ، 1 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 1 ، 0 ، 1 ، 0 ، 0} ، // 8 {0 ، 1 ، 1 ، 1 ، 1 ، 1 ، 0 ، 0} ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، {0 ، 1 ، 1 ، 1 ، 0 ، 1 ، 0 ، 0} ، {0 ، 1 ، 0 ، 1 ، 0 ، 1 ، 0 ، 0} ، // 9 {0 ، 1 ، 1 ، 1 ، 1 ، 1 ، 0 ، 0 ، {0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 ، 0 } ،} ؛ char displaycore غير الموقعة [8] [8] ؛ سرعة intS = 400 ؛ // السرعة الأولية لدرجة تناول الثعبان ؛ // Game Score int xValue ؛ // JoyStick-X int yValue؛ // JoyStick-Y int zValue؛ // JoyStick-Z int FX، FY؛ // تنسيق الغذاء int SX ، SY ؛ // تنسيق رأس الثعبان int KEY ، K ؛ تمكين int ؛ // تمكين لإعادة تشغيل لعبة char sx [64] ؛ // تنسيق هيئة شار جسد ثعبان [64] ؛ شريط Adafruit_NeoPixel = Adafruit_NeoPixel (MAX_LED ، PIN ، NEO_RGB + NEO_KHZ800) ؛ باطل RANDOM () {A: FX = random (0، 7) ؛ FY = عشوائي (0 ، 7) ؛ لـ (int i = 0؛ i <3 + Score؛ i ++) // منع عرض الطعام على جسم الثعبان {if (FX == sx && FY == sy ) goto A؛ }} إلغاء myDelay (وقت int غير موقع) {// أثناء فترة تأخير حركة الثعبان ، يتعين علينا القيام بشيء مثل بريق الطعام وقراءة اتجاه جويستيك لـ (int t = 1؛ t 950 && KEY! = 5) { ك = 8 ؛ } else if (yValue <50 && KEY! = 8) {K = 5؛ } else if (xValue 950 && KEY! = 4) {K = 6؛ }} // هنا يمكنك مقارنة ما إذا كان اتجاه لوحة المفاتيح عكس اتجاه حركة الثعبان. إذا كان عكس ذلك ، فاستسلم للوحة المفاتيح. / *************************************************** **************************************************** **************************************************** **************************************************** ******** / void gameover () {// بمجرد إيقاف برنامج Gameover ، اضغط على الزر المركزي لإعادة تشغيل اللعبة. قيمة حرف غير موقعة ، y ؛ اللون [0] = عشوائي (3 ، 18) ؛ // تعيين اللون المعلمة هي RG B ، النطاق 0-255. اللون [1] = عشوائي (3 ، 18) ؛ اللون [2] = عشوائي (3 ، 18) ؛ c = strip. Color (اللون [1] ، اللون [0] ، اللون [2]) ؛ القيمة = النتيجة / 10 ؛ القيمة = القيمة * 4 ؛ ص = 0 ؛ لـ (رقم = قيمة ؛ رقم <قيمة + 4 ؛ رقم ++) {لـ (حرف حرف عمودي بدون إشارة = 0 ؛ عمودي <8 ؛ عمودي ++) {شاشات عرض [y] [عمودي] = حرف [رقم] [عمودي] ؛ } ذ ++ ؛ } القيمة = الدرجة٪ 10 ؛ القيمة = القيمة * 4 ؛ لـ (رقم = قيمة ؛ رقم <قيمة + 4 ؛ رقم ++) {لـ (حرف حرف عمودي بدون إشارة = 0 ؛ عمودي <8 ؛ عمودي ++) {شاشات عرض [y] [عمودي] = حرف [رقم] [عمودي] ؛ } ص ++ ؛ } لـ (حرف أفقي بدون إشارة = 0 ؛ أفقي <8 ؛ أفقي ++) {لـ (حرف عمودي بدون إشارة = 0 ؛ عمودي <8 ؛ عمودي ++) {if (displaycore [أفقي] [عمودي] == 1) // احكم على الضوء قيد التشغيل. {strip.setPixelColor (ضوء [أفقي] [عمودي] ، ج) ؛ } else strip.setPixelColor (light [الأفقي] [العمودي] ، 0) ؛ }} strip.show ()؛ // إرسال تأخير البيانات (5000) ؛ ك = 0 ؛ // إعادة تعيين اتجاه جويستيك sx [0] = 2 ؛ sx [1] = 1 ؛ sx [2] = 0 ؛ sy [0] = 1 ؛ sy [1] = 1 ؛ سي [2] = 1 ؛ // إعادة تعيين درجة تنسيق الثعبان = 0 ؛ // إعادة تعيين سرعة نتيجة اللعبة S = 400 ؛ // السرعة الأولية للثعبان} إعداد الفراغ () {Serial.begin (9600)؛ // تهيئة مكتبة strip.begin () ؛ // إرسال البيانات. اللون الافتراضي لكل نقطة هو 0. لذلك لا تضيء كل نقطة في البداية. عرض الشريط()؛ ك = 0 ؛ // إعادة تعيين اتجاه جويستيك sx [0] = 2 ؛ sx [1] = 1 ؛ sx [2] = 0 ؛ sy [0] = 1 ؛ sy [1] = 1 ؛ سي [2] = 1 ؛ // إعادة تعيين درجة تنسيق الثعبان = 0 ؛ // إعادة تعيين لون نتيجة اللعبة [0] = عشوائي (3 ، 18) ؛ // تعيين اللون المعلمة هي RG B ، النطاق 0-255. اللون [1] = عشوائي (3 ، 18) ؛ اللون [2] = عشوائي (3 ، 18) ؛ c = strip. Color (اللون [1] ، اللون [0] ، اللون [2]) ؛ // أخضر أحمر أزرق // تعيين اللون لـ (رقم = 0 ؛ رقم <24 ؛ رقم ++) {strip.setPixelColor (اذهب [رقم] ، ج) ؛ } strip.show ()؛ // إرسال تأخير البيانات (2000) ؛ عشوائي()؛ // إنتاج الطعام} باطل متنقل () {KEY = K؛ // كل حركة ثعبان تجعل الاتجاه يتغير لمرة واحدة. إذا (KEY == 8) // حركة ثعبان لأعلى {لـ (int i = 2 + النتيجة ؛ i> 0 ؛ i--) {sx = sx [i - 1] ؛ sy = sy [i - 1] ؛ } sy [0] = sy [0] - 1 ؛ إذا (sy [0] <0) // تجاوز الحدود واستمر على الجانب الآخر sy [0] = 7 ؛ } else if (KEY == 5) // حركة ثعبان إلى أسفل {لـ (int i = 2 + Score؛ i> 0؛ i--) {sx = sx [i - 1]؛ sy = sy [i - 1] ؛ } sy [0] = sy [0] + 1 ؛ إذا (sy [0]> 7) // تجاوز الحدود واستمر على الجانب الآخر sy [0] = 0 ؛ } else if (KEY == 4) // حركة الثعبان اليسرى {لـ (int i = 2 + Score؛ i> 0؛ i--) {sx = sx [i - 1]؛ sy = sy [i - 1] ؛ } sx [0] = sx [0] - 1 ؛ إذا (sx [0] <0) // تجاوز الحدود واستمر على الجانب الآخر sx [0] = 7 ؛ } else if (KEY == 6) // حركة الثعبان اليمنى {لـ (int i = 2 + Score؛ i> 0؛ i--) {sx = sx [i - 1]؛ sy = sy [i - 1] ؛ } sx [0] = sx [0] + 1 ؛ إذا (sx [0]> 7) // تجاوز الحدود واستمر على الجانب الآخر sx [0] = 0 ؛ } // تحريك جسم الثعبان باستخدام الزر} عروض باطلة () {لـ (رقم = 0 ؛ رقم <64 ؛ رقم ++) // مسح الشاشة {strip.setPixelColor (رقم ، 0) ؛ } عرض الشريط()؛ اللون [0] = 40 ؛ // تعيين اللون. المعلمة هي RG B ، النطاق 0-255. اللون [1] = 0 ؛ اللون [2] = 0 ؛ c = strip. Color (اللون [1] ، اللون [0] ، اللون [2]) ؛ // أخضر أحمر أزرق // تعيين اللون x = ضوء [FX] [السنة المالية] ؛ // عرض food strip.setPixelColor (x ، c) ؛ اللون [0] = عشوائي (3 ، 18) ؛ // تعيين اللون. المعلمة هي RG B ، النطاق 0-255. اللون [1] = عشوائي (3 ، 18) ؛ اللون [2] = عشوائي (3 ، 18) ؛ c = strip. Color (اللون [1] ، اللون [0] ، اللون [2]) ؛ // أخضر أحمر أزرق // تعيين اللون لـ (int i = 2 + Score؛ i> 0؛ i--) // عرض جسم الثعبان {x = light [sx [sy ؛ strip.setPixelColor (س ، ج) ؛ } اللون [0] = 0 ؛ // تعيين اللون. المعلمة هي RG B ، النطاق 0-255. اللون [1] = 40 ؛ اللون [2] = 0 ؛ c = strip. Color (اللون [1] ، اللون [0] ، اللون [2]) ؛ // أخضر أحمر أزرق // تعيين اللون x = ضوء [sx [0] [sy [0] ؛ // عرض شريط رأس ثعبان. setPixelColor (x ، c) ؛ strip.show ()؛ // Send data} void loop () {mobile ()؛ myDelay (speedS) ؛ // ضمن () هو وقت التأخير. يعرض () ؛ SX = sx [0] ؛ SY = sy [0] ؛ // احصل على تنسيق رأس الثعبان لـ (int i = 1؛ i <= 2 + Score؛ i ++) {if (SX == sx && SY == sy ) gameover ()؛ } // احكم على ما إذا كان رأس الثعبان قد لامس جسده. إذا تم لمسها ، ثم أعد توجيهها إلى GameOver. إذا (SY == FY && SX == FX) {RANDOM () ؛ النتيجة ++ ؛ اللون [0] = 40 ؛ // تعيين اللون. المعلمة هي RG B ، النطاق 0-255. اللون [1] = 0 ؛ اللون [2] = 0 ؛ c = strip. Color (اللون [1] ، اللون [0] ، اللون [2]) ؛ // أخضر أحمر أزرق // تعيين اللون x = ضوء [FX] [السنة المالية] ؛ // عرض food strip.setPixelColor (x ، c) ؛ strip.show ()؛ // إرسال البيانات إذا (! (النتيجة٪ 5)) {// تسريع سرعة الثعبان وفقًا للنتيجة. كل 5 أطعمة تؤكل ، تتسارع 100 مللي ثانية. السرعة S = السرعة S - 50 ؛ if (speedS <150) // الحد الأدنى 200 مللي ثانية. إذا كانت السرعة أقل من 200 مللي ثانية ، تظل السرعة 200 مللي ثانية. السرعة S = 150 ؛ }} // احكم على تناول الطعام. إذا أكل الثعبان طعامًا ، فقم بإضافة الدرجات وتجديد الطعام بشكل عشوائي. }

نتيجة التجربة

الخطوة 4: نتيجة التجربة

القراءات النسبية:

FreaksBot بلوتوث سيارة

قم بإضاءة الخرزة الأولى على 8 * 8 NeoPixels Matrix مع Arduino

Micro: bit Experiment 05: RGB LED - Elecfreaks Mirco: bit Starter Kit Course

Friday Product Post: مجموعة لحام عرض طيف تردد الموسيقى LED

استخدم ElecFreaks Micro: bit Tinker Kit لإضاءة ذكية

موصى به: