Observações
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;
}