Автоматизированное управление мобильным роботом
7.10. nxtOSEK C++
Более удобный программный интерфейс реализован для C++. Каждый датчик и мотор является экземпляром соответствующего класса, а это перекладывает работу по инициализации и завершения работы переферийных устройств на конструкторы и деструкторы соответствующих классов, инкапсуирует методы, деля синтаксии интуитивно понятным. Хоть необходимость использования процедур ecrobot_device_initialize, ecrobot_device_terminate пропадает, тем не менее, для того что бы согласовать обектно ориентированный подход с функционалом ОС РВ nxtOSEK и предоставлять классам взаимодействие с процедурами обработки прерываний, все же необходимо использовать процедуру user_1ms_isr_type2 и описать событие ОС РВ.
Как правило, в процедуре user_1ms_isr_type2 достаточно вызывать одну функцию SleeperMonitor() которая необходима для корректной работы класса Clock и корректного взаимодействия с устройвами через I2C интерфейс.
Так же необходимо указать в описании основной задачи в OIL файле события EventSleepI2C и EventSleep. Это может выглядеть, например, так:
//событие EventSleepI2C EVENT EventSleepI2C { MASK = AUTO; }; //событие EventSleepI EVENT EventSleep { MASK = AUTO; }; //описание основной задачи с названием, например, TaskMain TASK TaskMain { AUTOSTART = TRUE { APPMODE = appmode1; }; PRIORITY = 1; ACTIVATION = 1; SCHEDULE = FULL; STACKSIZE = 512; EVENT = EventSleepI2C; //добавили событие EventSleepI2C EVENT = EventSleep; //добавили событие EventSleepI2C };
Надо помнить, что так как объектам 18ти классов (датчикам, соединениям, моторам) требуется инициализация и корректное завершение работы, их необходимо определять как глобальные объекты. В противном случае на дисплее появится сообщение об ошибке и для корректной работы устройство надо будет перезапустить. Глобальными должны быть экземпляры следующих классов: AccelSensor, Bluetooth, Camera, ColorSensor, CompassSensor, SonarSensor, IrSeeker, LegoLight, Motor, NxtColorSensor, PSPNx, Rs485, GyroSensor, LightSensor, RcxLightSensor, SoundSensor, TouchSensor.
7.10.1. Иерархия классов
В этом параграфе приведен список классов в алавитном порядке с учетом наследования. Многие методы классов созвучны функциям С интерфейса, поэтому подробно их описывать здесь не будем.
Все классы находятся в пространстве имен (namespace) "ecrobot", что бы использовать классы без приставки ecrobot:: необходимо указасть в начале программы using namespace ecrobot. Так же, что бы генерировался корректный машинный код, необходимо сделать указание компановщику (linker) компановать программу в стиле С, т.е. код программы должен быть заключен между extern "C"{ …код программы… }(см. пример в начале главы).
-
ecrobot::AccelSensor
Клаcс работы с датчиком ускорения HiTechnic.
-
ecrobot::Bluetooth
Класс работы с Bluetooth.
-
ecrobot::BTConnection
Устанавливает соединение через Bluetooth.
-
ecrobot::Camera
Класс работы с камерой NXTCamv2.
-
ecrobot::Clock
Класс работы с системными часами.
-
ecrobot::ColorSensor
Класс работы с датчиком цвета NXT.
-
ecrobot::CompassSensor
Класс работы с компасом HiTechnic
-
ecrobot::Daq
Класс для отправки внутренних данных NXT программе NXT GamePad.
-
ecrobot::GamePad
Класс для дистанционного управления с помощью джойстика GamePad.
- ecrobot::I2c
-
ecrobot::SonarSensor
Класс работы с ультразвуковым датчиком.
-
ecrobot::IrSeeker
Класс работы с инфракрасным датчиком.
-
ecrobot::Lcd
Класс работы с дисплеем устройства NXT.
-
ecrobot::LegoLight
Класс работы с датчиком освещенности NXT.
-
ecrobot::Motor
Класс работы с серводвигателями NXT.
-
ecrobot::Nxt
Класс работы с внутренними функциями устройства NXT (работа с кнопками, получение уровня заряда батареи).
-
ecrobot::NxtColorSensor
Класс работы с датчиком цвета NXT.
-
ecrobot::PSPNx
Класс работы с портом расширения для Sony Play Station.
-
ecrobot::Camera::Rectangle_T
Вспомогательный класс для работы с камерой NXTCamv2.
-
ecrobot::Rs485
Класс работы с интрфейсом RS485.
- ecrobot::Sensor
-
ecrobot::GyroSensor
Класс работы с гироскопом.
-
ecrobot::LightSensor
Класс работы с датчиком освещенности.
-
ecrobot::RcxLightSensor
Класс работы с датчиком освещенности RCX.
-
ecrobot::SoundSensor
Класс работы со звуковым датчиком.
-
ecrobot::TouchSensor
Класс работы с датчиком касания.
-
ecrobot::Speaker
Класс работы с воспроизведением звука.
-
ecrobot::Usb
Класс работы с USB.
-
ecrobot::VectorT < T >
Класс, реализующий вектор из двух компонент.