예제 #1
0
/*!
 * \brief follows a line segment.
 * \return Returns TRUE if still on line segment
 */
bool FollowSegment(void) {
  uint16_t currLine;
  REF_LineKind currLineKind;

  currLine = REF_GetLineValue();
  currLineKind = REF_GetLineKind();
  if (currLineKind==REF_LINE_STRAIGHT) {
    PID_Line(currLine, REF_MIDDLE_LINE_VALUE); /* move along the line */
    return TRUE;
  } else {
    return FALSE; /* intersection/change of direction or not on line any more */
  }
}
예제 #2
0
void TURN_Turn(TURN_Kind kind, bool toLine) {
#if 0
  uint16_t lineVal;
  bool online;
#endif
  
  switch(kind) {
    case TURN_LEFT90:
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_LEFT), -TURN_DutyPercent);
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_RIGHT), TURN_DutyPercent);
#if 0
      if (toLine) {
        WAIT1_WaitOSms(TURN_TimeMs*2/3); /* turn half way */
        do {
          lineVal = REF_GetLineValue(&online);
        } while(lineVal>REF_MIDDLE_LINE_VALUE);
      } else {
        WAIT1_WaitOSms(TURN_TimeMs); /* only use waiting time */
      }
#else
      WAIT1_WaitOSms(TURN_TimeMs); /* only use waiting time */
#endif
#if TURN_STOP_AFTER_TURN
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_LEFT), 0);
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_RIGHT), 0);
#if TURN_WAIT_AFTER_STEP_MS > 0
      WAIT1_WaitOSms(TURN_WAIT_AFTER_STEP_MS);
#endif
#endif
      break;
    case TURN_RIGHT90:
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_LEFT), TURN_DutyPercent);
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_RIGHT), -TURN_DutyPercent);
#if 0
      if (toLine) {
        WAIT1_WaitOSms(TURN_TimeMs*2/3); /* turn half way */
        do {
          lineVal = REF_GetLineValue(&online);
        } while(lineVal<REF_MIDDLE_LINE_VALUE);
      } else {
        WAIT1_WaitOSms(TURN_TimeMs); /* only use waiting time */
      }
#else
      WAIT1_WaitOSms(TURN_TimeMs); /* only use waiting time */
#endif
#if TURN_STOP_AFTER_TURN
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_LEFT), 0);
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_RIGHT), 0);
#if TURN_WAIT_AFTER_STEP_MS > 0
      WAIT1_WaitOSms(TURN_WAIT_AFTER_STEP_MS);
#endif
#endif
      break;
    case TURN_LEFT180:
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_LEFT), -TURN_DutyPercent);
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_RIGHT), TURN_DutyPercent);
      WAIT1_WaitOSms(2*TURN_TimeMs);
#if TURN_STOP_AFTER_TURN
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_LEFT), 0);
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_RIGHT), 0);
#if TURN_WAIT_AFTER_STEP_MS > 0
      WAIT1_WaitOSms(TURN_WAIT_AFTER_STEP_MS);
#endif
#endif
     break;
    case TURN_RIGHT180:
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_LEFT), TURN_DutyPercent);
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_RIGHT), -TURN_DutyPercent);
      WAIT1_WaitOSms(2*TURN_TimeMs);
#if TURN_STOP_AFTER_TURN
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_LEFT), 0);
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_RIGHT), 0);
#if TURN_WAIT_AFTER_STEP_MS > 0
      WAIT1_WaitOSms(TURN_WAIT_AFTER_STEP_MS);
#endif
#endif
     break;
    case TURN_STEP_FW:
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_LEFT), TURN_DutyPercent);
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_RIGHT), TURN_DutyPercent);
      WAIT1_WaitOSms(TURN_StepMs);
#if TURN_STOP_AFTER_TURN
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_LEFT), 0);
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_RIGHT), 0);
#if TURN_WAIT_AFTER_STEP_MS > 0
      WAIT1_WaitOSms(TURN_WAIT_AFTER_STEP_MS);
#endif
#endif
      break;
    case TURN_STEP_BW:
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_LEFT), -TURN_DutyPercent);
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_RIGHT), -TURN_DutyPercent);
      WAIT1_WaitOSms(TURN_StepMs);
#if TURN_STOP_AFTER_TURN
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_LEFT), 0);
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_RIGHT), 0);
#if TURN_WAIT_AFTER_STEP_MS > 0
      WAIT1_WaitOSms(TURN_WAIT_AFTER_STEP_MS);
#endif
#endif
      break;
    case TURN_STOP:
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_LEFT), 0);
      MOT_SetSpeedPercent(MOT_GetMotorHandle(MOT_MOTOR_RIGHT), 0);
#if TURN_WAIT_AFTER_STEP_MS > 0
      WAIT1_WaitOSms(TURN_WAIT_AFTER_STEP_MS);
#endif
      break;
  default:
    break;
  }
}