persistent float PADRAO_VERMELHO[4];
persistent int ACAO_VERMELHO;

persistent float PADRAO_AZUL[4];
persistent int ACAO_AZUL;

persistent float PADRAO_AMARELO[4];
persistent int ACAO_AMARELO;

persistent float PADRAO_VERDE[4];
persistent int ACAO_VERDE;

persistent float LINHA_PRETA_D;
persistent float MESA_BRANCA_D;
persistent float LINHA_PRETA_E;
persistent float MESA_BRANCA_E;

int ACAO_PARE=0;
int ACAO_VIRE_ESQ=1;
int ACAO_VIRE_DIR=2;
int ACAO_SIGA=3;
int SIGA_TEMPO;





void MenuCalibraCor()
{
   float maxesc[]={63.75, 128};

   int opcoes[]={0,0}, i=0, opcaoant=-1;
   char Cor[4][13];
   char Tipo[2][13];

   Cor[0]="Vermelho";
   Cor[1]="Verde";
   Cor[2]="Azul";
   Cor[3]="Amarelo";

   Tipo[0]="Calibrar Cor";
   Tipo[1]="Alterar Acao";


   sleep(.3);

   while(1)
   {
      opcoes[i]=(int)((float)knob()/maxesc);

      if ((opcoes[i]!=opcaoant)&&(i==0))
      {
         printf("Selecione Cor: %d - %s \n", opcoes[0]+1, Cor[opcoes[0]]);
      }
      if ((opcoes[i]!=opcaoant)&&(i==1))
      {
         printf("Opcoes: %d - %s \n", opcoes[1]+1, Tipo[opcoes[1]]);
      }
     
      if (start_button())
      {
         i++
         sleep(.3);
         opcaoant=-1; 
      }

      if (i==2)
      {
         printf("Deu: %d %d ", opcoes[0],opcoes[1]);
         break;
      }
      
      opcaoant=opcao[i];

      sleep(.1);
   }

}



void SigaLuz()
{  
    int i=(int)(knob()/255)*2-1;  
    while (!stop_button())
    {  
       SegueLuz(AchaLuz(i),i);
    }    
}


int AchaLuz(int Lado)
{
    int i;
    int melhorposicao=0;
    int melhorvalor=-255*Lado; 
    int valor;
    GiraEsquerda();
    for (i=0; i<180; i++)
    {
        valor=(analog(0)-analog(2));
        
        if (Lado==1)
          {
            if (valor>melhorvalor)
              {
                melhorvalor=valor;
                melhorposicao;
            }
        }
        else
          {
            if (valor<melhorvalor)
              {
                melhorvalor=valor;
                melhorposicao;
            }
        }
        printf("%d \n",melhorvalor);
        sleep(6.0/180.0);
    }
    GiraDireita();
    for (i=0; i<180; i++)
    {   
        valor=(analog(0)-analog(2));
        if (Lado==1)
          if (melhorvalor-valor<=2)
            break;
        if (Lado==-1)
          if (melhorvalor-valor>=-2)
            break;
        
        printf("%d \n",melhorvalor-valor);
        sleep(6.0/180.0);
    }    
    alloff();
    return melhorvalor;
}

void SegueLuz(int melhorvalor, int Lado)
{
    int valor;
    while (!stop_button())
    {  
       Frente();
       sleep(3.0);
       valor=(analog(0)-analog(2));
       if (Lado==1)
       {
          if (valor>=melhorvalor)
          {
             melhorvalor=valor;
          }
          else
             break;
       }
       else
       {
          if (valor<=melhorvalor)
          {
             melhorvalor=valor;
          }
          else
             break;
       }
    }    
    
}

void GiraEsquerda()
{
    motor(0,-40);
    motor(1,40);      
}

void GiraDireita()
{
    motor(0,40);
    motor(1,-40);      
}

void Frente()
{
    motor(0,40);
    motor(1,40);
}
cursos/introrobotica/2008-2/grupo2/sensortp3.c.txt · Última modificação: 2008/12/04 20:00 por introrobg02