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

Arduino ו- Touchpad Tic Tac Toe: 8 שלבים (עם תמונות)
Arduino ו- Touchpad Tic Tac Toe: 8 שלבים (עם תמונות)

וִידֵאוֹ: Arduino ו- Touchpad Tic Tac Toe: 8 שלבים (עם תמונות)

וִידֵאוֹ: Arduino ו- Touchpad Tic Tac Toe: 8 שלבים (עם תמונות)
וִידֵאוֹ: SKR Pro V1.1 - TMC2209 UART with Sensor less Homing 2024, יוני
Anonim
Arduino ו- Touchpad Tic Tac Toe
Arduino ו- Touchpad Tic Tac Toe

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

זהו יישום של משחק טיק טק באמצעות מערך 3x3 של נוריות דו -צבעוניות לתצוגה, לוח מגע התנגדות פשוט וארדואינו לקשור הכל יחד. כדי לראות איך זה עובד, צפה בסרטון: מה הפרויקט דורש: חלקים ומתכלים לוח אחד (או לוח רצועה) תשע נוריות דו-צבעוניות, קתודה נפוצה תשעה נגדים זהים, בטווח 100-220 אוהם שש נגדים זהים, ב טווח 10 קאוהם - 500 קאוהם מוט אחד, מתג זריקה כפול חבורה של סיכות כותרת חבורה של חוט חשמל גיליון מרובע אחד קטן של אקריליק שקוף, בעובי של 1 מ"מ, 8 ס"מ בצד סרט דביק שקוף חסימות חום (אופציונלי) כל האמור לעיל הם פריטים נפוצים למדי, העלות הכוללת לא תעלה על 20 דולר ארה"ב. התקנת כלים אחת של Arduino (Arduino Duemilanove, Arduino IDE, מחשב, כבל USB) כלים חשמליים רגילים (מולטימטר, אקדח הלחמה, חותכות תיל, חותך תיל) כל מה שקשור לארדואינו יכול להיות נמצא בכתובת https://www.arduino.cc. המשך לבנייה!

שלב 1: חיווט מטריצת ה- LED

חיווט מטריצת ה- LED
חיווט מטריצת ה- LED
חיווט מטריצת ה- LED
חיווט מטריצת ה- LED

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

שלב 2: פריסת מטריקס LED

פריסת LED מטריקס
פריסת LED מטריקס
פריסת LED מטריקס
פריסת LED מטריקס

תרשים המעגלים להלן מראה כיצד נוריות ה- LED מחוברות פיזית (G1-G9: נוריות ירוקות, R1-R9: נוריות אדומות). תרשים זה מיועד לנורות אדומות וירוקות בודדות, אם אתה משתמש נוריות קתודה נפוצות בצבע אדום/ירוק, יש רק רגל קתודה אחת לכל זוג אדום/ירוק שאתה צריך לחבר. קווי האנודה האדומים והירוקים נכנסים לסיכות PWM של הארדואינו (סיכות 3, 5, 6, 9, 10, 11 בדואמילנוב), כך שנוכל לקבל השפעות כמו דהייה בהמשך. קווי הקתודה נכנסים לסיכות 4, 7 ו -8 לכל אחד מהקתודות והאנודה יש 100 נגדי אוהם להגנה.

שלב 3: פנייה למטריצת LED

עבור קוד הטיק טיק, נצטרך להיות מסוגל לאחסן את המידע הבא אודות הנורות: - האם נורית מוארת או לא - אם היא דולקת, אם היא אדומה או ירוקה דרך אחת לעשות זאת היא לאחסן את המדינה במערך בן 9 תאים, באמצעות שלוש ספרות לייצוג המצב (0 = כבוי, 1 = אדום מופעל, 2 = ירוק מופעל). בכל פעם שנצטרך לבדוק את מצבי הנורית, למשל, כדי לבדוק אם יש מצב לזכות, נצטרך לעבור בין המערך. זוהי שיטה מעשית, אך די מסורבלת. שיטה יעילה יותר תהיה שימוש בשתי קבוצות של תשע סיביות. הקבוצה הראשונה בת תשעה סיביות שומרת את מצב ההדלקה של נוריות הלדים, והקבוצה השנייה בת תשעה סיביות מאחסנת את הצבע. לאחר מכן, מניפולציה של מצבי ה- LED פשוט הופכת לעניין של קצת אריתמטיקה והזזה. להלן דוגמה מעובדת. נניח שאנחנו מציירים את רשת הטיק טק שלנו בצורה גרפית, ומשתמשים לראשונה ב -1 ו -0 כדי לייצג את מצב ההדלקה (1 פועל, 0 כבוי): 000 000 = מטריצה עם LED תחתון שמאלי תחתון 100 100 010 = מטריצה עם אלכסון נוריות LED דולקות 001 אם נספור את התאים מצד שמאל למטה, נוכל לכתוב את הייצוגים הנ ל כסדרה של ביטים. במקרה הראשון, זה יהיה 100000000, ובמקרה השני, זה יהיה 001010100. אם נחשוב על אלה כעל ייצוגים בינאריים, אז ניתן לסכם כל סדרת ביטים למספר בודד (256 במקרה הראשון, 84 במקרה השני). אז במקום להשתמש במערך לאחסון מצב המטריצה, נוכל פשוט להשתמש במספר בודד! באופן דומה, אנו יכולים לייצג את צבע הנורית באותו אופן (1 הוא אדום, 0 הוא ירוק). נניח תחילה שכל הנורות דולקות (כך שמצב ההדלקה מיוצג על ידי 511). המטריצה להלן תייצג את מצב הצבע של הלדים: 010 ירוק, אדום, ירוק 101 אדום, ירוק, אדום 010 ירוק, אדום, ירוק עכשיו, כאשר מציגים את מטריצת ה- LED, עלינו פשוט לעבור בין כל אחד מהביטים, תחילה במצב ההדלקה ולאחר מכן במצב הצבע. לדוגמה, נניח כי מצב ההדלקה שלנו הוא 100100100, ומצב הצבע הוא 010101010. להלן האלגוריתם שלנו להדלקת מטריצת ה- LED: שלב 1. בצע הוספה bitwise של מצב ההדלקה עם 1 בינארי (כלומר ביט מִסוּך). שלב 2. אם זה נכון, הנורית דולקת. בצעו כעת הוספת סיביות של מצב הצבע בינארי 1. שלב 3. אם זה נכון, הדליקו את הנורית האדומה. אם זה לא נכון, הדליק את הנורית הירוקה. שלב 4. העבר את מצב ההדלקה ואת מצב הצבע, קצת ימינה (כלומר הזזת סיביות). שלב 5. חזור על שלבים 1 - 4 עד שכל 9 הסיביות נקראו. שים לב שאנו ממלאים את המטריצה לאחור - אנו מתחילים בתא 9, ואז ממשיכים חזרה לתא 1. כמו כן, מצבי ההדלקה והצבע מאוחסנים כסוג שלם (מילה) לא חתום במקום סוג שלם חתום. הסיבה לכך היא שבשינוי ביט, אם לא נזהר, אנו עשויים לשנות בטעות את סימן המשתנה. מצורף הקוד להארת מטריצת ה- LED.

שלב 4: בניית לוח המגע

בניית לוח המגע
בניית לוח המגע
בניית לוח המגע
בניית לוח המגע
בניית לוח המגע
בניית לוח המגע
בניית לוח המגע
בניית לוח המגע

לוח המגע בנוי מדף של אקריליק דק, גדול מספיק כדי לחפות על מטריצת ה- LED. לאחר מכן, הדביקו את חוטי השורה והעמודה על הגיליון האקרילי, בעזרת סרט שקוף. סרט שקוף משמש גם כמרווח הבידוד בין החוטים, בצמתים. הקפד להשתמש בכלים נקיים, כדי למנוע גריז אצבע על הצד הדביק של הקלטת. כתמי טביעת אצבע לא רק נראים מכוערים, אלא גם גורמים לקלטת להיות פחות דביקה. לקצץ קצה אחד של כל אחד מהקווים ולהלחם את הקצה השני לחוט ארוך יותר. הלחם נגד בשרשור עם החוטים, לפני הלחמה על מחברים. הנגדים המשמשים כאן הם 674k, אך כל ערך בין 10k ל- 1M אמור להיות בסדר. החיבורים לארדואינו מבוצעים באמצעות 6 הפינים האנלוגיים, כאשר סיכות 14-16 מחוברות לשורות רשת החוט, וסיכות 17-19 מחוברות ל- העמודות.

שלב 5: לוח המגע - איך זה עובד

לוח המגע - איך זה עובד
לוח המגע - איך זה עובד
לוח המגע - איך זה עובד
לוח המגע - איך זה עובד

בדיוק כפי שהשתמשנו במכפיל קרוס -רוחבי כדי להגדיר מטריצת LED עם סיכות מינימליות, אנו יכולים להשתמש במכפיל -רוחב דומה כדי להקים מערך חיישן מגע, שאנו יכולים להשתמש בו לאחר מכן כדי להפעיל את הלדים. הרעיון של משטח המגע הזה הוא פשוט. זהו בעצם רשת תיל, עם שלושה חוטים חשופים העוברים בשורות, ושלושה חוטים חשופים פועלים בעמודות מעל השורות. בכל נקודת חיתוך ריבוע בידוד קטן שמונע משני החוטים לגעת. אצבע הנוגעת בצומת תיצור מגע עם שני החוטים, וכתוצאה מכך תהיה התנגדות ענקית אך סופית בין שני החוטים. לפיכך ניתן לגרום לזרם קטן, אך ניתן לזיהוי, לזרום מחוט אחד למשנהו, באמצעות האצבע. כדי לקבוע איזו צומת נלחצה, נעשה שימוש בשיטה הבאה: שלב 1: הגדר את כל קווי העמודות ל- OUTPUT LOW. שלב 2: הגדר את שורות השורות ל- INPUT, כאשר המשאבים הפנימיים מופעלים. שלב 3: קח קריאה אנלוגית בכל שורת שורה עד שהערך יורד מתחת לסף נתון. זה אומר לך באיזו שורה הצומת הנלחץ הוא. שלב 4: חזור על שלבים 1-3, אך כעת עם העמודות ככניסות והשורות כפלט. זה אומר לך איזו עמודה הצומת הנלחץ הוא. כדי למזער את ההשפעות של רעש, מספר קריאות נלקחות ולאחר מכן ממוצע. התוצאה הממוצעת מושווה לאחר מכן לסף. מכיוון ששיטה זו בודקת רק מול סף, היא אינה מתאימה לאיתור לחיצות בו זמנית. עם זאת, מכיוון ש- tic tac toe ממשיכה בתורות, די בקריאת לחיצה אחת בלבד. מצורפת סקיצה הממחישה כיצד לוח המגע עובד.

שלב 6: חיבור הכל ביחד

לחבר הכל ביחד
לחבר הכל ביחד

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

שלב 7: תכנות Tic Tac Toe

מצורף הקוד למשחק. בואו נפרק לראשונה את משחק הטיק טק לשלביו השונים, במצב שני השחקנים: שלב 1: שחקן א בוחר תא לא מלא על ידי נגיעה בצומת. שלב 2: נורית התא של התא ההוא נדלקת עם הצבע A. שלב 3: בדוק אם שחקן A זכה. שלב 4: שחקן ב 'בוחר תא לא מלא. שלב 5: הנורית של התא ההוא נדלקת בצבע B שלב 6: בדוק אם שחקן ב 'זכה. שלב 7: חזור על 1-6 עד שיהיה תנאי ניצחון, או אם כל התאים מלאים. קריאת התאים: התוכנית לולאה בין קריאת הרשת להצגת מטריצת ה- LED.. כל עוד חיישן הרשת אינו רושם ערך שאינו אפס, הלולאה הזו תימשך. כאשר לוחצים על צומת, המשתנה Pressed מאחסן את המיקום של התא הנלחץ. בודקים אם התא אינו מלא: כאשר מתקבלת קריאת מיקום (משתנה Pressed), הוא מושווה מול מצב התא הנוכחי (המאוחסן במשתנה GridOnOff) באמצעות תוספת חכמה. אם התא בלחיצה אינו מלא, המשך להדליק את הנורית, אחרת חזור לקריאת התאים. מתיחת הצבעים: משתנה בוליאני, Turn, משמש לתיעוד תורו. צבע הלד שנבחר בעת בחירת תא נקבע על ידי משתנה זה המתחלף בכל פעם שנבחר תא. בדיקת מצב win: ישנם רק 8 תנאי זכייה אפשריים, ואלו מאוחסנים כמשתני מילים במערך (winArray). שתי תוספות סיביות משמשות להשוואת עמדות התא המלאות של השחקן לתנאי הניצחון. אם יש התאמה, התוכנית מציגה שגרת ניצחון, ולאחר מכן היא מתחילה משחק חדש.בדיקת תנאי תיקו: כאשר נרשמו תשע סיבובים ועדיין אין תנאי ניצחון, המשחק הוא תיקו. לאחר מכן הנורות נמוגות ומתחיל משחק חדש. מעבר למצב שחקן אחד: אם המתג נמצא במצב מופעל, התוכנית עוברת למצב שחקן אחד, כאשר השחקן האנושי מתחיל תחילה. בסוף תורו של השחקן האנושי, התוכנית פשוט בוחרת תא אקראי. ברור שזו לא האסטרטגיה החכמה ביותר!

שלב 8: הערות ושיפורים נוספים

לפניכם סרטון המציג את מצב הנגן היחיד, כשהתוכנית משחקת מהלכים אקראיים לחלוטין: התוכנית המוצגת כאן היא גרסה מינימלית וחפה בלבד. אפשר לעשות הרבה דברים אחרים עם זה: 1) הדלקת נוריות שלוש בכל פעם הקוד הנוכחי מציג רק נורית אחת בבת אחת. עם זאת, עם החיווט המוצג כאן, ניתן להאיר את כל נוריות ה- LED המחוברות לקו קתודה אחד בו זמנית. לכן, במקום לרכוב על כל תשע העמדות, כל שעליך לעשות הוא לעבור בין שלושת קווי הקתודה. הִבהוּב. באמצעות הפרעות, ניתן לשלוט בתזמון של נוריות ה- LED בצורה מדויקת ויוביל לתצוגה חלקה יותר. מקווה שאתה נהנה לקרוא את זה כמו שהיה לי כיף לעבוד עליו!

מוּמלָץ: