Make Finch object follow an object

1.5k views Asked by At

Class file hereIn my Java code, the Finch robot is named myF.

I need to make myF do the following:

  1. Tap once to move toward an object placed in front of it, with it's beak colour (myF.setLED..) red if the object is stationary and green if that object is moving.

  2. The Finch robot should follow the object around with it's beak lighting red if the object stops and green if that object moves.

  3. Whilst in motion, the Finch should be buzzing, but not too loud. ( myF.buzz(Buzz, BuzzDuration)

However my code isn't working as should, I know there are some mistakes but I do not know how to carry on having tried many times. Please see my code below. Any help will be greatly appreciated.

import edu.cmu.ri.createlab.terk.robot.finch.Finch;

public class Main {


//Variable declaration.

static int Buzz = 300;
static int BuzzDuration = 1200;


static int R = 250;
static int G = 250;

static int velocityLeft = 150;
static int velocityRight = 150;

static int turnLeft = -50;
static int turnRight = -50;

static int time = 0;
static int tappedCount = 0;


//Initialization of Finch   

static Finch myF = new Finch();


//Main method

public static void main(String[] args) 


//TAP FINCH ONCE FOR IT TO DO EITHER OF THE FOLLOWING:

//Turn red and follow stationary object
//Turn green and follow an object in motion
//Do nothing if no object is in front of Finch




{


    //while (myF.isFinchUpsideDown() == false)
{

    if

    (myF.isTapped() == true && myF.isObstacle() == true)

{

    {
    //Set Beak LED to Green if object in front is moving. 
    // *******need to add a conditional statement for whether obstacle    in front of finch is moving.

    myF.setLED(R,0,0);
    //myF.setWheelVelocities(velocityLeft,velocityRight);
    myF.buzz(Buzz, BuzzDuration);

        if (myF.isObstacleRightSide() == false)
        {
            myF.setWheelVelocities(0, 255);
        }
            else if (myF.isObstacleLeftSide() == false)
            {
            myF.setWheelVelocities(255, 0);
            }
                else if (myF.isObstacle() == true)
                {

                    myF.stopWheels();


                }

    }

}

    //Beak supposed to be RED if object in front is stationary, Finch should move towards object.

else {

//      if
    //***beak should stay off unless object is placed ahead of it and/or is moving, respectively
//      (myF.isTapped() == false) 

    {   
        myF.setLED(0,0,0);  
        myF.setWheelVelocities(0,0);  
        //myF.quit();
        //myF.stopWheels();
        tappedCount = 0;
    }
}
}
myF.quit();

//  FollowObjectAround();


//RUN AGAIN i.e. "the Move method" whilst running the first algorithms above. 

//      boolean RunAgain = true;
//
//      while(RunAgain) {
//                  
//          Move();
//        
//      }


} //main(String[] args) ends here.

//FIRST PART SUCCESSFUL
//Next part: follow object incorporating corresponding beak colour



//public Main() {

public static void FollowObjectAround() {

while (true){    

//This begins the movement of the finch  

//if (myF.isObstacleLeftSide() == false && myF.isObstacleRightSide() == false || myF.isObstacle() == false)

//LED colours are red, green and blue
//myF.setLED(R,0,0);
//myF.setWheelVelocities(velocityLeft, velocityRight); 
//^^
//here, the robot runs straight into the object and keeps going.
//might be best to have the finch stop when it reaches the object, proceeding movement if that object moves also.


//Triggers the RunAgain function to true so that the program does not stop in one run so that the Finch will continue to move

boolean RunAgain = true;

while(RunAgain) {

//Calling of the Move method for the Finch movements.

Move();

while

(myF.isTapped()==true && myF.isTapped()==true)
//if (myF.isTapped()==true && myF.isTapped()==true)
{
myF.setLED(0,0,0);   
myF.stopWheels();
//break;
}

} // I just added this brace, wasn't there before.

}

//Inside the while, RunAgain loop , there is a conditional statement that makes the program terminate if the Finch has been tapped twice

//if (myF.isTapped()==true && myF.isTapped()==true)
//            {
//                break;
//            }
    }
  //}
//}






// Method for Finch movements

public static void Move() {

if (myF.isObstacleRightSide() == false && myF.isObstacleLeftSide() == false && myF.isObstacle() == true)

{
   MoveStraight();
}

else if (myF.isObstacleRightSide() == false && myF.isObstacleLeftSide() == true)

{
   MoveLeft();
}

else if (  myF.isObstacleRightSide() == true && myF.isObstacleLeftSide() == false)

{
   MoveRight();
}

else if (myF.isObstacleRightSide()==true && myF.isObstacleLeftSide()==true)
{
   StopMoving();

}

}

//=====================================================================================================


//If the finch is moving straight, the light will be green and both of the wheels will move at 150

public static void MoveStraight()

{
  myF.setLED(0, G, 0);

  myF.setWheelVelocities(velocityLeft, velocityRight);

  myF.buzz(Buzz, BuzzDuration);
}

public static void MoveLeft()

{
//If the finch is moving left, the light will be green, the left wheel will move at -50 and the right wheel will move at 150
myF.setLED(0, G, 0);

  myF.setWheelVelocities(turnLeft, velocityRight);

  myF.buzz(Buzz, BuzzDuration);

}

public static void MoveRight()

//If the finch is moving right, the light will be green the left wheel will move at 150 and the right wheel will move at -50
{
  myF.setLED(0, G, 0);

  myF.setWheelVelocities(velocityLeft, turnRight);

  myF.buzz(Buzz, BuzzDuration);

}

public static void StopMoving()

//if the Finch is not moving, the colour of the light will be red and the buzzing will stop
{
  myF.setLED(R, 0 , 0);

  myF.stopWheels();

  myF.buzz(Buzz, BuzzDuration);

}



}
1

There are 1 answers

0
Aala mayyaleh On

//while (myF.isFinchUpsideDown() == false) {

the "{ " here is wrong and here

{ //Set Beak LED to Green if object in front is moving. // *******need to add a conditional statement for whether obstacle in front of finch is moving.