Программа была разработана в среде программирования Borland Delphi и рассчитана для работы с открытым интерфейсом iRobot.
Delphi – язык программирования, который используется в одноимённой среде разработки. Сначала язык назывался Object Pascal. Начиная со среды разработки Delphi 7.0, в официальных документах Borland стала использовать название Delphi для обозначения языка Object Pascal.
Поскольку Delphi является визуальная среда разработки программ, она максимально упрощает создание приложения и облегчает жизнь программисту, упрощая процесс формирования внешнего вида программы. При этом можно больше внимания уделить логике выполнения программы и непосредственно заниматься созданием математической части приложения.
Delphi – результат развития языка Турбо Паскаль, который, в свою очередь, развился из языка Паскаль. Паскаль был полностью процедурным языком, Турбо Паскаль, начиная с версии 5.5, добавил в Паскаль объектно-ориентированные свойства, а в Object Pascal – динамическую идентификацию типа данных с возможностью доступа к метаданным классов (то есть к описанию классов и их членов) в компилируемом коде, также называемом интроспекцией – данная технология получила обозначение RTTI. Так как все классы наследуют функции базового класса TObject, то любой указатель на объект можно преобразовать к нему, после чего воспользоваться методом ClassType и функцией TypeInfo, которые и обеспечат интроспекцию.
|
|
Также отличительным свойством Object Pascal от С++ является то, что объекты по умолчанию располагаются в динамической памяти. Однако можно переопределить виртуальные методы NewInstance и FreeInstance класса TObject. Таким образом, абсолютно любой класс может осуществить «желание» «где хочу - там и буду лежать». Соответственно организуется и «многокучность».
Object Pascal (Delphi) является результатом функционального расширения Turbo Pascal.
Среда Delphi была выбрана, потому, что является визуальной, а визуальность дает удобные средства разработки для более быстрого написания кода.
Мною была взята существующая программа iRobot Create и дополнена некоторыми процедурами для получения данных с датчиков.
Далее идет пример некоторых процедур программы.
Процедура, выполняющая получение данных с датчиков:
procedure TfrmCreateMain.doRequestSensorData(logit: boolean);
begin
// очистить буфер и приготовится получить данные с датчиков
bufptrstart:= 0; // сделать значения равными 0
bufptrend:= 0;
buflength:= 0;
sensor_index:= 0;
refreshtimercnt:= 0;
reading_sensors:= true;
doSend('142 6', logit);
end;
С помощью этой процедуры робот переводится в пассивный режим:
procedure TfrmCreateMain.btnPassiveModeClick(Sender: TObject);
begin
reading_sensors:= false;
doSend('128'); // отправка команды, устанавливающая робот в пассивный // режим
|
|
doRequestSensorData(true);
PageControl1.ActivePage:=tabSensors; // вывод значений датчиков
end;
Следующая процедура получает данные о спаде колес, датчиках бампера и ИК-датчиках, находящихся под бампером:
procedure TfrmCreateMain.ProcessSensorData;
var
i: integer;
dist,angl: smallint;
begin
// Спад колес
if (sensors[SenBumpDrop] and 16) = 16 then // проверка ролика на спад
shCaster.Brush.color:= clRed // закрасить фигуру в красный, если есть спад
else
shCaster.Brush.color:= clGreen; // закрасить в зеленый
if (sensors[SenBumpDrop] and 8) = 8 then // проверка на спад левого колеса
shLeftWheel.Brush.color:= clRed
else
shLeftWheel.Brush.color:= clGreen;
if (sensors[SenBumpDrop] and 4) = 4 then // проверка на спад правого колеса shRightWheel.Brush.color:= clRed
else
shRightWheel.Brush.color:= clGreen;
// Бампер
if (sensors[SenBumpDrop] and 2) = 2 then // проверка значения 1-го датчика
// бампера
shBumpLeft.Brush.color:= clRed // если есть касание, закрасить фигуру в // красный
else
shBumpLeft.Brush.color:= clGreen;
if (sensors[SenBumpDrop] and 1) = 1 then
shBumpRight.Brush.color:= clRed
else
shBumpRight.Brush.color:= clGreen;
// ИК-датчики под бампером
if (sensors[SenCliffL] = 1) then // проверка 1 ИК-датчика под бампером
shCliffLeft.brush.color:= clRed // если под датчиком нет поверхности – // закрасить его на схеме в красный
else
shCliffLeft.brush.color:= clGreen;
lblCliffLeft.caption:= inttostr((sensors[SenCliffLSig1] shl 8) + sensors[SenCliffLSig0]);
if (sensors[SenCliffFL] = 1) then// аналогично к первому проверка 2-го // датчика
shCliffFrontLeft.brush.color:= clRed
else
shCliffFrontLeft.brush.color:= clGreen;
lblCliffFrontLeft.caption:= inttostr((sensors[SenCliffFLSig1] shl 8) + sensors[SenCliffFLSig0]);
if (sensors[SenCliffFR] = 1) then
shCliffFrontRight.brush.color:= clRed
else
shCliffFrontRight.brush.color:= clGreen;
lblCliffFrontRight.caption:= inttostr((sensors[SenCliffFRSig1] shl 8) + sensors[SenCliffFRSig0]);
if (sensors[SenCliffR] = 1) then
shCliffRight.brush.color:= clRed
else
shCliffRight.brush.color:= clGreen;
lblCliffRight.caption:= inttostr((sensors[SenCliffRSig1] shl 8) + sensors[SenCliffRSig0]);
Интерфейс программы показан на рисунке 3.2.
Рисунок 3.2 – Интерфейс программы
Подключение к COM-порту осуществляется с помощью компонента TComPort. Для установки этого компонента и подключения его к программе необходимо в меню Delphi выбрать Component->Install Component, далее открыть вкладку «Into new package tab» и открыть файл CPort.pas, находящийся на диске, приложенном к дипломному проекту, и нажать кнопку «ОК» для компиляции и установки компонента.