שם הפין בעל משמעות וכך הקוד שלנו קריא יותר (וגם קל יותר לשנות את החיבור אל מספר פין אחר, אם רוצים)
משתנים עבור ניהול המנורה
למעשה רק נדרש משתנה שיגיד האם המנורה דולקת כרגע (וכך נדע לנהפוך את המצב שלה)
משתנים עבור מדידת המרחק
אנו רוצים לדעת מה המרחק של העצם. לשם כך נצטרך למדוד את משך הזמן שחיכינו להחזר הגל.
ייתכן מצב שאין החזר (כי אין עצם). לשם כך נרצה להפסיק לחכות להחזר. אז מגדירים מה המרחק המקסימלי שאנו מוכנים לאתר בו עצמים, והציפייה להחזר קול היא רק עד לפרק הזמן המקביל למרחק זה
כדי שהנורה לא תהבהב במהלך מעבר היד (כי יהיו הרבה גילויים של עצם בתהליך הזה) אנו יוצרים מנגנון שמתעלם מכל הגילויים בתהליך המעבר (למעט ההתחלה)
אז יש משתנה שמגדיר שהתכונה הזו פועלת, ויש הגדרה של מצבים לפי התהליך הצפוי.
נחשב את הזמן המקסימלי שמחכים להחזר
ונתחיל את הקוד
הגדרות התחלה
נגדיר את אופן הפעולה של הפינים, נכבה את המנורה, ונגדיר מצב גילוי של אין עצם
פעילות שוטפת
בדיקה האם יש עצם קרוב
פונקציית LOOP
אם יש עצם קרוב - החלף את מצב המנורה
מכאן אנו מבינים שעיקר החוכמה נמצאת בפונקציה שאומרת אם יש עצם קרוב
זיהוי הישארות
אנו רוצים לשנות את מצב האור רק פעם אחת לכל תנועה של היד. לכן אנו צריכים לזהות מצב של גילויים מרובים לאחר הגילוי הראשון ולפני סיום הגילויים
ניהול תהליך הגילוי
הגילוי כולו (שמטרתו לתת גילוי אחד על כל מעבר היד) נכתב בשיטה של מכונת מצבים, העוברת בין המצבים הבאים:
מתחילים במצב DIST_FAR כלומר אין גילוי של עצם.
כשיש גילוי של עצם, עוברים אל מצב DIST_CAME, שנותן השהיה של גילוי נוסף לפני שנתחיל את התהליך כולו (וכך קל לנטרל גילוי שווא חד פעמי)
בגילוי נוסף, עוברים אל מצב DIST_NEAR שבו נישאר כל עוד יש גילוי
לאחר שנגמרו הגילויים, נעבור אל DIST_WENT וממנו אל מצב DIST_FAR (אם אין יותר גילויים).
פונקציות בסיס של מד מרחק
בכל פעם שנעבוד עם מד המרחק נזדקק לפונקציות אלה.
השנייה שולחת את הגל (TRIG) והראשונה מזהה החזר ומחשבת את מרחק העצם