Описание программного обеспечения

 

Программа была разработана в среде программирования 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, находящийся на диске, приложенном к дипломному проекту, и нажать кнопку «ОК» для компиляции и установки компонента.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: