תוכן עניינים:
- שלב 1: חומרים וכלים
- שלב 2: חותכים את רצועת ה- LED לרצועות קטנות יותר
- שלב 3: הלחמת המסך יחד
- שלב 4: הלחמת אלקטרוניקה הליבה
- שלב 5: בקר
- שלב 6: חולצה
- שלב 7: תכנות
- שלב 8: מוצר מוגמר
וִידֵאוֹ: פונג משחק מסך גמיש על חולצה: 8 שלבים (עם תמונות)
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:17
זוהי תחפושת ליל כל הקדושים שלי לשנת 2013. היא נמצאת בעבודות כשנה ולקח לא מעט שעות איש ליצור. המסך הוא 14 על 15 פיקסלים, אז, רזולוציה די נמוכה אבל הוא עדיין יכול לעשות כמה דברים מהנים. הוא גמיש פיזית לכל הכיוונים, אם כי לא ניתן לקפל אותו ללא נזק. יש לו בקר המורכב מכפתור אחד וסיר שקופיות, המחובר למגה מקצוען באמצעות USB. כדי להשאיר אותו חי לאורך זמן הוא משתמש בשתי סוללות מפלצתיות של 2200 מיליאמפר / שעה המחוברות בסדרות כדי לקבל את המתח הדרוש, ולאחר מכן וסת 5 וולט כדי להפוך אותו לשמיש. כל האלקטרוניקה ממוקמת בכיסים בחלק הפנימי של החולצה כך שניתן להסירם וכך ניתן לכבס את החולצה. הוא משחק משחק פונקציונלי של פונג. תחילה הוא מחמיא לאדם עם המילים "PONG PLAY" באותיות כחולות מקסימות באמצעות גרסה שונה של גופן Tom Thumb (ניתן למצוא בכתובת https://robey.lag.net/2010/01/23/tiny-monospace-font.html). לאחר חמש שניות ניתן לתת את האפשרות ללחוץ על הכפתור כדי להמשיך הלאה, או לא ללחוץ על הכפתור ולהשאיר חוויה טובה לגמרי מאחור. כאשר בוחרים ללחוץ על הכפתור, המשחק מתחיל. משוט אדום מימין הוא משוט המחשב והחתור הירוק מימין הוא משוט השחקן, הנשלט על ידי סיר השקופית לנוע למעלה ולמטה. הכדור קופץ כשכל צד מנסה להבקיע נקודה. השחקן יכול להכות את הכדור עם קצה ההנעה שלו כדי להאיץ אותו (תכונה נחמדה) בזמן שהמחשב לא יכול לעשות זאת, ובמקום זאת בסופו של דבר נתקע עם תנועה איטית מעט יותר מהכדור. כאשר נקלעת נקודה, הפיקסל משתנה ללבן על משוט הצדדים. הוא נחשב בינארי מלמטה. כאשר הירוק או האדום הוא אפס והלבן הוא 1. 21 הוא הציון לזכות (או להפסיד בהתאם למי שיקבל 21 נקודות) ולכן כאשר משוט השחקן קורא 10101, הטקסט "אתה מנצח" מוצג. שוב ב- Tom Thumb ששונה. אותו דבר קורה אבל עם "YOU LOSE" מוצג במקום זאת. לאחר ניצחון או הפסד המשחק יופעל מחדש לנקודה מיד לאחר הפונג פליי. כדי להפעיל מחדש לגמרי את לחצן ההפעלה מחדש על "תיבת הקסם", המכונה גם התיבה עם כל האלקטרוניקה למעט המסך.
שלב 1: חומרים וכלים
דברים המסומנים ב- * הינם אופציונליים אך ממליצים ולכן ללא סדר מיוחד … חומרים: 4 חצרות Adafruit Neopixle רצועת 60 פיקסל למטר 1 חולצת טריקו * זוג כתפיות 1/2 מטר בד יהיה מספיק (לא מארג נמתח עדיף) 6 רגל USB זכר ל- USB B כבל זכר 1 מחבר נקבה נקבה 3 מחברי נקבה 2 פינים JST 4 2 פינים JST חוטי זכר מטען 2 סוללות 6600 mAh 1 כפתור בסגנון ארקייד 1 כותרת Arduino pro-mega 1 FTDI 1 מחבר נקבה USB B עם לוח פריצה 1 מתג הפעלה/כיבוי (מתג) 1 מתג איפוס (מתג או רגעי) 1 פוטנציומטר שקופית *1 ידית סיר לשקופית 1 זוג מחברי מגבר גבוה *מארז פרוייקט 1 ווסת מתח 5V 3+ מגבר קטן קצת פלסטיק קצת הלחמה חוט כלשהו חוט *קצת דבק חם *קצת גמיש מתישהו (אולי קצת יותר מ"כמה ") קצת התמדה (סביר להניח שתצטרך לא מעט מהדבר הזה) קצת צינורות חום או סרט חשמלי קצת דבק סופר קצת ברזל על גיבוי כלים *עוזרים לידיים יד רגילה s (או מישהו שיש לו גישה אליהם) מגהץ *אקדח דבק חם Dremel או נייר זכוכית חוט מפשטי חותכי חוטים אקדח סיכות מברג מנסרים סיכות מכונת תפירה בד מספריים
שלב 2: חותכים את רצועת ה- LED לרצועות קטנות יותר
השתמש בכלי החיתוך המועדף עליך וחתך את הרצועה ל -14 קטעים, באורך כל 15 פיקסלים. חותכים רק בין עקבות הנחושת, המסומנים במשהו כמו "DO" "DIN" "+5V" ו- "GND". אם הוא כבר מולחם על הנחושת, החיתוך שלו בדיוק. נסו לא לחתוך יותר מדי לתוך הנחושת החשופה, אבל אם תקצצו קצת זה בסדר גמור. לאחר שכל 14 הרצועות נחתכו, חתכו מעט מהגומי מכל קצה כדי להוציא אותו מהדרך להלחמת הרצועות.
שלב 3: הלחמת המסך יחד
קח את החוט וחתוך אותו למקטעים של כ -9 אינץ '(9 ס מ). במקרה שלי יש לי שלושה צבעים שונים כדי שיהיה קל יותר לשמור על ישר בעת הלחמה, אך צבע אחד יעבוד מצוין. תזדקק לכ -40 מהבחורים הקטנים האלה, אבל גזור עוד כמה למקרה הצורך. לאחר שסיימת לחתוך את החוט, רדף והדביק את הקצוות (אם יש לך ניסיון הלחמה תוכל לדלג לפסקה הבאה), כלומר לאחר הסרת מעט הפלסטיק לשים מעט הלחמה בקצות כל חוט. אל תחמם את הלחמה ונסה לעבור לחוט, מחמם עם הלחמה מתחתית הנחושת והנח את הלחמה בחלקו העליון. היו סבלניים וחכו שהחוט החם ימס את הלחמה. מפתה להקשיח את מגהץ ההלחמה להלחמה בכדי להתחיל אותו (חוסר הסבלנות שלי ואני יודע בדיוק איך אתה מרגיש) אך הלחמה לא תידבק גם כן. עשו את אותו הדבר לגבי עקבות הנחושת החשופים בכל קצה של קטעי הרצועה. אם כבר יש לו הלחמה אל תדאג. עבור הרצועה אולי תרצה לבנות תל קטן כדי להקל מאוחר יותר. כשעובדים עם הרצועה, עשו זאת במהירות ונסו לא להקדיש זמן רב להחלת חום על הרצועה. עשה רק מה שאתה צריך לעשות כדי להמיס את הלחמה על העקבות. הלחמה חוט על כל עקבה עד סוף הרצועה הראשונה (הרצועה הראשונה היא זו עם החוטים והמחבר, הלחמה עד הקצה החשוף). אם תסתכל על הרצועה תראה עליו חיצים קטנים שעולים עד הסוף שבו הלחמת את החוט. קח רצועה נוספת כך שהחיצים מצביעים בכיוון ההפוך, והלחמ את החוט שמגיע ממעקב ה- GND למעקב ה- GND של האחר, ה- +5V ל- +5V וכן הלאה. חזור על פעולה זו וודא שהחיצים מחליפים כיוון לאחר כל קטע, כך שאם היית עוקב אחריהם הוא היה בזיג זג למעלה ולמטה, וכי ניתן למתוח אותו עד על רצועה ארוכה בסופו. לאחר שכל 14 הרצועות מולחמו, הניחו אותן וצידו בשורה כך שהנוריות יוצרות רשת. לאחר מכן שמור אותם יחד בשיטה הניתנת להסרה מאוחר יותר ללא פגיעה ברצועה. השתמשתי בסקוטייפ. זה דביק מספיק כדי לשמור על הכל ביחד אבל לא דביק עד כדי להשאיר שאריות. אני לא ממליץ על דבר קבוע, כמו סיכות או נייר דבק. לאחר שהכל הודבק יחד הלחמו חוט מהרצועה שבתחתית +5V לזה שלידו. חזור על הפעולה עד שלחלק התחתון כולו ברזי הכוח עוברים עד הסוף. זאת על מנת שהמסך לא יתעמעם עם התקדמות קו הלדים.
שלב 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. כעת קח את חוטי הפלט של וסת המתח והלחם שתי חתיכות חוט הן בקצות החיוביים והן בשליליות כך שיצאו בצורה Y. הלחם מחבר דו פיני לחוטים החיוביים והשליליים של מכלול רצועות הלדים. זה לא משנה באיזה סוג מחבר אתה משתמש, זה יכול להיות JST או במקרה שלי כבל חשמל/שמע או משהו (אני לא בטוח, ואני מתנצל על כך שאין לי תמונות). הלחם אחד מחוטי החשמל החיוביים לקצה החיובי של המחבר הנגדי עבור רצועת האור ואחד החוטים השליליים לסיכה השנייה במחבר. בצע את אותו הדבר, אך עבור מכלול מחבר/חוט JST זכר. כל הזמן זכור לבודד את מפרקי הלחמה כדי להימנע מקצרים. עכשיו מה לעשות עם מחבר USB B. הלחם את החוט החיובי לחור של 5V ב- Arduino Pro Mega. קח את חוט הארקה והלחם אותו לחור GND. קח את D+ והלחם אותו לפין הדיגיטלי (או במקרה זה, חור) 40. הלחמה D- לסיכה אנלוגית 15. הלחמי את קצה הנתונים של המחבר הנקבי המתאים למחבר הזכר של רצועת ה- LED אל פין הנתונים 6 ו חוט הארקה לסיכת GND. מיסוך או סרט סקוטי עובדים מצוין להחזקת החוטים בלוח כך שהם לא ייפלו כשהם מתהפכים להלחמה. כעת קח כפתור רגע והלחם חוט מקצה אחד אל סיכת ה- VCC (או כל סיכת פלט מתח) והקצה השני לסיכה RESET.
שלב 5: בקר
ראשית, בחירת הצורה הנכונה להתחיל איתה. הכל תלוי איך אתה רוצה שהבקר יהיה מובנה. רציתי יותר של בקר שטוח אז קיבלתי חתיכה של קרש בגודל 3 1/2 "על 3/4". לסדר את החלקים בצורה שנראית מתאימה ונוחה לעבודה. השתמש בעקומה צרפתית, מצפן, משולש וקצה ישר כדי לצייר לאן כל החלקים צריכים להגיע. גזור את המתאר הבסיסי באמצעות כלי החיתוך שבחרת. מסור איסור יהיה הכי טוב אבל השתמשתי במסור התמודדות, שעבד מצוין. משייפים את הקצוות כדי שהמעבר שלהם יהיה חלק, ואז משייפים את הפינות כדי שיהיה נוח יותר. לקדוח את החור למתג, ולאחר מכן חול, אזמל ו/או דרמל החוצה כל חלק בתחתית שיגרום לו להתאים. נסה לא לעשות כלום עם החלק העליון ורק לשייף את מה שאתה צריך כדי להיות מסוגל להתאים אותו על ידי סיבוב, זווית או כל דבר אחר כדי לגרום לו להיכנס פנימה. ברגע שהוא מחובר אותו עם אגוז הפלסטיק והצמד את החלף. מקדחים את האזור כך שידית הפוטנטיומטר תשתלב ותעזור אזור כך שהוא יכול לשקוע ולהתאים לאורך כל הדרך. קדחו כמה חורים כדי שבורג יוכל להחזיק אותו פנימה. כופפו את החלקים הקטנים של מחבר ה- USB A שגורם לרוחבו הכללי להגדיל מעט (תראו את התמונות). עצל חלק למחבר ובדוק בהדרגה כדי לוודא שהמחבר מתאים. הדבק את המחבר סופר בחריץ שלו. קח פיסת פלסטיק קטנה וחתוך אותה לצורה שתתאים מעל המחבר (תסתכל על התמונות), ולאחר מכן הידוק אותה על העץ. חותכים את כל החלקים שעלולים להפריע. הברג את הפוטנציומטר והצמד את הכפתור. הלחם את החוט החיובי לאחד מקצות הפוטנציומטר (לא החלק המשתנה) ואת החוט השלילי לקצה הנגדי. הלחם את סיכת ה- D לסיכה המשתנה בסיר. הלחמה חוט מהסיכה על הסיר עם החוט החיובי לאחד הפינים בכפתור. הלחמה D+ לסיכה השנייה בכפתור. חתכו את החוט הרזרבי ובידדו את החלקים הדרושים לו.
שלב 6: חולצה
מצאו חולצה נוחה שתאפשר לאור לעבור. בחרתי בחולצת טריקו לבנה בסיסית זו. זה לא ממש משנה את הצבע או הסגנון כל עוד ניתן לראות את האור זורח מבפנים. עם זאת אני לא ממליץ על גרפיקה בחזית. שים הכל על החולצה כדי לעזור לך להחליט היכן אתה רוצה אותה והשתמש בכלי סימון למחיק כדי לצייר אותה. לי (כלומר כמה אנשים שאני מכיר) יש עיפרון שנועד לסמן בדים שנשטפים בקלות. מדוד את גודל הסוללות, מארז הבקר והמסך וגזור פיסות נייר שיתאימו. לאחר מכן מהדקים את הנייר לפיסת בד שאינו נמתח. מארג עובד טוב בשביל זה. לאחר מכן חותכים מלבן ומשאירים כרבע אינץ 'לתפר לאורך כל הדרך. לאחר מכן באמצעות פיסת הנייר כמגהץ מדריך את הקפלים לתוך הבד. כעת ניתן להסיר את הנייר. בחלקו של הכיס שיהיה העליון יש לקפל אותו שלוש פעמים בעצמו. מגהצים ומצמידים אותו כדי לשמור אותו במקום. לתפור מראה לאורך כל הדרך באמצע הקפל. עכשיו קחו את הפינה וקפלו אותה כך שהקצוות הלא תפורים בניצב זה לזה יהיו מקבילים ותופרים מראה לאורך הקפל המגוהץ הקרוב ביותר לפינה (התמונות ממש עוזרות). עשה זאת גם לפינה השנייה. אם יתכן שיהיה לך מתג מתג שיוצא מהכיס, תפר חור כפתור בבסיס הכיס בו המתג נוגע. לאחר מכן תפרו חור כפתור וחתכו את החלק האמצעי. אני לא ממש יכול לתת הוראות מפורטות כי היה לי כלי מגניב ליצור חורי כפתורים. רק הקפד שתעשה את החורים לפני שהכיס נתפר. קח כמה סיכות ודחף אותן דרך החולצה בפינות הסימון לכיס. קח את הכיס והנח כל פינה לסיכה (בחלק הפנימי של החולצה), והשאיר רבע סנטימטר לתפר, והצמד אותה לחולצה. לאחר שהכיס הוצמד. הסר את הסיכות שאינן מחזיקות את הכיס פנימה ותפר את הכיס לחולצה. חזור על כל הכיסים. לכיס הגדול שמחזיק את המסך השאירו פער לחוטים בתחתית הכיס. כדי לשים חור בחולצה מסמנים את המקום ולוקחים מגהץ על הגב (עם החלק המבריק יותר על הבד) ומגהצים אותו. ואז, עבור חור קטן (כמו מה שהשתמשתי בו למתג המתג), צור חור כפתור. לחור גדול יותר, סמן את המתאר והשתמש בתפר זיגזג לאורך הקו (או עקומה או מה יש לך) וחתך את החלק האמצעי. אם אתה רוצה אתה יכול להשתמש בכתפיות כדי להחזיק את משקל הכיסים, שני הקליפים המחזיקים בכיסים בחזית והקליפ האחורי על המכנסיים. קיבלתי גם שרוול קטן של בד שנתפר על חלקי הכתפיות שיגעו בעור שלי. שתי חולצות יכולות להתחמם מעט מדי אז בחרתי בהרשמה והשתמשתי בשרוול הבד הקטן.
שלב 7: תכנות
והנה הקוד. ישנם כמה חלקים המוערכים היטב אך הרוב המכריע אינו. אם יש לך שאלות על חלקים שונים אתה יכול לתת לי את מספר השורה (עם #כלול כשורה מספר אחת) או לתת לי עותק של השורות והפונקציה שבה הוא שוכן (כמו לולאה () או compMovePaddle ()) ואני אעשה כמיטב יכולתי להסביר לך זאת, ואז להוסיף הערה לקוד המסביר זאת. #include #define PIN 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; int bhp = 6; // בודק אם הכדור במצב מהיר מהיר בוליאני = שקר; // בודק אם מדובר בציון. cIsPoint בוליאני = false; pIsPoint בוליאני = false; // עמדות ההנעה int cPaddle = 0; int pPaddle = 0; long previousMillis = 0; long previousMillisForComp = 0; // הגדר את זמני העיכוב של הכדור המהיר והאיטי ה"אינט "ב- normInt ו- fastInt הוא עבור אינטרוול int normInt = 50; int fastInt = 10; // השתמשו בבדיקת זכייה. 1 הוא ניצחון שחקן, -1 בניצחון מחשב, ו -0 שום דבר לא קרה עדיין int int = 0; // להיפטר מבאג. משמש בהצהרת addOne ובשום מקום אחר. int אשר = 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}; // אם אתה מנצח int youWin = {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}; // אם אתה מאבד int youLose = {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 לקלט, מתחילה את הרצועה, מציגה את ההודעה // ומציגה אותה. הגדרת void () {pinMode (buttonPin, INPUT); strip.begin (); עבור (int i = 0; pongPlay > 0; i ++) {strip.setPixelColor (pongPlay , strip. Color (0, 0, 255)); } strip.show (); עיכוב (5000); while (digitalRead (buttonPin) == LOW) {// זה מלכודת! (עד ללחיצה על הכפתור.)}} לולאת void () {clearScreen (); // מצייר את המשוטים כדי להציג את הציון עבור (int i = 0; i <5; i ++) {if (playerScore == 1) {strip.setPixelColor (204-i, strip. Color (255, 255, 255)); } אחרת אם ((playerScore == 0)) {strip.setPixelColor (204-i, strip. Color (0, 255, 0)); } if (compScore == 1) {strip.setPixelColor (5+i, strip. Color (255, 255, 255)); } אחרת אם ((compScore == 0)) {strip.setPixelColor (5+i, strip. Color (255, 0, 0)); }}} // מצייר את הכדור במיקום ההתחלה שלה strip.setPixelColor (98, strip. Color (255, 255, 255)); strip.show (); // מחליט אם הכדור עולה או יורד בזמן (pIsPoint == false && cIsPoint == false) {clearScreen (); current Signillial millis = millis (); // מקצה את מיקום ההנעה של השחקן pPaddle = checkPaddlePos (); // בודק את המיקום הבא checkNext (); // הזזת הכדור אם (fast == false) {if (currentMillis - previousMillis> normInt) {previousMillis = currentMillis; moveBall (); }} אחרת אם (fast == true) {if (currentMillis - previousMillis> fastInt) {previousMillis = currentMillis; moveBall (); }}} // צייר את הכדור אם (bhp%2! = 0) {strip.setPixelColor (bhp*15+14-bvp, strip. Color (255, 255, 255)); } אחרת אם (bhp%2 == 0) {strip.setPixelColor (bhp*15+bvp, strip. Color (255, 255, 255)); } // // תנועת משוט מחשב compMovePaddle (); // draw's the paddles drawPaddles (); // בעצם העלו הכל.strip.show (); // בודק אם נקלעה נקודה אם (pIsPoint == true) {which = 0; bhd = 0; addOne (); לשבור; } אחר אם (cIsPoint == true) {which = 1; bhd = 1; addOne (); לשבור; }} if (win == 1) {clearScreen (); for (int i = 0; youWin > 0; i ++) {strip.setPixelColor (youWin , strip. Color (255, 0, 0)); strip.show (); } עיכוב (5000); עבור (int i = 0; i <5; i ++) {playerScore = 0; compScore = 0; } win = 0; } אחרת אם (win == -1) {clearScreen (); for (int i = 0; youLose > 0; i ++) {strip.setPixelColor (youLose , strip. Color (0, 255, 0)); strip.show (); } עיכוב (5000); עבור (int i = 0; i <5; i ++) {playerScore = 0; compScore = 0; } win = 0; } pIsPoint = false; cIsPoint = false; bvp = 8; bhp = 6; bvd = אקראי (0, 2); // 0 למטה, 1 למעלה מהר = שקר; } // AI עבור המשחק void compMovePaddle () {unsigned long currentMillis = millis (); if (currentMillis - previousMillisForComp> 51) {previousMillisForComp = currentMillis; if (bvp> = 13 && 10-cPaddle 0) {cPaddle--; } אחרת אם (bvp = 0 && cPaddle <10) {cPaddle ++; } אחרת אם (bvp-3> 10-cPaddle && 10-cPaddle> = 0 && cPaddle> 0) {cPaddle--; } אחרת אם (bvp <10-cPaddle && 10-cPaddle <= 10) {cPaddle ++; }}}} // מזיז את הכדור חלל moveBall () {if (bhd == 0) {bhp--; } אחרת אם (bhd == 1) {bhp ++; } אם (bvd == 0) {bvp--; } אחר אם (bvd == 1) {bvp ++; }}} // מוסיף אחד למערך. אם אחד מהם הוא 0 זה מוסיף לציון השחקן. אם זה 1 זה מוסיף למחשבים void addOne () {if (which == 0) {// אם זה הציון של השחקן // הוסף אחד. זו הדרך הפשטנית שאני יודע כיצד. for (int i = 0; i <5; i ++) {// loop אם (playerScore == 0) {// אם ערך זה הוא אפס playerScore = 1; // הפוך אותו לשבירה אחת; // ואז לך משם} אחר {// אם זה 1 playerScore = 0; // הפוך אותו לאפס ולולאה}}} אחר אם (which == 1) {עבור (int i = 0; i <5; i ++) {if (compScore == 0) {compScore = compScore +1; לשבור; } אחר {compScore = 0; }}}} // בודק אם מישהו ניצח. אם (compScore [0] == 1 && compScore [2] == 1 && compScore [4] == 1) {win = -1; } אחרת אם (playerScore [0] == 1 && playerScore [2] == 1 && playerScore [4] == 1) {win = 1; }}} // בודק את הכדורים המיקום הבא void checkNext () {// בודקים אם נקלעה נקודה אם (bhp == 13) {pIsPoint = true; } אחרת אם (bhp == 0) {cIsPoint = true; } // אם נקלעה נקודה מאשר לדלג על שאר הדברים אם (pIsPoint == false || cIsPoint == false) {// בודק את הכדור אנכי אם (bvp+bvd == 15) {bvd = 0; } אחרת אם (bvp+bvd == 0) {bvd = 1; } // בודק את הכדור בצורה אופקית אם (bhp+bhd == 13) {// ראשון בצד המחשב אם (bvp> = 10-cPaddle && bvp <= 10-cPaddle+4) {if (bhd == 1) {bhd = 0; } אחרת אם (bhd == 0) {bhd = 1; } מהיר = שקר; } אחרת אם (bvp+bvd == 10-cPaddle || bvp+bvd == 10-cPaddle+5) {if (bvp! = 0 && bvp! = 14) {if (bvd == 0) {bvd = 1; } אחרת אם (bvd == 1) {bvd = 0; } bhd = 1; } אחרת אם (bvp == 0 || bvp == 14) {bhd = 1; } מהיר = שקר; }} אחרת אם (bhp+bhd == 1) {// אז בצד השחקן אם (bvp> = pPaddle && bvp <= pPaddle+4) {// האם הוא פוגע בהנעה במקום רגיל? //להקפיץ את הכדור! אם (bhd == 1) {bhd = 0; } אחרת אם (bhd == 0) {bhd = 1; }} אחרת אם (bvp+bvd == pPaddle || bvp+bvd-5 == pPaddle) {// האם זה פוגע בחבטה בפינה אם (bvp! = 0 && bvp! = 14) {// האם זה לא גבוה או למטה נמוך? //להקפיץ את הכדור! אם (bvd == 0) {bvd = 1; } אחרת אם (bvd == 1) {bvd = 0; } bhd = 1; מהיר = נכון; } אחרת אם (bvp == 0 || bvp == 14) {// האם הוא גבוה או נמוך? //להקפיץ את הכדור! bhd = 0; fast = true; // הגדר את הערך כדי לגרום לכדור לזוז מאוחר יותר}}}}} int checkPaddlePos () {// קורא את הסיר ומחליט על מיקום ההנעה בהתאם (analogRead (A15) <93) {החזר 0; } אחרת אם (analogRead (A15) <186) {החזרה 1; } אחרת אם (analogRead (A15) <279) {החזרה 2; } אחרת אם (analogRead (A15) <372) {החזרה 3; } אחרת אם (analogRead (A15) <465) {החזרה 4; } אחרת אם (analogRead (A15) <558) {החזרה 5; } אחרת אם (analogRead (A15) <652) {החזרה 6; } אחרת אם (analogRead (A15) <745) {החזרה 7; } אחרת אם (analogRead (A15) <837) {החזרה 8; } אחרת אם (analogRead (A15) <= 931) {החזרה 9; } אחרת אם (analogRead (A15) <= 2014) {החזרה 10; }} void drawPaddles () {// צייר את ההנעה במקום הנכון ומציג את הציון על ההנעה עבור (int i = 0; i <5; i ++) {if (playerScore == 1) {רצועה. setPixelColor (pPaddle+i, strip. Color (255, 255, 255)); } אחרת אם ((playerScore == 0)) {strip.setPixelColor (pPaddle+i, strip. Color (255, 0, 0)); } if (compScore == 1) {strip.setPixelColor (199+cPaddle-i, strip. Color (255, 255, 255)); } אחרת אם ((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)); } strip.show (); }
שלב 8: מוצר מוגמר
והנה, החולצה המוגמרת!
מוּמלָץ:
הכינו משחק פונג 1D משלכם: 5 שלבים (עם תמונות)
צור משלך פונג 1D משלך: לפרויקט זה אראה לך כיצד שילבתי לוח MDF עם כפתורי זמזם, נוריות LED וארדואינו ננו על מנת ליצור משחק פונג 1D שהוא ממש כיף לשחק בו. בדרך אראה לך כיצד ליצור את מעגל האלקטרוניקה וכיצד הוא משתנה
8x8 משחק פונג קולורדואינו: 3 שלבים
8x8 משחק פונג קולורדואינו: בהוראה זו אראה לך כיצד בניתי משחק פונג באמצעות מודול לוח מטריקס LED 8X8 RGB. מודול זה נקרא Colorduino. יש לו מיקרו -בקר מובנה וממשק לחיבור ללוחות Colorduino אחרים. יש לו את היכולת
Autodesk Tinkercad סימולציה של משחק פינג פונג ארדואינו UNO V2.0 :: 5 שלבים
Autodesk Tinkercad Simulation of Arduino UNO Ping Pong Game V2.0 :: שלום חבר'ה, במדריך זה תלמדו כיצד לדמות פינג פונג באתר Autodesk Tikercad באמצעות לוח הפיתוח של Arduino UNO. לחץ על קישור YouTube זה לצפייה בסרטון ההדמיה
8x16 LED מטריקס פונג משחק (2 משוטים לגרסת שחקן): 3 שלבים
8x16 LED מטריקס פונג משחק (2 משוטים לגרסת שחקן): קיבלתי השראה מהרבה וריאציות של משחק הפונג הקלאסי המיושם על Arduino תוך שימוש במטריצת LED 8x8. במדריך זה אראה לך כיצד לבנות את גרסת הפונג האהובה עלי הכוללת שתי משוטים - חלוץ ושוער - לשחקן
משחק פונג: 6 שלבים
משחק פונג: חומרים: Basys3 FPGA לוח VGA כבל ויוואדו מטרתו של הוראה זו היא לפתח משחק פונג שיוצג על צג. הפרויקט ישתמש ב- VHDL לתכנות ומשתמש ב- Basys3 FPGA לביצוע הקוד ומעביר את התמונה אלינו