מכונת מצבים — מה שיש מול מה שחסר

הקושחה היא bool autoMode ועוד «האם ל־AccelStepper נשאר מרחק». setup() קורא setCurrentPosition(0) בלי מפסק קצה. אין UNHOMED, אין FAULT, אין סטול, אין WDT ייעודי. אותו אירוע נשלח לשתי המכונות — זו הנקודה.

המכונה ה«בטוחה» לא נכתבה ל־.ino ולא נבדקה מול חומרה. אי אפשר לעשות הומינג בתוכנה בלי מפסק. בלי תולעת / בלם, POWER_LOSS הוא נפילה — ראו מומנט.

מה שה־.ino עושה

BOOT ואז RUN בלבד BOOT RUN autoMode · distanceToGo

BOOT

believed (הקושחה)
מכני (הזרוע)
יעד
דגלים

מוצע — לא בקושחה

BOOT, UNHOMED, HOMING, IDLE, MOVING, FAULT, DEAD BOOT UNHOMED HOMING IDLE_AUTO IDLE_MANUAL MOVING FAULT_SENSOR FAULT_HOME FAULT_STALL FAULT_LIMIT DEAD

BOOT

believed
מכני
יעד
דגלים

אותו אירוע — שתי תשובות

אתחול

דגימה ופקודות

תנועה והומינג

כשלים

הקוד: src/lib/fsm.js + src/lib/fsm-table.js. כל תא בטבלה הוא step() אמיתי על דייר קנוני של המצב. 11 × 15 = 165 תאים במכונה המוצעת, 2 × 15 בקושחה — כולם נעולים ב־npm test.

טבלת מעברים מלאה — מה ש־walk() מחזיר

תא כחול משנה מצב. אדום נכנס ל־FAULT/DEAD. מסגרת צהובה היא reject. לחיצה על תא בשורה של המצב הנוכחי שולחת את האירוע לשתי המכונות.