Sobre void larga():

Quando for largar o tubo na posição desejada, é preciso fazer o robo andar um pouco para largar mais no meio do quadrado. Porem alterar a função para fazer isso atrapalhará caso sua resolução de problema envolva largar o tubo verde quando o pega.

ViraRobo2:

Pode ser usada em casos em que o robo bate em algum obstáculo a sua frente, porém não substitui a função ViraRobo, pois é muito mais lenta e propensa a acúmulo de erros.

///////////////////////////////////////////////////////////////////////////////
 //VIRA O ROBO PARA A ORIENTAÇÃO DESEJADA SEM INVADIR A CASA DA FRENTE

void viraRobo2(int direcao_final) //precisa melhorar
{
  int qtoVira90Graus, i;

  qtoVira90Graus = direcao_final - robo_d;

  //corrige rotacao do robo
  if(qtoVira90Graus == -3)
      qtoVira90Graus = 1;
  else if (qtoVira90Graus == 3)
      qtoVira90Graus = -1;
 
  for(i = 1; i <= abs(qtoVira90Graus); i++)
  {
      //260 valor experimental
      RotateMotorEx(OUT_BC, POT_FRENTE, 260, 0, false, false);

     //-735 valor experimental
     // 27 valor experimental
     // 40 valor experimental
     if(qtoVira90Graus < 0) RotateMotorEx(OUT_BC, 40, -735, 27, true, true);
     else RotateMotorEx(OUT_BC, 40, -735, -27, true, true);

     //375 valor experimental
     RotateMotorEx(OUT_BC, POT_FRENTE, 375, 0, true, true);

     corrige();

     RotateMotorEx(OUT_BC, POT_FRENTE, ANG_VOLTA_FAIXA, 0, false, false);
  }

  robo_d = direcao_final;
}

Última atualização: quinta-feira, 6 out. 2011, 15:52