EM2019WSP01/Implementierungsdetails: Unterschied zwischen den Versionen

Aus Verteilte Systeme - Wiki
Zur Navigation springen Zur Suche springen
Zeile 39: Zeile 39:
 
= Ultraschallsensor =
 
= Ultraschallsensor =
   
  +
<source lang=ada>
<nowiki>
 
 
-- required libraries
 
-- required libraries
 
with Ada.Real_Time; use Ada.Real_Time;
 
with Ada.Real_Time; use Ada.Real_Time;
Zeile 57: Zeile 57:
 
-- measuring requires a little delay
 
-- measuring requires a little delay
 
delay until Clock + Milliseconds (100);
 
delay until Clock + Milliseconds (100);
</nowiki>
+
</source>
   
 
= Farbsensor =
 
= Farbsensor =

Version vom 4. März 2020, 01:37 Uhr

Information

Die Codebeispiele sollen einen Einblick in die Verwendung von gnatmindstorms2011, insbesondere dem Verzeichnis gnatmindstorms2011/lib/gcc/arm-eabi/4.5.3/rts-ravenscar-sfp/drivers, geben. Sie können nicht eins zu eins so übernommen und kompiliert werden, dazu muss noch ein normales Ada Programm mit .ads und .adb Dateien geschaffen werden. Hier sind keine genauen Ausführungen des Projekts zu finden. Dafür kann auf Anfrage auf das Gitlab Repository verwiesen werden.

Motoren

-- required libraries
with Ada.Real_Time;       use Ada.Real_Time;
with NXT;                 use NXT;
with NXT.Motor_Controls;  use NXT.Motor_Controls;

-- declaration of the motors
LeftMotor  : constant Motor_ID := Motor_A;
RightMotor : constant Motor_ID := Motor_C;

-- procedure Forward
procedure Forward is 
begin
  Control_Motor(LeftMotor, 50, Forward);
  Control_Motor(RightMotor, 50, Forward);
end Forward;

-- procedure TurnRight
procedure TurnRight is 
begin
  Control_Motor(LeftMotor, 50, Forward);
  Control_Motor(RightMotor, 50, Backward);
end TurnRight;

-- procedure BrakeAndStop
procedure BrakeAndStop is 
begin
  Control_Motor(LeftMotor, 0, Brake);
  Control_Motor(RightMotor, 0, Brake);
end BrakeAndStop;

Ultraschallsensor

-- required libraries
with Ada.Real_Time;                 use Ada.Real_Time;
with NXT;                           use NXT;
with NXT.Ultrasonic_Sensors;        use NXT.Ultrasonic_Sensors;
with NXT.Ultrasonic_Sensors.Ctors;  use NXT.Ultrasonic_Sensors.Ctors;

-- create instance for the front ultrasonic sensor
FrontUltrasonicSensor : Ultrasonic_Sensor := Make (Sensor_3);

-- declare variable distance
distance : Integer := 1;

-- measure distance to obstacles in front
Get_Distance(FrontUltrasonicSensor, distance);

-- measuring requires a little delay
delay until Clock + Milliseconds (100);

Farbsensor

-- required libraries
with Ada.Real_Time;            use Ada.Real_Time;
with NXT;                      use NXT;
with NXT.Light_Sensors;        use NXT.Light_Sensors;
with NXT.Light_Sensors.Ctors;  use NXT.Light_Sensors.Ctors;

-- create instance for the light sensor at the front (false turns the floodlight off)
FrontLightSensor : Light_Sensor := Make (Sensor_2, False);

-- declare variable color
color : Integer := 1;

-- enable floodlight
Enable_Floodlight(FrontLightSensor, True);

-- measure color of the obstacle in front
color := Normalized_Light_Value(FrontLightSensor);

-- measuring requires a little delay
delay until Clock + Milliseconds (100);

-- disable floodlight
Enable_Floodlight(FrontLightSensor, False);
 

Schaufel

-- required libraries
with Ada.Real_Time;            use Ada.Real_Time;
with NXT;                      use NXT;
with NXT.Motors;               use NXT.Motors;
with NXT.Motor_Controls;       use NXT.Motor_Controls;
with NXT.Motors.Simple;        use NXT.Motors.Simple;
with NXT.Motors.Simple.Ctors;  use NXT.Motors.Simple.Ctors;

-- create instance for the simple motor that can measure the motor movement
collector : Simple_Motor := Make(Motor_B, Coast, 0);

-- declare variables start_encoder_value and end_encoder_value
start_encoder_value : Integer := 0;
end_encoder_value   : Integer := 0;

-- measure encoder value at the start, this should be 0
start_encoder_value := Current_Encoder_Count(collector);

-- start moving the collector about 180° (depends on the structure of the robot)
Control_Motor(Motor_B, 20, Backward);

loop 

  -- measure encoder value
  end_encoder_value := Current_Encoder_Count(collector);

  exit when end_encoder_value <= -170;

end loop;

-- stop the collector movement
Control_Motor(Motor_B, 0, Brake);

-- braking works better with a little delay
delay until Clock + Milliseconds (100);
 

Debugging

-- required libraries
with NXT.Display;  use NXT.Display;  

-- display the variable value for debugging
Put_Noupdate(variable);
Put_Line(" measuring unit");