Olá pessoal, sou novo no mundo do arduino e estou desenvolvendo um projeto utilizando a função pulseIn para saber o tempo q determinada porta fica em determinado nivel lógico, só q como tds sabem, esse tempo é em microsegundos, e eu necessito q seja  em milisegundos, a minha idéia foi dividir o valor por 1000, mas gostaria de eliminar os valores pós virgula, truncando ou arredondando o valor obtido, se alguem souber como faço isso agradeço.

Exibições: 3561

Responder esta

Respostas a este tópico

Olá,

A função pulseln retorna o o valor do tempo do pulso em microsegundos em uma variável do tipo long int (inteiro).

Portanto é só dividir o valor por 1000 e salvar na própria variável que agora armazena o valor do pulso em milisegundos.

Abaixo está o código exemplo para a função pulseln extraída do site do arduino. pulseln

int pin = 7; 
unsigned long duration;
void setup() {
pinMode(pin, INPUT);
}
void loop() {
duration = pulseIn(pin, HIGH);
}

Para que a variavel duration registre o valor em milisegundos faça assim (também acrescentei os comandos de forma a imprimir os valores no monitor serial0:

int pin = 7; 
unsigned long duration;
void setup() {
pinMode(pin, INPUT);
Serial.begin(9600);
}
void loop() {
duration = pulseIn(pin, HIGH);
duration = duration /1000;
Serial.println(duration);
}

Se quiser salvar o valor em uma variável float faça o seguinte:

int pin = 7; 
unsigned long duration;
void setup() {
pinMode(pin, INPUT);
Serial.begin(9600);
} 
void loop() {
duration = pulseIn(pin, HIGH);
duration = duration /1000;
Serial.println(duration);
float tempo = duration;
Serial.println(tempo);
}

Mas saiba que qualquer pulso com duração igual ou inferior a 999 us será interpretado com um pulso de 0 ms.

Abraço.

Muito obrigado.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço