Напишіть власну прошивку

Документація

Robot

Напишіть власну прошивку

Рушійна плата Robot призначена для роботи як “кінцевий автомат”, це означає, що вона отримує команди від контрольної плати Robot та відповідно їх виконує. Вона також повертає дані при запиті. Стандартна прошивка рушійної плати не містить багато інтелекту, але не має коригуватися для більшості застосувань.

Проте Ви можете розширити функціональність рушійної плати через встановлення власних режимів та створення власних команд. Щоб зробити це, слід видозмінити файли бібліотеки рушійної плати.

Ці інструкції призначені для людей, яким вже комфортно програмувати.

Режими
Робот має число заздалегідь визначених режимів, які інструктують рушійну плату, як працювати. Наприклад, є три режими “руху по лінії”. При виборі цього режиму рушійна плата зчитуватиме значення з сукупності інфрачервоних датчиків, вмонтованих внизу плати, розраховуватиме бажаний напрямок робота та безпосередньо керуватиме моторами.

Ви можете змінити режими функцією setMode() на контрольній платі.

Ви можете встановлювати Ваші власні режими. Щоб створити новий режим, потрібно встановити режим і на контрольній, і на рушійній платі та записати логіку бажаної поведінки.

Встановіть новий режим
  • У Вашій операційній системі перейдіть до папки скетчів Arduino.
  • Відкрийте «libraries/Robot_Control/ArduinoRobot.h» та «libraries/Robot_Motor/ArduinoRobotMotorBoard.h» у текстовому редакторі на Ваш вибір.
  • В кожному файлі знайдіть розділ з визначеннями режимів. Він виглядає так:

//motor board modes
#define MODE_SIMPLE 0
#define MODE_LINE_FOLLOW 1
#define MODE_ADJUST_MOTOR 2
#define MODE_IR_CONTROL 3

  • Додайте новий режим після цього в обох файлах, наприклад: "#define MODE_ІМ’Я_МОГО_РЕЖИМУ num". num має бути відмінним від інших режимів числом.
  • Збережіть та закрийте ArduinoRobotMotorBoard.h та ArduinoRobot.h.
  • Відкрийте «libraries/Robot_Motor/ArduinoRobotMotorBoard.cpp».
  • Знайдіть визначення «process()». Додайте нову умову відповідно до назви режиму. Код тут буде поміщений у loop(), тому напишіть свою логіку так само, як і у Вашому скетчі.
  • Збережіть та закрийте ArduinoRobotMotorBoard.cpp.
  • У Ваших скетчах для контрольної плати Robot Ви можете використовувати «setMode(MODE_ІМ’Я_МОГО_РЕЖИМУ )», щоб переходити до Вашого режиму.

Команди
Є два різні типи команд:
  • розпорядження (1-направлений зв’язок): подібно до motorsWrite() контрольна плата надсилає команду, яку рушійна плата отримує та виконує. До командної плати нічого не надсилається назад.
  • запити (2-направлений зв’язок): як і з updateIR(), контрольна плата надсилає повідомлення до рушійної плати, яке потім повертає дані до контрольної плати.

Щоб створити нову команду, Вам знадобиться встановити код команди та записати надісланий/отриманий код для неї.

Встановіть нову команду
  • У Вашій операційній системі перейдіть до папки скетчів Arduino.
  • Відкрийте «libraries/Robot_Control/ArduinoRobot.h» та «libraries/Robot_Motor/ArduinoRobotMotorBoard.h».
  • Відкрийте «libraries/Robot_Control/ArduinoRobot.h» та «libraries/Robot_Motor/ArduinoRobotMotorBoard.h» у текстовому редакторі на Ваш вибір.
  • В кожному файлі знайдіть розділ з визначеннями команд. Він виглядає так:

//Код команди
#define COMMAND_SWITCH_MODE 0
#define COMMAND_RUN	10
#define COMMAND_MOTORS_STOP	11
..........
#define COMMAND_READ_TRIM_RE 81
#define COMMAND_PAUSE_MODE 90
#define COMMAND_LINE_FOLLOW_CONFIG 100

  • Додайте нову команду після цього в обох файлах, наприклад: "#define COMMAND_ІМ’Я_МОЄЇ_КОМАНДИ num". num має бути відмінним від інших команд числом.
  • Якщо команда є 2-направленим запитом, встановіть інший код команди тут: "#define COMMAND_ІМ’Я_МОЄЇ_КОМАНДИ_RE num1", який використовуватиметься у команді повернення. Зверніть увагу, що «num1» є відмінним числом від «num» вище.
  • Плануйте структуру Вашої команди. У команді можуть зберігатися byte або int. Надсилаючи/отримуючи команду, записування/зчитування відповідних даних має відбуватися у тому ж порядку. Прикладом цього є коментарі, що починаються зі слів “структура повідомлення має бути”.
  • Щоб надіслати команду, слід створити функцію у бібліотеці RobotControl. Прикладом того, як надсилати повідомлення є функція «motorsWrite()» у motors.cpp або «updateIR()» у sensors.cpp.
  • Щоб визначити команду, знайдіть функцію «parseCommand()» function у ArduinoRobotMotorBoard.cpp. Додайте нову умову до статті випадків, таку ж, як і ім’я встановленої раніше команди. Зверніться до інших умов як прикладів.
  • Якщо Ваша команда є розпорядженням, запишіть функцію, щоб виконувати логіку, і все готово. Якщо це запит, Вам знадобиться записати функцію, яка виконує команду, а також повернути запитувану інформацію. Прикладом є"_digitalRead()" у ArduinoRobotMotorBoard.cpp.

Повернутись до головної

Коментарі 0

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.