/*******************************************************************************
*
*    I15 - Usando sensor ultrassônico sem biblioteca
*    Autor: Angelo Luis Ferreira
*    28/02/2022
*    http://squids.com.br/arduino
*
*******************************************************************************/
int pinTrig = 8; // pino usado para disparar os pulsos do sensor
int pinEcho = 9; // pino usado para ler a saida do sensor
float tempoEcho = 0;
// Obs. Velocidade do som = 340,29 m/s = 0.00034029 m/us
const float velocidadeSom = 0.00034029; // em metros por microsegundo
void setup(){
  // Configura pinos Trig e Echo
  pinMode(pinTrig, OUTPUT); // configura pino TRIG como saída
  pinMode(pinEcho, INPUT); // configura pino ECHO como entrada
  // Inicializa pino Trig em nível baixo
  digitalWrite(pinTrig, LOW);
  
  // Inicializa a porta serial
  Serial.begin(9600);
}
void loop(){ 
  gatilhoSensor(); // envia pulso trigger (gatilho) para disparar o sensor  
  tempoEcho = pulseIn(pinEcho, HIGH); // mede o tempo de duração do sinal no pino de leitura em us
  // exibe no monitor serial
  Serial.print("Distancia em metros: ");
  Serial.println(calculaDistancia(tempoEcho), 4);
  Serial.print("Distancia em centimetros: ");
  Serial.println(calculaDistancia(tempoEcho)*100);
  Serial.println("------------------------------------");
  
  delay(2000); // aguarda dois segundos
}
// Funçao para enviar o pulso de trigger
void  gatilhoSensor(){
  // Para fazer o HC-SR04 enviar um pulso ultrassonico, nos temos
  // que enviar para o pino de trigger um sinal de nivel alto
  // com pelo menos 10us de duraçao
  digitalWrite(pinTrig, HIGH);
  delayMicroseconds(10);
  digitalWrite(pinTrig, LOW);
}
// Função para calcular a distancia em metros
float calculaDistancia(float tempoMicrossegundos){
  return((tempoMicrossegundos*velocidadeSom)/2); // velocidade do som em m/microssegundo
}