#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);
          }
        } 
      }
  }
}