Ir ao conteúdo
  • Cadastre-se

Controlar um servo motor por um único botão.


Posts recomendados

Por favor, me ajudem... Eu gostaria de controlar um servo motor por um único botão. O projeto é o seguinte, ao pulsar o botão o motor gira um determinado grau e fica, quando pulsar de novo ele volta para o centro e assim sucessivamente.

Estou utilizando a linguagem C no compilador MikroC, segue o código inicial:

//////////////////////////////////////////////////////////////////////////////////////

#define S1 RA2_bit  //define o port RA2 como S1.
#define S2 RA3_bit //define o porta RA3 como S2.
#define motor RB4_bit //define o port RB4 como motor.
 int estado1 = 1;
 int estado2 = 0;
//protótipos das funções de controle do servo.
void servo_antihorario();
void servo_centro();
void servo_horario();
void main()  //função principal.
{
  TRISB = 0b00000000;  //definição de saída.
  PORTB = 0b00000000;  //garante nível lógico 0.
  TRISA = 0b00011100;  //definição de entrada.
  PORTA = 0b00000010;  //habilita os Leds no hardware.
  
  while(1)
  {
    if (S1 == 1 && estado1 == 1){
      servo_centro();
    }
     else if ( servo_horario();
  }
}
 //função move serve horario.
 void servo_horario()
 {
 do{
  motor = 0;
  delay_us(18000);
  motor = 1;
  delay_us(2000);
  }while (S1 == 0 && estado1 == 1);
 }
 //função move servo antihorario.
 void servo_antihorario()
 {
  motor = 0;
  delay_us(19000);
  motor = 1;
  delay_us(1000);
 }
 //função move servo centro.
 void servo_centro()
 {
  motor = 0;
  delay_us(18500);
  motor = 1;
  delay_us(1500);
 }

//////////////////////////////////////////////////////////////

Este código que criei não esta funcionado. Eu já fiz de varias formas e nada. Me ajudem please.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Gabriel Pic     não sei sobre pic ,  mas sei alguma coisa sobre a linguagem c, e nesse trecho aqui :

o else if não está certo, está faltando comparar com alguma coisa, e esse while ficaria em loop infinito por que  não tem nada que mude o valor do while, precisa colocar um jeito de mudar o valor de while e isso seria com uma variável, mudando o valor da variável sairia do loop.

while(1)
  {
    if (S1 == 1 && estado1 == 1){
      servo_centro();
    }
     else if ( servo_horario();
  }
}

o else if seria assim:

while(1)
  {
    if (S1 == 1 && estado1 == 1){
      servo_centro();
    }
     else{if (s1==0){servo_horario();}/*aqui coloquei s1 mas precisa ver se é essa variável mesmo*/
  }
}

e dentro desse while teria que ter um jeito de mudar esse s1 para pode ir para a função servo_centro ou servo_horário.    

já nessa função aqui parece que ficaria em loop infinito 

//função move serve horario.
 void servo_horario()
 {
 do{
  motor = 0;
  delay_us(18000);
  motor = 1;
  delay_us(2000);
  }while (S1 == 0 && estado1 == 1);
 }

porque s1 e estado1 permanece com o mesmo valor, para resolver isso precisa colocar uma leitura de teclado para mudar o valor de s1 e estado1 para que o programa siga.

e nessa função aqui 

/função move servo antihorario.
 void servo_antihorario()
 {
  motor = 0;
  delay_us(19000);
  motor = 1;
  delay_us(1000);
 }

se motor = 0 significa que o motor deve ficar desligado e  motor =1 significa que o motor seja ligado então está certo e o motor ficará desligado por um tempo e depois será ligado e vai aguardar um curto tempo e sairá da função mas o motor permanecerá ligado.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!