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

بونج يلعب شاشة مرنة على قميص: 8 خطوات (بالصور)
بونج يلعب شاشة مرنة على قميص: 8 خطوات (بالصور)

فيديو: بونج يلعب شاشة مرنة على قميص: 8 خطوات (بالصور)

فيديو: بونج يلعب شاشة مرنة على قميص: 8 خطوات (بالصور)
فيديو: لأول مرة لعبة جوالك على راسك مع اليوتيوبرز 🤣🔥! ( انقلبت جلد ) 2024, ديسمبر
Anonim
بونج يلعب شاشة مرنة على قميص
بونج يلعب شاشة مرنة على قميص
بونج يلعب شاشة مرنة على قميص
بونج يلعب شاشة مرنة على قميص
بونج يلعب شاشة مرنة على قميص
بونج يلعب شاشة مرنة على قميص

هذا هو زي الهالوين الخاص بي لعام 2013. لقد كان في العمل لمدة عام تقريبًا واستغرق صنعه بضع ساعات. تبلغ أبعاد الشاشة 14 × 15 بكسل ، لذا فهي ذات دقة منخفضة جدًا ولكن لا يزال بإمكانها القيام ببعض الأشياء الممتعة. إنه مرن جسديًا في جميع الاتجاهات ، على الرغم من أنه لا يمكن طيه دون تلف. يحتوي على وحدة تحكم تتكون من زر واحد ووعاء منزلق ، متصل بجهاز برو ميغا عبر USB. لإبقائها على قيد الحياة لفترة طويلة ، تستخدم بطاريتين هائلتين بقوة 2200 مللي أمبير في الساعة موصلة على التوالي للحصول على الجهد اللازم ، ومن ثم منظم 5 فولت لجعلها قابلة للاستخدام. يتم وضع جميع الأجهزة الإلكترونية في الجيوب داخل القميص حتى يمكن إزالتها وغسل القميص. تلعب لعبة بونغ وظيفية. يتم تمييزه أولاً بالكلمات "PONG PLAY" بأحرف زرقاء جميلة باستخدام نسخة معدلة من خط Tom Thumb (يمكن العثور عليها على https://robey.lag.net/2010/01/23/tiny-monospace-font.لغة البرمجة). بعد خمس ثوانٍ ، يمكن إعطاء الخيار للضغط على الزر للمضي قدمًا ، أو عدم الضغط على الزر وترك تجربة جيدة تمامًا وراءك. عندما يختار المرء الضغط على الزر ، تبدأ اللعبة. المجداف الأحمر على اليمين هو مجداف الكمبيوتر والمجداف الأخضر على اليمين هو مجداف اللاعب ، والذي يتم التحكم فيه بواسطة وعاء الشريحة للتحرك لأعلى ولأسفل. ترتد الكرة حيث يحاول كل جانب تسجيل نقطة. يمكن للاعب أن يضرب الكرة بحافة المضرب لتسريعها (ميزة رائعة) بينما لا يستطيع الكمبيوتر القيام بذلك ، وينتهي الأمر بدلاً من ذلك بالتعثر مع التحرك بشكل أبطأ قليلاً من الكرة. عندما يتم تسجيل نقطة ، يتغير البكسل إلى اللون الأبيض على مضرب جانبي التهديف. يحسب في ثنائي من القاع. حيث يكون اللون الأخضر أو الأحمر صفرًا والأبيض يساوي 1. 21 هي النتيجة التي يجب الفوز بها (أو الخسارة اعتمادًا على من يحصل على 21 نقطة) وهكذا عندما يقرأ مجداف اللاعب 10101 ، يتم عرض نص "YOU WIN". مرة أخرى في Tom Thumb المعدل. يحدث الشيء نفسه ولكن مع عرض "YOU LOSE" بدلاً من ذلك. بعد الفوز أو الخسارة ، تبدأ اللعبة من جديد إلى النقطة التي تلي Pong Play مباشرة. لإعادة التشغيل بالكامل ، يتم الضغط على زر إعادة التشغيل الموجود على "Magic Box" ، المعروف أيضًا باسم the-box-with-all-the-Electronics-except-the-screen.

الخطوة 1: المواد والأدوات

المواد والأدوات
المواد والأدوات
المواد والأدوات
المواد والأدوات

الأشياء التي تم تمييزها بعلامة * اختيارية ولكنها موصى بها وهكذا بدون ترتيب معين … المواد: 4 ياردات من Adafruit Neopixle 60 بكسل لكل متر شريط 1 تي شيرت * زوج واحد من الحمالات 1/2 ياردة من القماش ستكون أكثر من كافية (غير يفضل نسج قابل للتمدد) 6 أقدام USB ذكر إلى كبل ذكر USB B 1 USB موصل أنثى 3 2 موصلات أنثى JST 4 2 دبوس أسلاك ذكر JST شاحن بطارية 2 بطاريات 6600 مللي أمبير 1 نمط Arcade زر 1 اردوينو برو ميجا 1 رأس FTDI 1 موصل أنثى USB B مع لوحة الاختراق 1 مفتاح تشغيل / إيقاف (تبديل) 1 مفتاح إعادة تعيين (تبديل أو مؤقت) مقياس جهد منزلق واحد * 1 مقبض وعاء منزلق 1 زوج موصل عالي الأمبير * 1 حالة مشروع 1 5 فولت 3+ أمبير منظم الجهد صغير القليل من البلاستيك بعض اللحام بعض الأسلاك بعض الخيوط * بعض الغراء الساخن * بعض المرونة لبعض الوقت (ربما أكثر بقليل من "بعض") بعض المثابرة (ربما تحتاج إلى قدر كبير من هذا في الواقع) بعض أنابيب الانكماش الحراري أو الشريط الكهربائي بعض الغراء الفائق بعض الحديد على أدوات الدعم * مساعدة الأيدي العادية s (أو أي شخص لديه إمكانية الوصول إليها) لحام الحديد * مسدس الغراء الساخن Dremel أو الصنفرة إزميل الأسلاك المتعرية قواطع الأسلاك مسدس التدبيس مفك البراغي المنشار دبابيس ماكينة الخياطة مقص النسيج

الخطوة 2: قص شريط LED إلى شرائط أصغر

اقطع شريط LED إلى شرائط أصغر
اقطع شريط LED إلى شرائط أصغر
اقطع شريط LED إلى شرائط أصغر
اقطع شريط LED إلى شرائط أصغر
اقطع شريط LED إلى شرائط أصغر
اقطع شريط LED إلى شرائط أصغر

استخدم أداة القطع المفضلة لديك وقم بتقطيع الشريط إلى 14 مقطعًا ، طول كل منها 15 بكسل. قص فقط بين آثار النحاس ، التي تحمل علامة مثل "DO" "DIN" "+ 5V" و "GND". إذا كان ملحومًا بالفعل فوق النحاس ، فقم بقطعه مباشرة. حاول ألا تقطع الكثير من النحاس المكشوف ولكن إذا قمت بقطعه قليلاً فلا بأس بذلك. بمجرد قطع جميع الأشرطة الأربعة عشر ، قم بقص جزء صغير من المطاط من كل طرف لإبعاده عن طريق لحام الشرائط.

الخطوة 3: لحام الشاشة معًا

لحام الشاشة معًا
لحام الشاشة معًا
لحام الشاشة معًا
لحام الشاشة معًا
لحام الشاشة معًا
لحام الشاشة معًا

خذ السلك واقطعه إلى شرائح حوالي 3.5 بوصة (9 سم). في حالتي ، لدي ثلاثة ألوان مختلفة لتسهيل الحفاظ عليها مستقيمة عند اللحام ، لكن لونًا واحدًا سيعمل بشكل جيد. ستحتاج إلى حوالي 40 من هؤلاء الرجال الصغار ، لكن عليك قطع زوجين آخرين في حالة. بمجرد الانتهاء من قطع السلك ، قم بتقطيع الأطراف وصفيحها (إذا كانت لديك خبرة في اللحام ، يمكنك التخطي إلى الفقرة التالية) ، وهذا يعني أنه بعد إزالة القليل من البلاستيك ضع بعض اللحام على طرفي كل سلك. لا تقم بتسخين اللحام وحاول الانتقال إلى السلك ، قم بالتسخين باستخدام مكواة اللحام من أسفل النحاس ووضع اللحام في الأعلى. تحلى بالصبر وانتظر السلك الساخن لإذابة اللحام. من المغري أن تقوي مكواة اللحام على اللحام لتبدأ (نفاد صبري وأنا أعلم تمامًا كيف تشعر) ولكن اللحام لن يلتصق أيضًا. افعل الشيء نفسه بالنسبة للآثار النحاسية المكشوفة على كل طرف من أقسام الشريط. إذا كان يحتوي بالفعل على لحام ، فلا تقلق بشأنه. بالنسبة للشريط ، قد ترغب في بناء كومة صغيرة لتسهيل الأمر لاحقًا. عند العمل بالشريط ، افعل ذلك بسرعة ، وحاول ألا تقضي الكثير من الوقت في تسخين الشريط. افعل فقط ما عليك القيام به لإذابة اللحام على التتبع. قم بلحام سلك على كل أثر حتى نهاية الشريط الأول (الشريط الأول هو الشريط الذي يحتوي على الأسلاك والموصل ، قم بتثبيته حتى النهاية المكشوفة). إذا نظرت إلى الشريط ، فسترى سهامًا صغيرة عليه تصل إلى النهاية حيث قمت بلحام السلك. خذ شريطًا آخر بحيث تشير الأسهم إلى الاتجاه المعاكس ، وقم بلحام السلك القادم من تتبع GND إلى تتبع GND للآخر ، و + 5V إلى + 5V وما إلى ذلك. كرر هذا مع التأكد من تبديل الأسهم للاتجاهات بعد كل قسم بحيث إذا كنت ستتبعها فسوف تتعرج لأعلى ولأسفل ، ويمكن أن تمتد إلى شريط طويل في النهاية. بمجرد أن يتم لحام جميع الشرائط الأربعة عشر ، ضعها واصطفها حتى يشكل مؤشر LED شبكة. ثم احتفظ بها معًا باستخدام طريقة يمكن إزالتها لاحقًا دون إتلاف الشريط. لقد استخدمت الشريط اللاصق. إنه لزج بدرجة كافية للحفاظ على كل شيء معًا ولكن ليس لزجًا بحيث يترك بقايا. لا أوصي بأي شيء دائم ، مثل الدبابيس أو الشريط اللاصق. بمجرد أن يتم تسجيل كل شيء معًا ، قم بتوصيل سلك من الشريط الموجود في الأسفل + 5 فولت إلى السلك المجاور له مباشرةً. كرر حتى يتم تمرير صنابير الطاقة في الجزء السفلي بالكامل. هذا حتى لا تعتيم الشاشة مع تقدم خط مصابيح LED.

الخطوة 4: لحام الإلكترونيات الأساسية

لحام الإلكترونيات الأساسية
لحام الإلكترونيات الأساسية
لحام الإلكترونيات الأساسية
لحام الإلكترونيات الأساسية
لحام الإلكترونيات الأساسية
لحام الإلكترونيات الأساسية

قم بتوصيل لوحة الاختراق USB B (BOB) بموصل USB B. قم بتوصيل الأسلاك المناسبة بموصل USB A. أنصح بالنظر إلى طرف الموصل كما هو موجود في موقع الويب هذا ، https://image.pinout.net/pinout_USB_files/pc_usb_connectors_pinout.png. لا تقلق بشأن مكان لحام الأطراف الأخرى للأسلاك على موصل USB A في الوقت الحالي ؛ التي سيتم تغطيتها في خطوة وحدة التحكم. قم بقص موصل البيانات من الشريط ، الموصل الأنثوي ، وليس الموصل الذكر (تم الحصول على الموصل الأنثوي من الطرف الآخر). قم بتلحيم موصلات JST الذكر بنهايات البطارية بحيث يتحول اللون الأحمر إلى الأحمر ويتحول الأسود إلى الأسود. تذوب أنابيب الانكماش الحراري فوق الأسلاك المكشوفة (تنزلق قبل اللحام) بحيث لا تقصر أو تستخدم شيئًا آخر مثل الشريط الكهربائي أو الغراء الساخن. جند بعض الأسلاك لجميع موصلات JST الأنثوية. تأكد من توصيل طرف ذكر حتى لا تتحرك الدبابيس. كن حذرًا من القطبية وتأكد من تطابق الأسلاك مع الموصلات الذكرية. أسلاك اللحام إلى أحد الموصلات ذات الجهد العالي (ولكن ليس زوجًا) ، مرة أخرى ، مع التأكد من تطابق أي ألوان وتوصيلها معًا لمنع أي دبابيس متغيرة. قم بلحام مجموعة الموصل / الأسلاك الأنثوية فقط بحيث يتم توصيلها في سلسلة ، وليست متوازية ، لتجاوز جهد العتبة لمنظم الطاقة. لذلك ، قم بتوصيل السلك الموجب بالسلك السالب للتجميع الآخر ، لذا لدينا الآن سلك موجب غير ملحوم وسلك واحد غير ملحوم سالب وسلكان ملحومان ملحومان بموصلات مختلفة. خذ السلك السالب واحفظه ليتم لحامه بالسلك السالب في مكان آخر. الآن اصطحب السلك الموجب وقم بتثبيته إلى المحول إذا كان هناك ثلاثة دبابيس أو أكثر (أو أكثر من طريقة واحدة للتشغيل) ، قم بتثبيتها في الدبوس الأوسط. لاحظ أن "الدبوس الأوسط" قد لا يكون فعليًا في المنتصف. تتمثل طريقة التعرف عليه في العثور على الدبوس ، عندما يكون المفتاح قيد التشغيل في أي حالة ، فسيكون دائمًا متصلاً بدبوس آخر. إذا لم يكن هناك دبوس مثل هذا ، فلديك مفتاح خاص جدًا ؛ فقط قم بتوصيله بأي دبوس وتأكد من توصيل السلك التالي الملحوم بالمفتاح بهذا السلك في حالة واحدة على الأقل. الآن قم بتوصيل سلك السحب الموجب الموجود في منظم الجهد بالطرف الآخر من المفتاح ، كما تمت مناقشته أعلاه. قم بتلحيم الجهد الإيجابي للخارج إلى الطرف الموجب لموصل التيار العالي غير الملحوم. خذ سلك السحب السلبي وقم بتوصيله بالطرف السالب لموصل التيار العالي. سنقوم الآن بلحام الطاقة بالتوازي مع Arduino و Power strip. الآن خذ أسلاك إخراج منظم الجهد ولحام قطعتين من الأسلاك على كلا الطرفين الموجب والسالب حتى يخرجوا في شكل Y. قم بتوصيل موصل ثنائي السن بالأسلاك الموجبة والسالبة لمجموعة شريط LED. لا يهم نوع الموصل الذي تستخدمه ، يمكن أن يكون JST أو في حالتي بعض كبلات الطاقة / الصوت أو أي شيء (لست متأكدًا ، وأعتذر لعدم وجود أي صور). قم بتوصيل أحد أسلاك الطاقة الموجبة بالطرف الموجب للموصل المقابل لشريط الضوء وأحد الأسلاك السالبة بالدبوس الآخر على الموصل. افعل الشيء نفسه ولكن مع موصل / مجموعة أسلاك JST ذكر. تذكر طوال الوقت عزل مفاصل اللحام لتجنب السراويل القصيرة. الآن على ما يجب القيام به مع موصل USB B. قم بتوصيل السلك الموجب بفتحة 5 فولت في Arduino Pro Mega. خذ السلك الأرضي وقم بتوصيله بفتحة GND. خذ D + وقم بتثبيته في الدبوس الرقمي (أو في هذه الحالة ، الفتحة) 40. اللحيم D- إلى الدبوس التمثيلي 15. قم بلحام نهاية بيانات الموصل الأنثوي الذي يتزاوج مع موصل ذكر شريط LED إلى دبوس البيانات 6 و سلك أرضي إلى دبوس GND. يعمل الشريط اللاصق أو الشريط اللاصق بشكل رائع لتثبيت الأسلاك على السبورة حتى لا تسقط عند قلبها ليتم لحامها. الآن ، خذ زرًا مؤقتًا وقم بتوصيل سلك من أحد الطرفين إلى دبوس VCC (أو أي دبوس خرج جهد) والطرف الآخر إلى دبوس RESET.

الخطوة 5: تحكم

مراقب
مراقب
مراقب
مراقب
مراقب
مراقب

الأول هو اختيار الشكل الصحيح للبدء به. كل هذا يتوقف على كيفية تنظيم وحدة التحكم. أردت المزيد من وحدة تحكم مسطحة لذلك حصلت على قطعة من 3 1/2 "× 3/4" من اللوح الخشبي. رتب الأجزاء بطريقة تبدو مناسبة ومريحة للعمل معها. استخدم المنحنى الفرنسي ، والبوصلة ، والمثلث ، والحافة المستقيمة للرسم على المكان الذي يجب أن تذهب إليه كل القطع. قص المخطط الأساسي باستخدام أداة القطع التي تختارها. سيكون من الأفضل حظر المنشار لكنني استخدمت منشار مواءمة ، والذي كان يعمل بشكل جيد. صنفر الحواف لجعلها تنتقل بسلاسة ، ثم صنفرة الزوايا لجعلها أكثر راحة. قم بحفر الفتحة الخاصة بالمفتاح ، ثم قم برمل و / أو إزميل و / أو Dremel خارج أي جزء في الجزء السفلي يناسبه. حاول ألا تفعل أي شيء بالجزء العلوي وقم فقط برمل ما تحتاجه لتكون قادرًا على ملاءمته عن طريق التواء أو زاوية أو أي شيء آخر لإدخاله. بمجرد تثبيته مع الجوز البلاستيكي وإرفاقه. تحول. حفر المنطقة لمقبض مقياس الجهد لتلائم المنطقة وإزميلها حتى يمكن أن تغوص وتناسب تمامًا. قم بحفر بعض الثقوب حتى يتمكن المسمار من تثبيته. قم بثني الأجزاء الصغيرة من موصل USB A الذي يزيد عرضه العام قليلاً (انظر إلى الصور). قم بإزميل جزء من الموصل ، والتحقق تدريجياً للتأكد من أن الموصل مناسب. قم بلصق الموصل في الفتحة الخاصة به. خذ قطعة صغيرة من البلاستيك وقم بقصها في شكل يلائم الموصل (انظر إلى الصور) ، ثم قم بتثبيتها على الخشب. اقطع أي قطع قد تعترض طريقك. برغي في مقياس الجهد وأرفق المقبض. قم بلحام السلك الموجب بأحد طرفي مقياس الجهد (وليس الجزء المتغير) والسلك السالب في الطرف المقابل. قم بلحام D- الدبوس بالدبوس المتغير الموجود في الوعاء. قم بلحام سلك من الدبوس الموجود في الوعاء بالسلك الموجب إلى أحد المسامير الموجودة على الزر. جندى D + إلى الدبوس الآخر على الزر. قم بقص السلك الاحتياطي وعزل القطع التي تحتاج إليه.

الخطوة 6: القميص

قميص
قميص
قميص
قميص
قميص
قميص

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

الخطوة السابعة: البرمجة

برمجة
برمجة

وها هو الكود. هناك أجزاء قليلة تم التعليق عليها جيدًا ولكن الغالبية العظمى ليست كذلك. إذا كانت لديك أسئلة حول أجزاء مختلفة ، فيمكنك إما إعطائي رقم السطر (مع # تضمين كسطر رقم واحد) أو إعطائي نسخة من السطر (الخطوط) والوظيفة التي يتواجد فيها (مثل الحلقة () أو compMovePaddle ()) وسأبذل قصارى جهدي لأشرحها لك ، ثم أضف تعليقًا على الكود يشرحها. # تضمين # تعريف رقم التعريف الشخصي 6 // يقول ما هي دبابيس الإدخال للعبة int buttonPin = 40 ؛ // تملي النتيجة ، محفوظة في مصفوفة ثنائية لأنها esier int playerScore [5] = {0، 0، 0، 0، 0}؛ int compScore [5] = {0، 0، 0، 0، 0} ؛ // تملي اتجاه الكرة int bvd = 0 ؛ // 0 أسفل ، 1 أعلى int bhd = 0 ؛ // 0 يمينًا ، 1 يسارًا // تملي موضع الكرات int bvp = 8 ؛ كثافة العمليات bhp = 6 ؛ // يتحقق لمعرفة ما إذا كانت الكرة في الوضع السريع boolean fast = false ؛ // يتحقق مما إذا كانت نتيجة. منطقية cIsPoint = خطأ ؛ منطقية pIsPoint = خطأ ؛ // مواقع مجداف int cPaddle = 0 ؛ int paddle = 0 ؛ السابق الطويل ميليس = 0 ؛ السابق الطويل MillisForComp = 0 ؛ // ضبط أوقات التأخير للكرة سريعة وبطيئة الحركة ، يكون "Int" في normInt و fastInt هو للفاصل الزمني int normInt = 50 ؛ int fastInt = 10 ؛ // تستخدم للتحقق من الفوز. 1 هو فوز اللاعب ، -1 في فوز الكمبيوتر ، و 0 لم يحدث شيء بعد فوز int = 0 ؛ // للتخلص من الخلل. المستخدمة في جملة addOne وليس في أي مكان آخر. الباحث الذي = 0 ؛ // الشيء المعروض قبل البدء ، -1 هو عملية هروب int pongPlay = {1 ، 2 ، 3 ، 4 ، 10 ، 11 ، 12 ، 13 ، 16 ، 18 ، 20 ، 27 ، 29 ، 33 ، 34 ، 41 ، 42 ، 61 ، 62 ، 63 ، 70 ، 71 ، 72 ، 76 ، 85 ، 86 ، 88 ، 91 ، 92 ، 94 ، 100 ، 101 ، 102 ، 103 ، 131 ، 132 ، 136 ، 139 ، 144 ، 145 ، 146 ، 147 ، 148 ، 161 ، 162 ، 166 ، 175 ، 183 ، 185 ، 192 ، 194 ، 195 ، 196 ، 197 ، 198 ، 199 ، 204 ، 205 ، 206 ، 207 ، 208 ، -1} ؛ // إذا ربحت في = {1 ، 2 ، 3 ، 4 ، 5 ، 16 ، 17 ، 18 ، 19 ، 20 ، 27 ، 33 ، 34 ، 39 ، 46 ، 47 ، 48 ، 49 ، 54 ، 55 ، 56 ، 57 ، 58 ، 77 ، 78 ، 79 ، 84 ، 88 ، 91 ، 92 ، 93 ، 94 ، 95 ، 99 ، 103 ، 106 ، 110 ، 114 ، 118 ، 130 ، 131 ، 132 ، 144 ، 145 ، 146 ، 147 ، 151 ، 162 ، 163 ، 168 ، 169 ، 170 ، 177 ، 181 ، 192 ، 193 ، 204 ، 205 ، 206 ، 207 ، -1} ؛ // إذا خسرت في الخسارة = {1 ، 3 ، 5 ، 16 ، 17 ، 18 ، 19 ، 20 ، 24 ، 26 ، 28 ، 31 ، 32 ، 32 ، 33 ، 34 ، 35 ، 39 ، 46 ، 47 ، 48 ، 49 ، 62 ، 65 ، 77 ، 78 ، 79 ، 84 ، 86 ، 88 ، 91 ، 94 ، 99 ، 103 ، 106 ، 110 ، 122 ، 123 ، 124 ، 130 ، 131 ، 132 ، 144 ، 148 ، 152 ، 153 ، 154 ، 162 ، 163 ، 168 ، 169 ، 170 ، 181 ، 192 ، 193 ، 204 ، 205 ، 206 ، 207 ، 208 ، -1} ؛ // يقوم بإعداد شريط LED Adafruit_NeoPixel = Adafruit_NeoPixel (210 ، PIN ، NEO_RGB + NEO_KHZ800) ؛ // إعداد ، لا يوجد دبوس 40 للإدخال ، يبدأ الشريط ، يعرض // الرسالة ويظهرها. إعداد باطل () {pinMode (buttonPin ، INPUT) ؛ strip.begin () ، لـ (int i = 0؛ pongPlay > 0؛ i ++) {strip.setPixelColor (pongPlay ، strip. Color (0، 0، 255)) ؛ } عرض الشريط()؛ تأخير (5000) ؛ while (digitalRead (buttonPin) == LOW) {// إنه فخ! (حتى يتم الضغط على الزر.)}} حلقة فارغة () {clearScreen ()؛ // يرسم المجاذيف لإظهار النتيجة لـ (int i = 0؛ i <5؛ i ++) {if (playerScore == 1) {strip.setPixelColor (204-i، strip. Color (255، 255، 255)) ؛ } else if ((playerScore == 0)) {strip.setPixelColor (204-i، strip. Color (0، 255، 0))؛ } if (compScore == 1) {strip.setPixelColor (5 + i، strip. Color (255، 255، 255)) ؛ } else if ((compScore == 0)) {strip.setPixelColor (5 + i، strip. Color (255، 0، 0))؛ }} // رسم الكرة في وضع البداية strip.setPixelColor (98، strip. Color (255، 255، 255)) ؛ عرض الشريط()؛ // يقرر ما إذا كانت الكرة ترتفع أم تهبط أثناء (pIsPoint == false && cIsPoint == false) {clearScreen ()؛ تيار طويل بدون توقيع ميليس = ميلي () ؛ // يعين موضع مجداف اللاعب pPaddle = checkPaddlePos () ؛ // يتحقق من الموضع التالي checkNext () ؛ // تحريك الكرة إذا (سريع == خطأ) {if (currentMillis - previousMillis> normInt) {previousMillis = currentMillis؛ moveBall () ؛ }} else if (fast == true) {if (currentMillis - previousMillis> fastInt) {previousMillis = currentMillis؛}} else if (fast == true) {if (currentMillis - previousMillis> fastInt) {previousMillis = currentMillis؛ moveBall () ؛ }} // ارسم الكرة إذا (bhp٪ 2! = 0) {strip.setPixelColor (bhp * 15 + 14-bvp، strip. Color (255، 255، 255)) ؛ } else if (bhp٪ 2 == 0) {strip.setPixelColor (bhp * 15 + bvp، strip. Color (255، 255، 255)) ؛ } // كمبيوتر حركة مجداف compMovePaddle () ؛ // رسم المجاذيف drawPaddles () ؛ // فعلاً طرح كل شيء.عرض الشريط()؛ // التحقق لمعرفة ما إذا تم تسجيل نقطة إذا (pIsPoint == true) {which = 0؛ دينار بحريني = 0 ؛ أضف واحدا()؛ استراحة؛ } else if (cIsPoint == true) {which = 1؛ دينار بحريني = 1 ؛ أضف واحدا()؛ استراحة؛ }} if (win == 1) {clearScreen ()؛ لـ (int i = 0؛ youWin > 0؛ i ++) {strip.setPixelColor (youWin ، strip. Color (255، 0، 0)) ؛ عرض الشريط()؛ } تأخير (5000)؛ لـ (int i = 0 ؛ i <5 ؛ i ++) {playerScore = 0 ؛ compScore = 0 ، } فوز = 0 ؛ } else if (win == -1) {clearScreen () ؛ لـ (int i = 0؛ youLose > 0؛ i ++) {strip.setPixelColor (youLose ، strip. Color (0، 255، 0)) ؛ عرض الشريط()؛ } تأخير (5000)؛ لـ (int i = 0 ؛ i <5 ؛ i ++) {playerScore = 0 ؛ compScore = 0 ، } فوز = 0 ؛ } pIsPoint = خطأ ؛ cIsPoint = خطأ ؛ bvp = 8 ؛ حصانا = 6 ؛ bvd = عشوائي (0 ، 2) ؛ // 0 لأسفل ، 1 لأعلى سريع = خطأ ؛ } // الذكاء الاصطناعي للعبة باطل compMovePaddle () {unsigned long currentMillis = millis ()؛ إذا (currentMillis - previousMillisForComp> 51) {previousMillisForComp = currentMillis ؛ إذا (bvp> = 13 && 10-cPaddle 0) {cPaddle-- ؛ } else if (bvp = 0 && cPaddle <10) {cPaddle ++؛ } else if (bvp-3> 10-cPaddle && 10-cPaddle> = 0 && cPaddle> 0) {cPaddle--؛ } else if (bvp <10-cPaddle && 10-cPaddle <= 10) {cPaddle ++؛ }}} // حرك الكرة باطل moveBall () {if (bhd == 0) {bhp--؛ } else if (bhd == 1) {bhp ++؛ } إذا (bvd == 0) {bvp--؛ } else if (bvd == 1) {bvp ++ ؛ }} // يضيف واحدًا إلى المصفوفة. إذا كان أي واحد هو 0 فإنه يضيف إلى نقاط اللاعب. إذا كان الرقم 1 ، فإنه يضيف إلى أجهزة الكمبيوتر void addOne () {if (which == 0) {// إذا كانت نتيجة اللاعب // أضف واحدًا. هذه هي الطريقة البسيطة التي أعرف كيف. لـ (int i = 0؛ i <5؛ i ++) {// loop if (playerScore == 0) {// إذا كانت هذه القيمة صفر playerScore = 1؛ // اجعلها 1 فاصل؛ // ثم اذهب بعيدًا} else {// إذا كانت 1 playerScore = 0؛ // اجعلها صفرية وحلقة}}} else if (التي == 1) {for (int i = 0؛ i <5 ؛ i ++) {if (compScore == 0) {compScore = compScore +1؛ استراحة؛ } else {compScore = 0 ؛ }}} // تحقق لمعرفة ما إذا فاز أي شخص. إذا (compScore [0] == 1 && compScore [2] == 1 && compScore [4] == 1) {win = -1؛ } else if (playerScore [0] == 1 && playerScore [2] == 1 && playerScore [4] == 1) {win = 1؛ }} // يتحقق من وضع الكرات التالي فارغ checkNext () {// تحقق لمعرفة ما إذا تم تسجيل نقطة إذا (bhp == 13) {pIsPoint = true؛ } else if (bhp == 0) {cIsPoint = true؛ } // إذا تم تسجيل نقطة بدلاً من تخطي بقية هذه الأشياء إذا (pIsPoint == false || cIsPoint == false) {// يتحقق من الكرة عموديًا إذا (bvp + bvd == 15) {bvd = 0 ؛ } else if (bvp + bvd == 0) {bvd = 1 ؛ } // يتحقق من الكرة أفقيًا إذا (bhp + bhd == 13) {// أولاً على جانب الكمبيوتر if (bvp> = 10-cPaddle && bvp <= 10-cPaddle + 4) {if (bhd == 1) {bhd = 0 ؛ } else if (bhd == 0) {bhd = 1 ؛ } سريع = خطأ ؛ } else if (bvp + bvd == 10-cPaddle || bvp + bvd == 10-cPaddle + 5) {if (bvp! = 0 && bvp! = 14) {if (bvd == 0) {bvd = 1 ؛ } else if (bvd == 1) {bvd = 0 ؛ } دينار بحريني = 1 ؛ } else if (bvp == 0 || bvp == 14) {bhd = 1 ؛ } سريع = خطأ ؛ }} else if (bhp + bhd == 1) {// ثم على جانب اللاعب if (bvp> = pPaddle && bvp <= pPaddle + 4) {// هل تضرب المضرب في مكان عادي؟ //ترتد الكرة! إذا (bhd == 1) {bhd = 0 ؛ } else if (bhd == 0) {bhd = 1 ؛ }} else if (bvp + bvd == pPaddle || bvp + bvd-5 == pPaddle) {// هل هو يضرب المضرب في الزاوية إذا (bvp! = 0 && bvp! = 14) {// is it ليس عاليًا أو منخفضًا؟ //ترتد الكرة! إذا (bvd == 0) {bvd = 1 ؛ } else if (bvd == 1) {bvd = 0 ؛ } دينار بحريني = 1 ؛ سريع = صحيح ؛ } else if (bvp == 0 || bvp == 14) {// هل هو مرتفع أم منخفض؟ //ترتد الكرة! دينار بحريني = 0 ؛ fast = true؛ // عيّن القيمة لجعل الكرة تتحرك لاحقًا بسرعة}}}}} int checkPaddlePos () {// يقرأ القدر ويقرر موضع المضرب وفقًا لذلك إذا (analogRead (A15) <93) {return 0 ؛ } else if (analogRead (A15) <186) {return 1؛ } else if (analogRead (A15) <279) {return 2؛ } else if (analogRead (A15) <372) {return 3؛ } else if (analogRead (A15) <465) {return 4؛ } else if (analogRead (A15) <558) {return 5؛ } else if (analogRead (A15) <652) {return 6؛ } else if (analogRead (A15) <745) {return 7؛ } else if (analogRead (A15) <837) {return 8؛ } else if (analogRead (A15) <= 931) {return 9؛ } else if (analogRead (A15) <= 2014) {return 10؛ }} void drawPaddles () {// ارسم المجاذيف في المكان الصحيح وعرض النتيجة على المجداف لـ (int i = 0؛ i <5؛ i ++) {if (playerScore == 1) {strip. setPixelColor (pPaddle + i ، strip. Color (255 ، 255 ، 255)) ؛ } else if ((playerScore == 0)) {strip.setPixelColor (pPaddle + i، strip. Color (255، 0، 0))؛ } if (compScore == 1) {strip.setPixelColor (199 + cPaddle-i، strip. Color (255، 255، 255)) ؛ } else if ((compScore == 0)) {strip.setPixelColor (199 + cPaddle-i، strip. Color (0، 255، 0))؛ }}} void clearScreen () {for (int i = 0؛ i <= 210؛ i ++) {strip.setPixelColor (i، strip. Color (0، 0، 0)) ؛ } عرض الشريط()؛ }

الخطوة 8: المنتج النهائي

منتج منتهي
منتج منتهي
منتج منتهي
منتج منتهي

وها أنت ذا ، القميص النهائي!

موصى به: