Pessoal bom dia!

Minha dúvida é o seguinte, estou querendo que ao encontrar um objeto (bolinha) com o sensor ultrassônico HCR04, entre numa função chamado regatar, onde o servo motor deverá abrir e fechar pegando a bolinha. Sendo assim, apenas um teste. Porém, ele fica num loop sem parar de abrir e fechar sendo que o objeto está na frente da bolinha e portanto ele fica identificando a todo momento o objeto. Como eu poderia programar para que ele faça apenas a função resgatar numa única vez e saia do loop?

void loop(){
int dist = ultrasonic.Ranging(CM);
 if (dist <8){
   resgatar();
 }    
 
 
 
A função vítima seria assim:
 
 
void resgatar() {
servo.write(35);
delay(10);
servo.write(130);
delay(10);
servo.write(0);
}

Exibições: 365

Responder esta

Respostas a este tópico

Olá.

  Se vc já resgatou precisa saber disso..

  Algo como:

bool resgatado = false; //variavel de 1 bit para indicar se já pegou

void loop(){
int dist = ultrasonic.Ranging(CM);
 if (dist <8){
   if (!resgatado) { resgatar(); resgatado=true;}
 }    
Outra coisa, sensores de distancia sempre tem um minimo e um máximo alcance.
Os do tipo ultrasom costumam ter um minimo grande.
Ref:
Esse sensor percebe a 2cm ou mais. A menos de 2cm ele pode medir o mesmo que sem nada na frente dele, gerando um erro.
Considere colocar ele a bem mais que 2cm de sua bolinha, se não estiver.

Muito obrigado Eduardo!

Então colocando esse flag consigo fazer uma única vez abrir e fechar a garra?

Posso colocar então >=8?

at.te


Emerson

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço