예제 #1
0
  public Follow() {
    // TODO Auto-generated constructor stub
    ultrasonicSensor = new UltrasonicSensorEcho(49, SensorPort.S4);
    display = new FollowDisplay();
    LCD.drawString("Left for", 0, 0);
    LCD.drawString("Task 1-2 'curve'", 0, 1);
    LCD.drawString("Right for", 0, 3);
    LCD.drawString("Task 3 'platoon'", 0, 4);
    IRArray = new IRSensorArray(SensorPort.S1, SensorPort.S2, SensorPort.S3);
    menuSelection = getTaskNumber();
    taskSetUp(menuSelection);
    motors = new MotorController(MotorPort.A, MotorPort.B);
    SensorPort.S4.setSensorPinMode(SensorPort.SP_DIGI0, SensorPort.SP_MODE_INPUT);
    SensorPort.S4.setSensorPinMode(SensorPort.SP_DIGI1, SensorPort.SP_MODE_OUTPUT);
    display.follow = this;

    new Thread(this).start();
  }
예제 #2
0
  @Override
  public void run() {
    // TODO Auto-generated method stub
    while (!Button.ENTER.isDown()) ;
    LCD.clear();
    if (menuSelection == 1) {
      LCD.drawString("Task 1-2 Selected", 0, 0);
    } else if (menuSelection == 2) {
      LCD.drawString("Task 3 Selected", 0, 0);
    }
    ultrasonicSensor.wakeUp();
    display.wakeUp();
    LCD.drawString("Threads Awake", 0, 1);
    leftTunedSpeed = leftSpeed;
    rightTunedSpeed = rightSpeed;
    //		switchGains();
    LCD.drawString("Running...", 0, 2);
    try {
      Thread.sleep(50);
      while (!Button.ESCAPE.isDown()) {
        Thread.sleep(timeStep);
        //				if(menuSelection == 1)
        //				{
        //					if(Math.abs(lineError) > 200)
        //					{
        //						counter++;
        //						if(counter > 10)
        //						{
        //							switchGains();
        //							counter = 0;
        //						}
        //					}
        //					if(state == 0)
        //					{
        //						Sound.beep();
        //					}
        //				}
        //				else
        //				{
        //					counter++;
        //					if(counter > 50)
        //					{
        //						state = 0;
        //						switchGains();
        //					}
        //				}

        //				state = 0;
        //				switchGains();
        //				state = 0;
        //				else
        //				{
        //					counter = 0;
        //				}

        rangeReading = ultrasonicSensor.getPulseLenght() / 1000;
        //					LCD.drawString("" + echoValue, 0, 4);

        rangePower =
            (rangeFinderPID.pid(echoTarget, rangeReading, (double) timeStep / 1000))
                / 40; // blah/40

        position = IRArray.calculatePosition();

        lineError =
            10 * linePID.pid(0, position, (double) timeStep / 1000) / (3 * IR_MAX_ERROR); // 360

        readings = IRArray.poleSensor();

        if (menuSelection == 1) // Task 1-2: Line and Block Stop
        {
          if (rangeReading < 600) {
            leftTunedSpeed = (int) (setPower - lineError - rangePower);
            rightTunedSpeed = (int) (setPower + lineError - rangePower);
          } else {
            leftTunedSpeed = (int) (setPower - lineError);
            rightTunedSpeed = (int) (setPower + lineError);
          }
          //					if(echoValue < 300)
          //					{
          //						leftTunedSpeed /= 5;
          //						rightTunedSpeed /= 5;
          //					}
          if (rangeReading < 400) {
            stop = true;
          } else {
            stop = false;
          }
        } else if (menuSelection == 2) // Task 3: Platooning and Redline Stop
        {
          rangeFinderPID.capI(100);
          //					if(echoValue < echoTarget)
          //					{
          //						leftTunedSpeed = (int)(set - curveError - echoError)/5;
          //						rightTunedSpeed = (int)(set + curveError - echoError)/5;
          //					}
          //					else
          //					{
          leftTunedSpeed = (int) (setPower - lineError - rangePower);
          rightTunedSpeed = (int) (setPower + lineError - rangePower);
          //					}
          if (readings[0] < 800
              && readings[0] > 400
              && readings[2] < 800
              && readings[2] > 400
              && readings[1] < 800
              && readings[1] > 400) {
            stop = true;
          }
        }
        if (stop) {
          motors.stopMotors();
          LCD.drawString("Stopped", 0, 3);
        } else {
          if (menuSelection == 1) motors.updateMotors(leftTunedSpeed, rightTunedSpeed);
          else {
            if (leftTunedSpeed < 0 && rightTunedSpeed < 0) {
              motors.leftMotor.motor.backward();
              motors.rightMotor.motor.backward();
              leftTunedSpeed = setPower - leftTunedSpeed;
              rightTunedSpeed = setPower - rightTunedSpeed;

            } else {
              motors.leftMotor.motor.forward();
              motors.rightMotor.motor.forward();
            }
            motors.updateMotors(leftTunedSpeed, rightTunedSpeed);
          }
        }
      }
    } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }