Challenge

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

Code:

#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 pulse_width; //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

{

pulse_width=((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.