Challenge

Project 2 - Measuring distance of an object using ultrasonic sensor (HC-SR04)

Code for the Project:-

#include <avr/io.h>
#define F_CPU 16000000ul
#include <util/delay.h>
#include <avr/interrupt.h>
#include <string.h>
#include <stdlib.h>

#define trigger PB1 //defining trigger pin as PB1
#define echo PB0 //defining echo pin as PB0
int pw; //global variable

void trigger_init(void); //prototypes of functions
void timer_init(void);

//function definition of trigger
void trigger_init()
{
PORTB|=(1<<trigger);
_delay_us(25); //delay to send pulses or signals
PORTB &= ~(1<<trigger);
}

void timer_init()
{
ACSR |=(1<<ACIC); //this bit enables the Input Capture function in Timer/Counter1 to be triggered by the Analog Comparator
TIFR1 |=(1<<ICF1); //The ICF1 bit is set (one) to flag an input capture event, indicating that the Timer/Counter1 value has been transferred to the input capture register - ICR1
TCNT1=0; //initilization of counter with 0
TCCR1A = 0b00000000; //Normal Timer mode operation
TCCR1B = 0b00000100; //prescaling with 256
TIMSK1 |= (1<<ICIE1);
sei(); //Global interrupt enable
}

ISR(TIMER1_CAPT_vect)// Interrupt serive routine
{
pw=((ICR1-12)*10)/625; //pulse width calculation
}

int main(void)
{
Serial.begin(9600); //initialization of serial monitor
unsigned int distance=0;
DDRB |= (1<<1); //configuration of trigger pin as output
/* Replace with your application code */
while (1)
{
trigger_init(); //calling function of trigger
timer_init(); //calling timer initialization func
distance=(34*pw)/2; ///calculating distance
Serial.println(distance); //printing serial monitor
_delay_ms(40);
Serial.println("cm"); // printing unit
}
}

Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.