Гироскопический датчик измеряет вращательное движение робота и изменение его положения. — Может использоваться для определения текущего направления вращения — Точность: +/- 3 градуса на 90 градусов оборота (в режиме измерения наклона) — Может определить максимум 440 градусов/c (в режиме гироскопа) — Частота опроса датчика: 1 кГц
Гироскопический датчик измеряет вращательное движение робота и изменение его положения.
Может использоваться для определения текущего направления вращения Точность: +/- 3 градуса на 90 градусов оборота (в режиме измерения наклона) Может определить максимум 440 градусов/c (в режиме гироскопа) Частота опроса датчика: 1 кГц Автоматически идентифицируется EV3 Изучаем гироскопический датчик
Гироскопический датчик (Рис. 1) предназначен для измерения угла вращения робота или скорости вращения. Сверху на корпусе датчика нанесены две стрелки, обозначающие плоскость, в которой работает датчик. Поэтому важно правильно установить датчик на робота. Также для более точного измерения крепление гироскопического датчика должно исключать его подвижность относительно корпуса робота. Даже во время прямолинейного движения робота гироскопический датчик может накапливать погрешность измерения угла и скорости вращения, поэтому непосредственно перед измерением следует осуществить сброс в 0 текущего показания датчика. Вращение робота против часовой стрелки формирует отрицательные значения измерений, а вращение по часовой стрелке - положительные.
program rome_arabic;
Uses crt;
Const
{римские цифры}
RomeDigits:string='IVXLCDM';
{числа - соответствующие римским цифрам}
ArabicNumbers:array [1..7] of integer =
(1, 5, 10, 50, 100, 500, 1000);
(*
Функция определения правильности ввода арабского числа
*)
function IsArabic(s:string):boolean;
var i,t,c:integer;
begin
IsArabic:=true;
for i:=1 to length(s) do
if not(s[i] in ['0'..'9'])then
begin
IsArabic:=false;
exit;
end;
val(s,t,c);
if (c<>0)or(t<1) then
begin
IsArabic:=false;
exit;
end;
end;
(*
Функция перевода арабского числа в римское
*)
function ArabicToRome (s: string): string;
var
i,n,c: integer;
res: string;
begin
val(s,n,c);
res:='';
i:=7; {Проверяем от больших чисел к меньшим}
while n>0 do
begin
{находим следующее число - из которого будем формировать римскую цифру}
while ArabicNumbers[i]>n do i:=i-1;
res:=res+RomeDigits[i];
n:=n-ArabicNumbers[i];
end;
ArabicToRome := res;
end;
(*
Функция определения правильности ввода римского числа
*)
function IsRome(s:string):boolean;
var i:integer;
begin
IsRome:=true;
if s='' then
begin
IsRome:=false;
exit;
end;
for i:=1 to length(s) do
if not (s[i] in ['I', 'V', 'X', 'L', 'C', 'D', 'M']) then
begin
IsRome:=false;
break;
end;
end;
(*
Функция перевода римского числа в арабское
*)
function RomeToArabic (s: string): integer;
var
b:array[1..100] of integer;
i,j:integer;
res:integer;
begin
for i:=1 to length(s) do
begin
if s[i]='I' then b[i]:=1;
if s[i]='V' then b[i]:=5;
if s[i]='X' then b[i]:=10;
if s[i]='L' then b[i]:=50;
if s[i]='C' then b[i]:=100;
if s[i]='D' then b[i]:=500;
if s[i]='M' then b[i]:=1000;
end;
res:=b[1];{массив локальная переменная и
сравнение первого элемента с нулевым искажает число,
почему-то считает, что b[0]=1 и автоматом вычитает 2}
for i:=2 to length(s) do
begin
res:=res+b[i];
if b[i-1]<b[i] then res:=res-2*b[i-1]{вот здесь}
end;
RomeToArabic:=res;
end;
{Основная программа}
var
arabic: string; {арабское число}
rome: string; {римское число}
ask: char; {режим перевода чисел}
begin
clrscr;
writeln('Программа переводит римское число в арабское или арабское в римское');
repeat
clrscr;
writeln('Выберите режим перевода:');
writeln('1 - римское число в арабское');
writeln('2 - арабское число в римское');
writeln('другое - выход');
ask:=readkey;
case ask of
'1': begin {Римское в арабское}
write('Введите римское число: ');
readln(rome);
if IsRome(rome) then
writeln('Арабское число = ',RomeToArabic(rome))
else writeln('В римской записи числа допущены ошибки! Перевод не возможен!');
writeln('Press Enter...');
readln
end;
'2':begin {арабское в римское}
write('Введите арабское число: ');
readln(arabic);
if IsArabic(arabic) then
writeln('Римская запись = ',ArabicToRome(arabic))
else writeln('В арабской записи числа допущены ошибки! Перевод не возможен!');
writeln('Press Enter...');
readln
end;
else exit;
end;
until not(ask in ['1','2']);
end.
Гироскопический датчик измеряет вращательное движение робота и изменение его положения.
Может использоваться для определения текущего направления вращения
Точность: +/- 3 градуса на 90 градусов оборота (в режиме измерения наклона)
Может определить максимум 440 градусов/c (в режиме гироскопа)
Частота опроса датчика: 1 кГц
Автоматически идентифицируется EV3
Изучаем гироскопический датчик
Гироскопический датчик (Рис. 1) предназначен для измерения угла вращения робота или скорости вращения. Сверху на корпусе датчика нанесены две стрелки, обозначающие плоскость, в которой работает датчик. Поэтому важно правильно установить датчик на робота. Также для более точного измерения крепление гироскопического датчика должно исключать его подвижность относительно корпуса робота. Даже во время прямолинейного движения робота гироскопический датчик может накапливать погрешность измерения угла и скорости вращения, поэтому непосредственно перед измерением следует осуществить сброс в 0 текущего показания датчика. Вращение робота против часовой стрелки формирует отрицательные значения измерений, а вращение по часовой стрелке - положительные.
Гироскопический датчик