#define branco 48
#define preto 16
#define parede 28
#define folga 5 // Folga entre sensor de luz e a parede
#define semparede 50
#define tempo 50
#define parar 100
#define velocidade 7
#define cruzamentos 7
int contador;
task main()
{
SetSensor (SENSOR_1, SENSOR_LIGHT);
SetSensor (SENSOR_2, SENSOR_LIGHT);
SetSensor (SENSOR_3, SENSOR_LIGHT);
contador=0;
while(1)
{
On(OUT_A + OUT_C);
SetPower (OUT_A + OUT_C, velocidade);
if(SENSOR_1 <=preto && SENSOR_3 <= preto && SENSOR_2 < semparede) // Se encontrar parede
{
if(SENSOR_2 <= parede - folga) // Se encontrar parede muito próxima
{
Off(OUT_C);
until (SENSOR_2 > parede - folga || SENSOR_2 > semparede || SENSOR_1 >= branco || SENSOR_3 >= branco);
On(OUT_A + OUT_C);
SetPower (OUT_A + OUT_C, velocidade);
}
if(SENSOR_2 >= parede + folga) // Se encontrar parede muito próxima
{
Off(OUT_A);
until (SENSOR_2 < parede + folga || SENSOR_2 > semparede || SENSOR_1 >= branco || SENSOR_3 >= branco);
On(OUT_A + OUT_C);
SetPower (OUT_A + OUT_C, velocidade);
}
}
else // Se não encontrar parede
{
if(SENSOR_1 >= branco && SENSOR_3 >= branco) // Se encontrar Branco nos dois sensores
{
On(OUT_A + OUT_C); // Segue em frente
SetPower (OUT_A + OUT_C, velocidade);
until (SENSOR_1 <= preto || SENSOR_3 <= preto); // Esperar até encontrar Preto pelo menos num sensor
PlaySound (1);
contador++;
if (contador==cruzamentos)
{
Wait (parar);
Off (OUT_A + OUT_C);
break;
}
On(OUT_A + OUT_C);
SetPower (OUT_A + OUT_C, velocidade);
}
else
{
if(SENSOR_1 >= branco) // Se no sensor 1 encontrar Branco
{
Off(OUT_A); // Desligar o motor A
until(SENSOR_1 <= preto || SENSOR_3 >= branco); // Esperar até que o sensor 1 seja menor que Branco
On(OUT_A + OUT_C);
SetPower (OUT_A + OUT_C, velocidade);
}
if(SENSOR_3 >= branco)
{
Off(OUT_C);
until(SENSOR_3 <= preto || SENSOR_1 >= branco); // Esperar até que o sensor 3 seja menor que Branco
On(OUT_A + OUT_C);
SetPower (OUT_A + OUT_C, velocidade);
}
}
}
}
}