Ir ao conteúdo

Posts recomendados

Postado

Boa noite pessoal, estou fazendo um projeto que retrata a queda livre, então na hora em que o led ligasse, o arduino começaria a contar um tempo, e quando o objeto chegasse no sensor, o arduino pararia de contar, e mostraria no serial o tempo1 - tempo2... Mas o que esta acontecendo é: o led liga e para, o objeto passa pelo sensor, mas o arduino só para de contar quando o led liga de novo.

int led = 12;

#include <Ultrasonic.h>

#define echoPin 8 

#define trigPin 7

Ultrasonic ultrasonic(8,7);
 int func_distancia_ultrasonico()

{
  
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);

digitalWrite(trigPin, LOW);

unsigned long duracao = pulseIn(echoPin, HIGH);
 int distancia = duracao / 58;
  
return distancia;

}
unsigned long temp1;
unsigned long temp2;
unsigned long tempHL;

void setup(){
 
Serial.begin(9600);
pinMode(led, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
}

void ligue(){
  
}
void loop(){
 digitalWrite(led, HIGH);
 delay(1000);
 digitalWrite(led, LOW);
 delay(1000);
  
if (digitalRead(led) == HIGH)
{
 
temp1 = millis();
 
}
{ 
int valor = func_distancia_ultrasonico();
if(valor <=15) 
{
         
temp2= millis();
         
tempHL=(temp2-temp1);
   
 Serial.println(tempHL/1000);
}
}
}

 

  • Confuso 1
Postado

Quando você chama a função delay(1000), o Arduino para por 1 segundo.

Penso que como você quer detectar algo se aproximando, não deveria ter delay no loop, mas caso seja necessário o delay para que o Arduino não processe muito, adicione um delay menor.

Enfim, se entendi bem é isso, caso contrario tente adicionar mais detalhes na sua dúvida.

Postado

@Nicole de Oliveira Não sou muito bom nessa área, então pesquisei um pouco, segue umas modificações:

int valor = 0;

void loop(){
  	//se o led não estiver ligad
	if (digitalRead(led) != HIGH) {
      	//liga led
	digitalWrite(led, HIGH);
	delay(1000);
      	//inicia tempo 1
	temp1 = millis();
	} else { //ja esta ligado
	valor = func_distancia_ultrasonico();
		if(valor <=15) {
          	//desliga
		digitalWrite(led, LOW);
		delay(1000);
          	//tempo 2 final 
		temp2= millis();
        	tempHL=(temp2-temp1);
 		Serial.println(tempHL/1000);
          	//aqui deveria finalizar o programa
		}
	}
}

P.S: Lembrando que o led deve iniciar desligado em setup();

  • Curtir 2

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

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!