Ir ao conteúdo
  • Cadastre-se

C Função millis do Arduino


Posts recomendados

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
Link para o comentário
Compartilhar em outros sites

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.

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

@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
Link para o comentário
Compartilhar em outros sites

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