זה עבד! בדיוק לפי התוכנית, ועם מספר נמוך להפתיע של תקלות ובאגים בתוכנה ובחומרה, הצלחתי לחבר את הארדואינו אל מקלדת ה-TI99/4A העתיק ולקרוא ממנה הקשות מקשים בזמן אמת (ובעזרת שלושה פינים בלבד, אם לא סופרים את הפלוס וה-Ground). לפני שניכנס לפרטים, הנה הדגמה חיה:
המטריצה נראית כמו הצרות שלי, אבל לא לדאוג – זהו אבטיפוס בלבד, וזה לא ייראה ככה בתוצר הסופי. במוקדם או במאוחר אהיה חייב להכין מעגל אמין וקומפקטי יותר, מן הסתם תוך שימוש ב-Stripboard (כפי שכבר הזכרתי בעבר, אין לי כוונה להתחיל לצרוב PCB בבית).
הפינים הרעועים שיוצאים מהמקלדת מחוברים, דרך כבל IDE משומש, אל שני ג'וקים (Multiplexers). ג'וק אחד שולח סיגנל לאחד משמונת הטורים, והג'וק השני מחפש את הסיגנל הזה באחת משבע השורות. את החיווט הזה ביצעתי בהסתמך על הסכמה שמצאתי כאן.
כל אחד משני הג'וקים הללו זקוק ל"כתובת" בת שלושה ביטים, כדי לדעת באיזו יציאה/כניסה להשתמש. הכתובות מגיעות מג'וק שלישי (Serial-to-Parallel) שמקבל ביטים באופן סדרתי ו"מציג" אותם במקביל על שמונה פינים. אני הייתי זקוק, כאמור, לשישה בלבד.
בשלב ראשון הרצתי שוב ושוב את כל הקומבינציות של שישה ביטים (0-63) דרך המערכת הזו, ובכל פעם שהתוכנה זיהתה לחיצה, היא הציגה על המסך את המספר בר-המזל. כך מיפיתי, בנייר ועט, את כל ארבעים ושמונה המקשים. לאחר מכן הזנתי את המידע שהתקבל בחזרה לתוכנה, כך שכעת, כשהיא שולחת למשל את הקוד 26 ומקבלת סיגנל בחזרה, היא יודעת שמקש T לחוץ. כמובן, אפשר היה לחשב את כל המספרים הללו מראש, אך העדפתי לעשות זאת כך כדי לוודא, על הדרך, שהכל מחובר כראוי.
התוכנה מבצעת סדר גודל של אלפי סריקות בשניה, ולכן נדרש עוד טריק תוכנה קטן כדי להבדיל בין מקש שנלחץ זה-עתה לבין מקש שפשוט נשאר לחוץ מקודם. גם הטיפול במקשי Shift ו-Enter דרש השקעה נוספת. מעבר לבניה של מעגל אמין, יהיה צורך לבנות גם קוד חכם ויציב יותר לקריאה שימושית באמת של מלוא המידע שמגיע מהמקלדת. המשך יבוא!