Про керування залізом


Дивлюся я на статтю у Вікіпедії про G-коди і сумно зітха́ю. Там все керування в дюймах і міліметрах. І взагалі я не певен, що це добре підходить для масштабу Arduino.

Може є десь загальновідо́мий, усталений протокол керування по USB чимось на рівні окремих кроків в кроковому двигуні? Буквально, «встановити затримку між кроками 150 мс, зробити 4096 кроків уперед».

Якщо не знайду готового протоколу, доведеться виду́мувати щось своє.

Я деякий час тому для себе зробив один такий примітивний протокол, і він був дуже, дуже жахливий. Користуватись можна через термінал: там, по за́думу, треба вводити в десятко́вому виді через пробіл два цілих числа (бо вже є Serial.parseInt() для самих лінивих), тобто команду та аргумент, та тиснути Enter. Не робіть так :)

Треба придумати протокол з отакими властивостями:

  • обов’язково має бути текстовий варіант, щоб можна було руками в терміна́лі це відлагоджувати;
  • опціонально може бути більш ефективний бінарний варіант;
  • обов’язково має бути асинхронним, бо деякі команди виконуються тривалий час;
  • має бути двохстороннім: контролер має звітувати про стан виконання команд, а також за потреби передавати значення з сенсорів.

Нащо? Щоб можна було високорі́вневу логіку зробити десь у компі.