תוכן עניינים:

לחצני Plug and Play ארקייד: 7 שלבים (עם תמונות)
לחצני Plug and Play ארקייד: 7 שלבים (עם תמונות)

וִידֵאוֹ: לחצני Plug and Play ארקייד: 7 שלבים (עם תמונות)

וִידֵאוֹ: לחצני Plug and Play ארקייד: 7 שלבים (עם תמונות)
וִידֵאוֹ: Leap Motion SDK 2024, נוֹבֶמבֶּר
Anonim
לחצני Plug and Play ארקייד
לחצני Plug and Play ארקייד

לאחרונה התחלתי להשתמש ב- Arduino כדי ליצור את הפרויקטים שלי. כמעצב אני אוהב ליצור ממשקים בהתאמה אישית למשחקים/פרויקטים אינטראקטיביים שלי.

הבעיה היחידה שנתקלתי בה בשימוש בתקשורת סדרתית היא די מסובכת ונוטה לבעיות ובאגים ורציתי פתרון מהיר וקל לאפשר לי להשתמש בכפתורים חיצוניים לשליטה במשחקים שלי.

מכיוון שרציתי מכשיר plug and play שניתן להשתמש בו מיד עם כל מחשב, קניתי ארדואינו לאונרדו. זה כמעט זהה ל- Uno, אבל עם כמה הבדלים. ההבדל העיקרי בו אשתמש לטובתי לפרויקט זה הוא היכולת לפעול כמסתור. מכשיר HID או ממשק אנושי הוא פרוטוקול USB המאפשר למחשב שלך לזהות ולקבל קלט ממקלדות ועכבר מחשב מבלי להתקין מנהלי התקנים מותאמים אישית עבור כל התקן.

הערה: תוכל גם להשתמש ב- Uno, אם אתה מעדכן את הקושחה, כפי שמוצג כאן.

שלב 1: חומרים

לפרויקט זה תזדקק ל:

1x מיקרו -מסוגל HID (יש כמה כמו Arduino micro, Due & leonardo, אני אשתמש ב- Arduino Leonardo)

1x כבל USB לארדואינו (עבור לאונרדו זה מיקרו USB)

3x לחצני ארקייד (קניתי כאלה)

1x קרש לחם ללא הלחמה

נגדים 3x 10k אוהם

נגדים 3x 220 אוהם

חוטי מגשר

אתה יכול כמובן להוסיף עוד כפתורים, או להלחם הכל ללוח לחם כדי להפוך את הדברים לקבועים יותר.

שלב 2: אבות טיפוס

אב טיפוס
אב טיפוס
אב טיפוס
אב טיפוס
אב טיפוס
אב טיפוס

אז לפני שקניתי את כפתורי הארקייד שרציתי להשתמש בדקתי את זה עם כפתורי לחיצה סטנדרטיים. חבר את הכפתורים בצורה הסטנדרטית, אני מאמין שהשתמשתי בנגדים של 10K אוהם.

התכנות, הודות לאונרדו, הוא די פשוט. עליך לכלול את ספריית המקלדת. השתמשתי בדוגמה הסטנדרטית של Arduino "הודעת מקלדת" כבסיס לקוד שלי.

עכשיו השאלה היא איך אתה רוצה שהכפתורים שלך יפעלו. בעצם יש לך שתי אפשרויות, לחיצות על כפתורים בודדים וזרם רציף של אותיות אם לוחצים עליה. זה מאוד תלוי בפרויקט שלך מה אתה רוצה.

אם אתה רוצה מופע יחיד של משהו שיקרה אם תלחץ על מקש, כמו קפיצה או מתג הפעלה/כיבוי, היית בוחר בשיטת הדחיפה היחידה. בשיטה זו אתה מסתכל על מצב הכפתור, האם הוא למעלה או למטה? ואז אתה משווה את זה למצב הקודם, זה כבר היה למעלה או למטה? אם מצב הלחצן הקודם זהה למצב הלחצן הנוכחי לא קורה דבר. אבל אם מצב הלחצן משתנה, כמו שאתה לוחץ או משחרר כפתור משהו קורה. בקוד שלי הוא מקליד אות רק כאשר הכפתור נלחץ, לא כאשר משחררים אותו אך תוכל לשנות זאת.

#כלול "Keyboard.h"

const int buttonLeft = A0; // סיכת קלט ללחצן לחיצה

const int buttonRight = A1; const int buttonUp = A2;

int previousButtonStateLeft = HIGH; // לבדיקת מצב הלחצן pushButton

int previousButtonStateRight = HIGH; int previousButtonStateUp = HIGH;

הגדרת בטל () {

// הפוך את סיכת pushButton לכניסה: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // לאתחל את השליטה במקלדת: Keyboard.begin (); }

לולאת חלל () {

// קראו את הלחצן: int buttonStateLeft = digitalRead (buttonLeft); // אם מצב הלחצן השתנה, אם ((buttonStateLeft! = previousButtonStateLeft) // והוא נלחץ כרגע: && (buttonStateLeft == HIGH)) {// הקלד הודעה Keyboard.print ("a"); } // שמור את מצב הלחצן הנוכחי להשוואה בפעם הבאה: previousButtonStateLeft = buttonStateLeft;

// קרא את כפתור הלחיצה:

int buttonStateRight = digitalRead (buttonRight); // אם מצב הלחצן השתנה, אם ((buttonStateRight! = previousButtonStateRight) // והוא נלחץ כרגע: && (buttonStateRight == HIGH)) {// הקלד הודעה Keyboard.print ("w"); } // שמור את מצב הלחצן הנוכחי להשוואה בפעם הבאה: previousButtonStateRight = buttonStateRight;

// קרא את כפתור הלחיצה:

int buttonStateUp = digitalRead (buttonUp); // אם מצב הלחצן השתנה, אם ((buttonStateUp! = previousButtonStateUp) // והוא נלחץ כרגע: && (buttonStateUp == HIGH)) {// הקלד הודעה Keyboard.print ("d"); } // שמור את מצב הלחצן הנוכחי להשוואה בפעם הבאה: previousButtonStateUp = buttonStateUp; }

אם אתה רוצה שמשהו יקרה ברציפות כל עוד הכפתור נלחץ, כפי שהיית רוצה לתנועה שמאלה או ימינה, פשוט תן לו לכתוב מכתב מבלי לבדוק את מצב הכפתור הקודם. זכור להוסיף עיכוב קטן כדי למנוע מהטירוף ולמנוע כל הקפצה שעלולה להיות בכפתורים שלך. ישנן דרכים אלגנטיות יותר לפתור בעיה זו, אך זה קל ומהיר.

#כלול "Keyboard.h"

const int buttonLeft = A0; // סיכת קלט ללחצן לחיצה

const int buttonRight = A1; const int buttonUp = A2;

הגדרת בטל () {

// הפוך את סיכת pushButton לכניסה: pinMode (buttonLeft, INPUT); pinMode (buttonRight, INPUT); pinMode (buttonUp, INPUT); // לאתחל את השליטה במקלדת: Keyboard.begin (); }

לולאת חלל () {

// קראו את הלחצן: int buttonStateLeft = digitalRead (buttonLeft); if (buttonStateLeft == HIGH) // אם לוחצים על הלחצן {// הקלד הודעה Keyboard.print ("a"); עיכוב (50); // עיכוב בהקפצה ותאפשר למחשב להתעדכן}

// קרא את כפתור הלחיצה:

int buttonStateRight = digitalRead (buttonRight); if (buttonStateRight == HIGH) // אם לוחצים על הלחצן {// הקלד הודעה Keyboard.print ("w"); עיכוב (50); // עיכוב בהקפצה וניתן למחשב להתעדכן}

// קרא את כפתור הלחיצה:

int buttonStateUp = digitalRead (buttonUp); if (buttonStateUp == HIGH) // אם לוחצים על הלחצן {// הקלד הודעה Keyboard.print ("d"); עיכוב (50); // עיכוב בהקפצה ותאפשר למחשב להתעדכן}}

אתה תמיד יכול להשתמש בשילוב של שתי השיטות, בהתאם למה שמתאים ביותר לצרכים שלך.

שלב 3: חיתוך הלייזר במארז

חיתוך הלייזר במארז
חיתוך הלייזר במארז

במקרה השתמשתי ב- 3 מ"מ mdf, עם תוספת של 2 מ"מ פרספקס. הוספתי את הכנס מכיוון שאני רוצה להוסיף כמה נוריות בחלק הפנימי של המארז בשלב מאוחר יותר כדי שיהיה נעים וזוהר.

הזנתי את הממדים שלי כדי ליצור אותיות קטנות והורדתי את קובץ ה- svg. פתחתי אותו באילוסטרייטור והוספתי את החורים היכן שרציתי. אם אין לך Illustrator תוכל להשתמש ב- Inkscape לשלב זה.

אין צורך להשתמש בחותך לייזר כמובן, מכיוון שמדובר בקופסה פשוטה עם כמה חורים בתוכה. זה צריך להיות קל מספיק כדי ליצור אותו באמצעות כלי חשמל מסורתיים יותר (או אפילו כלי יד!) אני פשוט עצלן מאוד והיה לי גישה לחותך לייזר.

שלב 4: לחצני ארקייד הלחמה

לחצני ארקייד הלחמה
לחצני ארקייד הלחמה
לחצני ארקייד הלחמה
לחצני ארקייד הלחמה
לחצני ארקייד הלחמה
לחצני ארקייד הלחמה

כפתור ארקייד (או שלי לפחות) מורכב משלושה חלקים. מעטפת הפלסטיק, מחזיק הלד (עם LED בתוכו) ומתג המיקרו. מתג המיקרו הוא חלק הכפתור בפועל של הכפתור והוא מה שתצטרך לחבר ל- Arduino שלך. על מתג המיקרו ישנם שלושה מסופים (פיסות מתכת הבולטות, שבהן תלחם את החוטים שלך). זה למעלה (או למטה, מה שאתה רוצה) הוא הקרקע. שני המסופים האחרים הם Normal Open (NO) ו- Normal Closed (NC). NO אומר שאם לוחצים על המתג זה יוצר חיבור. NC פירושו שאם לחיצה על הכפתור היא מנתקת את החיבור. נשתמש ב- NO לפרויקט זה. כתבתי את הקרקע, NO ו- NC במתג המיקרו שלי בתמונות.

הכפתורים שלי מוארים אז הלחמתי חוטים למחזיק LED. הקפד לצבוע את החוטים שלך כך שתדע באיזה צד האנודה ואילו הקתודה (צדדים חיוביים ושליליים של ה- LED).

הלחמתי סיכות כותרת על החוטים שלי, כדי שיהיה קל לשימוש עם לוח לחם ללא הלחמה. פשוט הלחמתי את החוט לסיכת כותרת והכנסתי מעט צינורות כיווץ חום כדי להפוך אותם לעמידים יותר.

שלב 5: ערם את הכפתורים וחבר אותם ללוח שלך

ערם את הכפתורים וחבר אותם ללוח שלך
ערם את הכפתורים וחבר אותם ללוח שלך
ערם את הכפתורים וחבר אותם ללוח שלך
ערם את הכפתורים וחבר אותם ללוח שלך
ערם את הכפתורים וחבר אותם ללוח שלך
ערם את הכפתורים וחבר אותם ללוח שלך
ערם את הכפתורים וחבר אותם ללוח שלך
ערם את הכפתורים וחבר אותם ללוח שלך

עכשיו הגיע הזמן לערום את כפתורי הארקייד שלך במקרה שלך. הסר את טבעת הנעילה ממעטפת הפלסטיק והדבק אותה דרך החור במארז. השחילו את טבעת הנעילה בצד השני כדי להדק את הכפתור במקומו. הדבק את מחזיק הלד וסובב אותו כדי לנעול אותו במקומו. לטלטל בבוררי המיקרו (ישנם אצילים וחורים קטנים המתיישרים זה לזה כדי להחזיק אותו במקומו).

כדי לחבר את המתגים ללוח הסר את כפתורי הלחיצה שאולי הוספת או לא הוספת. חבר את החוט המוביל מקרקעית המתג המיקרו לקרקע הארדואינו והנגד (שם הייתה רגל כפתור הלחיצה). חבר את החוט המוביל מה- NO של מתג המיקרו ל- 5v של הארדואינו.

עבור חוטי ה- LED חבר את החוט השלילי לאדמה והחיובי באמצעות נגד 220OHM ל 5V. אם תחבר אותם כך הם תמיד יהיו דולקים. אתה יכול להוסיף אותם לקוד ולגרום להם להדליק ולכבות בסנכרון עם הכפתורים אם תרצה.

שלב 6: קידוד גיהנום

אז עכשיו חיברת את הכפתורים החדשים והמהודרים שלך לקוד הישן שלך ופתאום זה כבר לא עובד כמו שצריך. האותיות מופיעות שניים או שלושה בכל פעם וזה לא עובד כמו שצריך עם משחקי HTML5 פשוטים. ברוכים הבאים להתנתק מהגיהנום.

קודם כל. הקוד שכתבנו במהלך אב טיפוס? זה עובד מצוין ופשוט, אבל זה לא אלגנטי. אם אתה רוצה להוסיף לחצנים נוספים עליך להעתיק ולהדביק קטעי קוד ולשנות את כל הערכים שבתוכם. אם אתה שוכח אחד מהם אתה נכנס לגיהנום תיקון הבאגים. לזהות נושא כאן? קידוד הוא גיהנום, אבל גיהנום מאוד מהנה ופתרון בעיות.

אנחנו רוצים קוד יפה וקצר. אז נשנה את כל המספרים השלמים של הלחצנים למערכים. בדרך זו, אם ברצונך להוסיף לחצנים נוספים, עליך רק לשנות את כמות הכפתורים, את הפינים שבהם הם נמצאים ואת תפוקתם. אנו גם משנים את תשומות המפתח ל- ASCII מכיוון ש … זה עובד טוב יותר?

עכשיו אם אתה כמוני תכתוב דרך פשוטה וקלה להשתמש בכפתורים וזה לא יעבוד כמו שאתה רוצה. אז אתה יוצר גרסאות חדשות (זכור ילדים, גיבויים מצטברים!), נסה דברים שונים, כותב כל הזמן קוד מסובך יותר שעדיין לא עובד טוב ובסופו של דבר חוזר לקוד הפשוט שכתבת לפני שעות והבחין בשגיאה קטנה אשר מתקן הכל מיד.

תן לי לחסוך ממך את המסע הזה, הנה קוד העבודה:

כתב ויתור: טקסט זה נכתב לאחר שעות של קידוד ותיקון באגים של קוד פשוט מאוד. אנא התעלם מכל סימני תסכול והתמקד בקוד העבודה המפורסם להלן;)

#כלול "Keyboard.h"#כפתור הגדרה סכום 3

int buttonPin = {

A0, A1, A2}; // איפה הכפתורים? int asciiLetter = {97, 100, 119}; // אותיות ב- ASCII, כאן: a, d, w int buttonState [buttonAmount]; // האם הכפתור נלחץ או לא?

הגדרת בטל () {

for (int i = 0; i <buttonAmount; i ++) {// לעבור בין מערך pinMode (buttonPin , INPUT); // הגדר את כל הסיכות לקלט}}

לולאת חלל () {

for (int i = 0; i <buttonAmount; i ++) // לעבור בין המערך {buttonState = digitalRead (buttonPin ); // מה הכפתורים עושים? if (buttonState == HIGH) {// אם לוחצים על הלחצן Keyboard.press (asciiLetter ); // שלח את האות המתאימה} אחרת // אם הכפתור לא נלחץ {Keyboard.release (asciiLetter ); // שחרר את המכתב}}

}

שלב 7: הכל עובד

תהנה מהבקר המותאם אישית שלך plug & play!

אם אהבתם את ההנחיה הזו, אנא שקלו להצביע עבורי בתחרות!

מוּמלָץ: