Project 2 - Measuring distance of an object using ultrasonic sensor (HC-SR04)
#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>
#include <avr/interrupt.h>
#define TRIG_PIN PD0
#define ECHO_PIN PD1
void init_timer() {
TCCR1B |= (1 << CS11); // Set timer prescaler to 8
}
void init_io() {
DDRD |= (1 << TRIG_PIN); // Set TRIG_PIN as output
DDRD &= ~(1 << ECHO_PIN); // Set ECHO_PIN as input
}
void trigger_sensor() {
PORTD |= (1 << TRIG_PIN);
_delay_us(10);
PORTD &= ~(1 << TRIG_PIN);
}
uint16_t measure_distance() {
uint16_t pulse_width = 0;
while (!(PIND & (1 << ECHO_PIN))); // Wait for echo start
TCNT1 = 0; // Start timer
while (PIND & (1 << ECHO_PIN)); // Wait for echo end
pulse_width = TCNT1; // Capture timer count
return pulse_width;
}
int main() {
init_io();
init_timer();
while (1) {
trigger_sensor();
_delay_ms(60); // Wait for sensor to reset
uint16_t distance = measure_distance();
// Convert distance and display on LCD or Serial Monitor
_delay_ms(1000); // Delay between measurements
}
}
