צעצוע פשוט זה מציג תבנית אורות ריאליסטית של רמזור (כולל מצבי "תקלה" מדומים מדי פעם, שבאים לידי ביטוי בכתום מהבהב), בתוספת פעולה אקראית של "צ'קלקה" על ניידת משטרה מקלקר.
מכיוון שמבחינה טכנולוגית אין פה שום דבר שטרם ראינו, אסתפק בתיאור קצר של הרכיבים – מיד אחרי סרטון ההדגמה.
קצת רקע: פרויקט הפונג המשולב דלפי+ארדואינו לא היה מתוכנן לגמרי מראש. הרעיון להפיץ את התוכנה ואת קוד הארדואינו ביחד עם הוראות הרכבה ל"בקר המשחק" עלה במקרה, ברגע האחרון ממש, תוך כדי כתיבת הפוסט על הפרויקט. במקביל, התחלתי לחשוב גם על השלב הבא: לאן אפשר לקחת את הקונספט הזה? משחקים נוספים לאותה חומרה מוגבלת זה קצת משעמם, ומצד שני, חומרה מורכבת יותר למשחק ספציפי חדש כנראה לא תצדיק את המאמץ – גם בהנחה שכל מי שמעוניין לשחק יצליח להשיג את הרכיבים הדרושים בזמן סביר.
וככה, במקום להשלים פוסטים ישנים ולא-גמורים שכבר החלו להעלות עובש, התחלתי לגלגל בראש רעיון חדש ומגניב (לטעמי) – ואפילו הצלחתי למצוא לו, במאמץ רב, שם שלא מופיע בגוגל: Promicoga, קיצור של Protocol for Micro Controller Gaming (פרוטוקול למשחקים במיקרו-בקרים). אז מה זה פרומיקוגה, מה זה נותן ואיך עובדים עם זה בפועל?
כשהמפגש הראשון של קהילת החובבים החל לרקום עור וגידים, ניסיתי לחשוב על פרויקטים שאוכל להביא ולדבר עליהם. מכיוון שגם ככה כבר התחלתי לשחק עם ה-ATTiny85, החלטתי לעשות איתו משהו רלוונטי – טיימר למרצים, שיקצוב את זמן ההרצאה שלהם וייתן אינדיקציה בולטת לסיום. הנה הסרטון עם התוצאה הסופית – ובהמשך, התהליך שבו כל זה תוכנן ונבנה…
כל מי שרוצה לתכנת מיקרו-בקרים חייב לשלוט, בין השאר, בייצוג בינארי (בסיס 2) והקסדצימלי (בסיס 16) של מספרים. הייצוג הבינארי חיוני כדי להבין את נושא הביטים, ואילו ההקסדצימלי מאפשר לנו להתמודד איתו בנוחות יחסית בזמן התכנות בפועל. הבעיה היא שאנחנו מחונכים מגיל אפס לחשוב ולהשתמש בבסיס העשרוני בלבד, וזה הרגל שקשה להיפטר ממנו.
הפרויקט שמתארח היום בבלוג, חוץ מזה שהוא יופי של תרגיל למתחילים, יכול לעזור ללומדי התכנות לחשוב בבינארי ובהקסדצימלי. הוא כולל ארבעה לחצנים, שמייצגים ארבעה ביטים במספר בינארי, ולידם תצוגת 7-Segment של ספרה יחידה, אשר מציגה את המספר הנ"ל בבסיס הקסדצימלי. כמה זה המספר הבינארי 1011 בהקסדצימלי? איך מייצגים בבינארי את המספר ההקסדצימלי 7? עם הממיר הבינארי-להקסדצימלי, גם אתם תוכלו לדעת!
"פונג" (Pong), משחק המטקות האלקטרוני הפרימיטיבי, נחשב אחת מאבני הדרך החשובות של עולם הגיימינג. הסיבה לכך היא שרבות מקונסולות המשחקים הביתיות הראשונות, שיצאו לשוק בסביבות אמצע שנות השבעים, הציעו בעיקר גרסאות של המשחק הזה.
הבקרים לשליטה במשחק לא היו משוכללים הרבה יותר: בדרך כלל, כל בקר היה לא יותר מאשר פוטנציומטר או נגד משתנה במארז מהודר. כשהייתי ילד קטן, גם אצלי בבית היתה קונסולה כזו. לכן, אחרי שהצלחתי להעביר דרך הארדואינו קריאה של פוטנציומטר לתוכנה שכתבתי במחשב, היישום הראשון שעלה בדעתי היה משחק פונג – והנה התוצאה:
עד היום, כל התקשורת בין המחשב שלי לארדואינו הסתכמה בתכנות הארדואינו דרך סביבת הפיתוח, וב-Serial Monitor. זה די והותר כאשר הארדואינו מיועד לפעול לבדו, אבל מה עושים אם רוצים שהוא יעבוד בשיתוף עם תוכנה משלנו במחשב?
חברים בקהילת המפתחים המקומית כבר הצליחו ליצור את החיבור הנחשק באמצעות שפת התכנות פייתון, אך אני רציתי לעבוד דווקא עם Object Pascal (בסביבת הפיתוח Delphi) שאני מכיר ואוהב. ידעתי שבסופו של דבר, שפת התכנות הספציפית חסרת חשיבות – מה שחשוב באמת זה למצוא את הדרך שלה לתקשר עם יציאה טורית (Serial Port), כי זה בעצם מה שכבל ה-USB של הארדואינו נותן.
החיפוש אחר רכיב מתאים ל-Delphi שלי לא היה פשוט, וגם אחרי שמצאתי סוף כל סוף משהו והתקנתי אותו, לא היה ברור איך להשתמש בו כי התיעוד אפסי. לשמחתי, בסופו של דבר הסתבר שזה הרבה יותר פשוט ממה שחשבתי. מרגע שתפסתי את הפרנציפ, יצרתי תוך דקות ספורות ממש את היישום המשולב ארדואינו/מחשב הבא:
כזכור, הצלחתי בעבר לצרוב Bootloader ("תוכנת ניהול") של ארדואינו על מיקרו-בקר ATMega328-PU שנרכש בנפרד, ואחר כך הצלחתי לשים אותו על מטריצה ולגרום לו להבהב בנורית LED. השלב הבא היה ליצור עבור המיקרו-בקר לוח עצמאי, כזה שיוכל לתקשר עם המחשב ולעשות כל מה שארדואינו אמיתי עושה, ולא על מטריצה זמנית אלא על משהו יציב יותר.
התמונות שמלוות את הפוסט הזה הן מעוגת יום ההולדת של הבן, שמגלה עניין רב בכל מה שקשור לירח. המתנה שקיבל לכבוד האירוע היתה מחשב משלו. לא כל חלקי המחשב חדשים, אמנם, אך הוא עדיין חזק פי כמה מאות אלפים או יותר מהמחשב שהביא את אפולו 11 לירח, לפני כמעט בדיוק 43 שנים. בהערכה גסה מאד, המחשב ההוא מקביל בביצועיו ללוח ארדואינו בסיסי…
הפרויקט השני שאני מתכבד לארח כאן בבלוג הוא לוח התוצאות האלקטרוני של עומר פוקס, אדם שחושב בגדול. כמה גדול? פשוט תסתכלו על התמונה הבאה: כל השחור הזה הוא לא משטח העבודה, אלא הצד האחורי של הפרויקט!
תוספת מאוחרת: את הפוסט זה כתבתי אי-שם בתחילת הדרך. לפוסט מעודכן ומפוקס יותר על מחלקי מתח, ראו בקישור הזה.
כל הגורואים של האלקטרוניקה אומרים שכדי ללמוד את הנושא כמו שצריך, חייבים להיכשל בדרך ולעשות טעויות. זה מספיק גרוע כשזה קורה לך תוך כדי עבודה לבד, בבית, אבל כשכותבים בלוג והטעות מופיעה לעיני כל העולם הרבה לפני שעלית עליה… 🙂
בפוסט זה, אם כן, אנסה לתקן טעות מושגית מהותית שעשיתי בעבר. אפרופו, כשדיברתי בזמנו עם אוריאל על Boozo the Smile, הפרויקט שלו שהוצג כאן, הנושא הועלה על ידו ובצורה שהייתי אמור לקלוט על המקום – אבל כנראה נגזר עליי לתפוס את העניין שרק אחרי שאביך את עצמי בפומבי. בקיצור, הפעם נדבר על ההבדל הקריטי בין נגד Pull-down לבין מחלק מתח.