[RESOLVIDO] If com problemas (sensor ultrassônico HC-SR04)

 Pessoal, poderiam me ajudar, estou com um projeto aqui e estou com problemas em uma das partes do código 

Aqui está o código:

#include <NewPing.h>
#define TRIGGER_PIN 5
#define ECHO_PIN 6
#define MAX_DISTANCE 200


NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

void setup() {
Serial.begin(9600);
Serial.println("Lendo... ");
}

void loop() {

delay(5000); // Espera 5 seg entre os pings
unsigned int u = sonar.ping(); // Envia o ping.
Serial.print("Ping: ");
Serial.print(sonar.convert_cm(u)); //Converte (se =0 esta fora do alcance ou nao recebeu o echo)
Serial.println("cm");

if (u>20) {
Serial.println("sim");
}else{
Serial.println("nao");
}

}

Quando subo para o arduino e o sensor, ele da o valor sim para qualquer valor diferente de 0 (e quando a mensagem "nao" aparece).

A pergunta é a seguinte: Eu estaria fazendo o if do jeito errado? Pois o que eu quero é que o sensor pegue a distancia e se ela for maior que 20 cm mostre uma mensagem senão mostra outra.  

Exibições: 467

Anexos

As respostas para este tópico estão encerradas.

Respostas a este tópico

Caio

sonar.ping(); - Send a ping, returns the echo time in microseconds or 0 (zero) if no ping echo within set distance limit.

Esse função retorna o tempo de resposta do echo.

 

Creio que você deva usar essa  função sonar.convert_cm(u)  dentro do if .

if (sonar.convert_cm(u)>20) {

ou use sonar.ping_cm() para receber a distancia em cm.

unsigned int u = sonar.ping_cm(); // Envia o ping.

Flavio era exatamente isso, pois do jeito que o if estava ele pegava o valor "Original" e não o "convertido", adicionando a conversão no parâmetro fez ele funcionar do jeito que eu esperava, obrigado pela sua ajuda.

Anexos

Oi CAF, boa noite.

Não identifiquei problemas no seu if, mas não tenho certeza do valor que voce está testando nele.

Pra isto acrescentei uma linha no seu code;   : "  Serial.println("u " + String(u));  // Qual valores imprime aqui? "

com o objetivo de identificar realmente qual o valor testado.

Rode este code e depois me diga que valores imprimiu.

'Rui

http://pastebin.com/JmcQenmp

Rui obrigado pela sua ajuda, eu fiz isto e já resolvi o problema, basicamente o valor que estava sendo usado no parâmetro não estava sendo convertido para cm, ou seja, bastava colocar a conversão dentro do IF. Como tinha me pedido aqui está o resultado com a sua linha de code.

Anexos

Bom dia,

Estou postando aqui apenas para seguir este tópico.

Abs.

Fiz um vídeo simulando no Proteus este código.

Vídeo AQUI

Abs

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço