// Mechanizm tłumaczący PUMT — przekształcenie projektu ramy oprogramowania robota Unit1 w kod napisany w Javie


/*Rama projektowa Softbot
Nazwa: Unit1
Części: SEKCJA 1.
Sekcja czujników:
Czujnik ultradźwiękowy
Czujnik światła
Sekcja silników:
Silniki napędowe z dekoderami

Akcje:
Krok 1.: Jedź do przodu i pokonaj określoną odległość.
Krok 2.: Jedź do tyłu i pokonaj określoną odległość.
Krok 3.: Wykonaj obrót w lewo o określoną liczbę stopni.
Krok 4.: Wykonaj obrót w prawo o określoną liczbę stopni.
Krok 5.: Zmierz odległość między robotem a przedmiotem.
Krok 6.: Określ kolor przedmiotu.
Krok 7.: Raportuj.

Zadania:
Zlokalizuj przedmiot w pokoju, określ jego kolor i złóż raport.


Scenariusze i sytuacje:
Unit1 znajduje się w małym pokoju, w którym poza nim znajduje się jeden przedmiot. Unit1 ma pełnić funkcję badacza i znaleźć ów przedmiot, określić jego kolor, a na koniec zwrócić dane dotyczące tego koloru.
Koniec ramy*/

//Części: SEKCJA 1.
// Sekcja czujników:
   protected  EV3UltrasonicSensor  Vision;
   protected HiTechnicColorSensor ColorVision;
// Silniki:
   protected TetrixRegulatedMotor LeftMotor;
   protected TetrixRegulatedMotor RightMotor;
   DifferentialPilot  D1R1Pilot;
//Sytuacje i scenariusze: SEKCJA 4.
   PrintWriter Log;
   situation Situation1;	
   location RobotLocation; 


//Akcje: SEKCJA 2.
   basic_robot()
   {
       Vision = new EV3UltrasonicSensor(SensorPort.S3);
       Vision.enable();
       Situation1 = new situation();
       RobotLocation = new location();
       RobotLocation.X = 0;
       RobotLocation.Y = 0;
       ColorVision = new HiTechnicColorSensor(SensorPort.S2);
       Log = new PrintWriter("basic_robot.log");
       Log.println("Skonstruowano obiekty czujników");
       //...
   }

   public void travel(int Centimeters)
   {
       D1R1Pilot.travel(Centimeters);
   }  

   public int getColor()
   {
       return(ColorVision.getColorID());
   }

   public void rotate(int Degrees)
   {
       D1R1Pilot.rotate(Degrees);
   }

//Zadania: SEKCJA 3.
    
   public void moveToObject() throws Exception
   {           
       travel(Situation1.TestRoom.TestObject.Location.X);
       waitUntilStop(Situation1.TestRoom.ObjectLocation.X);
       rotate(90);
       waitForRotate(90);
       travel(Situation1.TestRoom.TestObject.Location.Y);
       waitUntilStop(Situation1.TestRoom.ObjectLocation.Y);
             
   }           
              
   public void identifyColor()
   {            
       Situation1.TestRoom.TestObject.Color = getColor();                            
   }

   public void reportColor()
   {            
       Log.println("kolor = " +  situation1.TestRoom.TestObject.Color);
   }

   public void  performTask() throws Exception
   {
       moveToObject();
       identifyColor();
       reportColor();              
   }

   public static void main(String [] args)  throws Exception 
   {
       robot   Unit1 = new basic_robot();
       Unit1.performTask();
   }
      
}


