Ir ao conteúdo

Posts recomendados

Postado

Pessoal eu estou montando um projeto de braço robotico no arduino usando servo motores e botões, para mexer os servos. Está tudo funcionando mas a parte da garra o servo não está funcionando da maneira que deveria, so está mexendo se aperta apenas 1 botão e ele vai e volta, achei que o problema poderia estar nas portas do arduino então coloquei na analogica e coloquei o digitalRead porém continua não funcionando da forma que deveria.. Queria saber se o problema esta no codigo.

#include <Servo.h> //BIBLIOTECA DE FUNÇÕES COM MOTORES SERVOS

 

 // DECLARAÇÃO DOS MOTORES USADOS NO PROJETO...

  Servo servoBase; //RODA O SERVO PARA DIREITA E PARA ESQUERDA...

  Servo servoGarra;   //GARRA DO BRAÇO MECÂNICO...

  Servo servoSD1;  //MOTOR RESPONSÁVEL PELA MOVIMENTAÇÃO HORIZONTAL DO BRAÇO ATRÁS

  Servo servoSD2; //MOTOR RESPONSAVEL PELA MOVIMENTAÇÃO HORIZONTAL DO BRAÇO NA FRENTE

 

  int anguloInicial = 0; //ANGULO INICIAL

  int botaoBaseD = 2; //BOTAO RESPONSAVEL EM MOVER A BASE PARA A DIREITA

  int botaoBaseE = 3; //BOTAO RESPONSAVEL EM MOVER A BASE PARA ESQUERDA

  

  int botaoSubir1 = 4; //BOTAO RESPONSAVEL EM SUBIR A PARTE TRÁS DO BRAÇO

  int botaoDescer1 = 5; //BOTAO RESPONSAVEL EM DESCER A PARTE TRÁS DO BRAÇO

  

  int botaoSubir2 = A0; //BOTAO RESPONSAVEL EM SUBIR A PARTE DA FRENTE DO BRAÇO

  int botaoDescer2 = A1; //BOTAO RESPONSAVEL EM DESCER A PARTE DA FRENTE DO BRAÇO

  

  int botaoGarraFechar = 8; //BOTAO RESPONSAVEL EM FECHAR A GARRA

  int botaoGarraAbrir = 9; //BOTAO RESPONSAVEL EM ABRIR A GARRA

  

  bool leituraBotaoD = 0; //LÊ O BOTAO DA BASE DIREITA

  bool leituraBotaoE = 0; //LÊ O BOTAO DA BASE ESQUERDA

  

  bool leituraBotaoSubir1 = 0; //LÊ O BOTAO QUE SOBE O BRAÇO

  bool leituraBotaoDescer1 = 0; //LÊ O BOTAO QUE DESCE O BRAÇO

  

  bool leituraBotaoSubir2 = 0; //LÊ O BOTAO QUE SOBE O BRAÇO

  bool leituraBotaoDescer2 = 0; //LÊ O BOTAO QUE DESCE O BRAÇO  

  

  bool leituraBotaoFechar = 0; //LÊ O BOTAO QUE FECHA A GARRA  

  bool leituraBotaoAbrir = 0; //LÊ O BOTAO QUE ABRE A GARRA

 

void setup() //FUNÇÃO ONDE SÃO ESPECIFICADAS AS CONFIGURAÇÕES DO PROJETO...

{

  Serial.begin(9600);

  

  //ATRIBUIÇÃO DE PINOS PARA OS MOTORES

  servoGarra.attach(12);

  servoBase.attach(13);

  servoSD1.attach(10);

  servoSD2.attach(11);

  

  pinMode(botaoBaseE,INPUT);

  pinMode(botaoBaseD,INPUT);

  pinMode(botaoSubir1,INPUT);

  pinMode(botaoDescer1,INPUT);

  pinMode(botaoSubir2,INPUT);

  pinMode(botaoDescer2,INPUT);

  pinMode(botaoGarraFechar,INPUT);

  pinMode(botaoGarraAbrir,INPUT);

  Serial.begin(9600);

  servoBase.write(anguloInicial);

  servoGarra.write(anguloInicial);

  servoSD1.write(anguloInicial);

  servoSD2.write(anguloInicial);

}

 

void loop()

{

  leituraBotaoD = digitalRead(botaoBaseD);

  leituraBotaoE = digitalRead(botaoBaseE);

 

  

  while(leituraBotaoD == HIGH && leituraBotaoE == LOW && anguloInicial < 180){

    anguloInicial = anguloInicial + 2;

        servoBase.write(anguloInicial);

        Serial.println("BASE PARA DIREITA");

        delay(25);

leituraBotaoD = digitalRead(botaoBaseD);

leituraBotaoE = digitalRead(botaoBaseE);

       // leituraBotaoD = 0;

  }

    

    while(leituraBotaoE == HIGH && leituraBotaoD == LOW && anguloInicial > 0){

    anguloInicial = anguloInicial - 2;

        servoBase.write(anguloInicial);

         Serial.println("BASE PARA ESQUERDA");

        delay(25);

  leituraBotaoD = digitalRead(botaoBaseD);

  leituraBotaoE = digitalRead(botaoBaseE);

        //leituraBotaoE = 0;

  }

  

  //****************** SOBE E DESCE 1 *****************************

  

  leituraBotaoSubir1 = digitalRead(botaoSubir1);

  leituraBotaoDescer1 = digitalRead(botaoDescer1);

  

  while(leituraBotaoSubir1 == HIGH && leituraBotaoDescer1 == LOW && anguloInicial < 180){

    anguloInicial = anguloInicial + 2;

        servoSD1.write(anguloInicial);

         Serial.println("SOBE 1");

        delay(25);

        //leituraBotaoSubir1 = 0;

  }

  leituraBotaoSubir1 = digitalRead(botaoSubir1);

  leituraBotaoDescer1 = digitalRead(botaoDescer1);

    while(leituraBotaoDescer1 == HIGH && leituraBotaoSubir1 == LOW && anguloInicial > 0){

    anguloInicial = anguloInicial - 2;

        servoSD1.write(anguloInicial);

        Serial.println("DESCE 1");

        delay(25);

       //leituraBotaoDescer1 = 0;

    }

  

  //******************* SOBE E DESCE 2 ****************

  leituraBotaoSubir2 = digitalRead(A0);

  leituraBotaoDescer2 = digitalRead(A1);

  

  while(leituraBotaoSubir2 == HIGH && leituraBotaoDescer2 == LOW && anguloInicial < 180){

    anguloInicial = anguloInicial + 2;

        servoSD2.write(anguloInicial);

        Serial.println("SOBE 2");

        delay(25);

        //leituraBotaoSubir2 = 0;

  }

  leituraBotaoSubir2 = digitalRead(botaoSubir2);

  leituraBotaoDescer2 = digitalRead(botaoDescer2);

   

    while(leituraBotaoDescer2 == HIGH && leituraBotaoSubir2 == LOW && anguloInicial > 0){

    anguloInicial = anguloInicial - 2;

        servoSD2.write(anguloInicial);

        Serial.println("DESCE 2");

        delay(25);

       //leituraBotaoDescer2 = 0;

    }

  

  //******************************GARRA**********************

  

 leituraBotaoFechar = digitalRead(botaoGarraFechar);

 leituraBotaoAbrir = digitalRead(botaoGarraAbrir);

  

  while(leituraBotaoFechar == HIGH && leituraBotaoAbrir == LOW && anguloInicial < 180){

    anguloInicial = anguloInicial + 5;

        servoGarra.write(anguloInicial);

        Serial.println("FECHA ");

        delay(25);

        //leituraBotaoFechar = 0;

  }

 

 leituraBotaoAbrir = digitalRead(botaoGarraAbrir);

  leituraBotaoFechar = digitalRead(botaoGarraFechar);

   

    while(leituraBotaoAbrir == HIGH && leituraBotaoFechar == LOW && anguloInicial > 0){

    anguloInicial = anguloInicial - 5;

        servoGarra.write(anguloInicial);

        Serial.println("ABRE");

        delay(25);

        //leituraBotaoAbrir = 0;

    }

}

  • Membro VIP
Postado

Amigo, obviamente não analisei o código a fundo por este prazer é só seu. Mas da superfície que vi, observei isso:

Em 14/10/2018 às 00:47, Misael Augusto disse:

int anguloInicial = 0; //ANGULO INICIAL 

e isso:

Em 14/10/2018 às 00:47, Misael Augusto disse:

while(leituraBotaoAbrir == HIGH && leituraBotaoFechar == LOW && anguloInicial > 0){

    anguloInicial = anguloInicial - 5;

o que me vem a mente:

se anguloInicial for unsigned int ele sempre vai ser >0. Tenta ver como seu compilador o trata ou explicite como signed int

 

abç

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...