#define TRIG_PIN 25 // Pino TRIG do HC-SR04
#define ECHO_PIN 26 // Pino ECHO do HC-SR04
void setup() {
Serial.begin(115200);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void loop() {
long duration;
long int distance;
// Envia um pulso de 10 microssegundos no TRIG
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
// Mede o tempo de resposta no ECHO
duration = pulseIn(ECHO_PIN, HIGH);
// Calcula a distância (velocidade do som: ~343 m/s)
distance = duration * 0.0343 / 2;
Serial.print("Distância: ");
Serial.print(distance);
Serial.println(" cm");
delay(500);
}
//ESP-IDF
/*
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "driver/gpio.h"
#include "esp_timer.h"
#define TRIG_PIN GPIO_NUM_25
#define ECHO_PIN GPIO_NUM_26
void app_main() {
// Configura o pino TRIG como saída
esp_rom_gpio_pad_select_gpio(TRIG_PIN);
gpio_set_direction(TRIG_PIN, GPIO_MODE_OUTPUT);
// Configura o pino ECHO como entrada
esp_rom_gpio_pad_select_gpio(ECHO_PIN);
gpio_set_direction(ECHO_PIN, GPIO_MODE_INPUT);
while (1) {
int64_t start_time = 0, end_time = 0;
float distance_cm = 0;
// Garante que TRIG começa em LOW
gpio_set_level(TRIG_PIN, 0);
ets_delay_us(2);
// Envia pulso de 10 microsegundos
gpio_set_level(TRIG_PIN, 1);
ets_delay_us(10);
gpio_set_level(TRIG_PIN, 0);
// Aguarda ECHO ir para HIGH
while (gpio_get_level(ECHO_PIN) == 0) {
start_time = esp_timer_get_time(); // microsegundos
}
// Aguarda ECHO voltar para LOW
while (gpio_get_level(ECHO_PIN) == 1) {
end_time = esp_timer_get_time(); // microsegundos
}
int64_t duration = end_time - start_time;
// Converte tempo em distância (velocidade do som = 343 m/s ou 0.0343 cm/us)
distance_cm = (duration * 0.0343) / 2;
printf("Distância: %.2f cm\n", distance_cm);
vTaskDelay(pdMS_TO_TICKS(500)); // Espera 500 ms
}
}
*/