0

这里的类文件在我的 Java 代码中,Finch 机器人被命名为 myF。

我需要让 myF 执行以下操作:

  1. 点击一次以向放置在其前面的对象移动,如果对象静止,则其喙颜色 (myF.setLED..) 为红色,如果该对象正在移动,则为绿色。

  2. Finch 机器人应该跟随物体,如果物体停止,它的喙会亮红色,如果物体移动,它的喙会亮起绿色。

  3. 在运动中,Finch 应该会发出嗡嗡声,但不要太大声。( myF.buzz(Buzz, BuzzDuration)

但是我的代码不能正常工作,我知道有一些错误,但我不知道如何继续尝试多次。请在下面查看我的代码。任何帮助将不胜感激。

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);

}



}
4

1 回答 1

0

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

这里的“{”是错误的,这里

{ //如果前面的物体正在移动,则将喙 LED 设置为绿色。// *******需要添加finch前面的障碍物是否移动的条件语句。

于 2016-02-24T18:27:45.793 回答