#include "pico/stdlib.h"
#include "hardware/gpio.h"
int timeout = 26100; // max ยตs to wait
// Fire TRIG pulse, measure ECHO width
uint64_t getPulse(uint trigPin, uint echoPin) {
gpio_put(trigPin, 1);
sleep_us(10); // โฅ10ยตs HIGH pulse
gpio_put(trigPin, 0);
uint width = 0;
// Wait for ECHO to go HIGH
while (gpio_get(echoPin) == 0)
tight_loop_contents();
// Count ยตs while ECHO stays HIGH
while (gpio_get(echoPin) == 1) {
width++;
sleep_us(1);
if (width > timeout) return 0;
}
return width;
}
// Convert pulse width โ centimeters
int getCm(uint trig, uint echo) {
uint64_t pulse = getPulse(trig, echo);
return pulse / 29 / 2;
}
// Convert pulse width โ inches
int getInch(uint trig, uint echo) {
uint64_t pulse = getPulse(trig, echo);
return (long)pulse / 74.f / 2.f;
}
int main() {
stdio_init_all();
uint trigPin = 2, echoPin = 3;
gpio_init(trigPin); gpio_set_dir(trigPin, GPIO_OUT);
gpio_init(echoPin); gpio_set_dir(echoPin, GPIO_IN);
while (true) {
int d = getCm(trigPin, echoPin);
printf("\nDistance: %d cm", d);
sleep_us(10000);
}
}