//GPS and GSM Based Vehicle tracking system
#define F_CPU 12000000 //12Mhz
#include <avr/io.h> //Header file for AVR device specific I/O Definitions.
#include <avr/pgmspace.h> //Header file for incorporating program space string utilities.
#include <util/delay.h> //Header file for incorporating delay routines.
#include<inttypes.h>
#define USART_BAUDRATE 9600
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
void WaitMs(unsigned int ms);
void usart_init();
unsigned int usart_getch();
void usart_writech(unsigned char data);
void usart_message(unsigned char *var);
unsigned char value,i,lati_value[9],lati_dir, longi_value[10], longi_dir, final_message[30];
unsigned char deg = 0xB0;
int main()
{
DDRC=0x00;
PORTC=0xff;
usart_init();
while(1)
{
a:
value=usart_getch();
if(value=='$')
{
value=usart_getch();
if(value=='G')
{
value=usart_getch();
if(value=='P')
{
value=usart_getch();
if(value=='G')
{
value=usart_getch();
if(value=='A')
{
value=usart_getch();
if(value==',')
{
value=usart_getch();
while(value!=',')
{
value=usart_getch();
}
for(i=0; i<9; i++)
{
lati_value[i] = usart_getch();
}
value = usart_getch();
lati_dir=usart_getch();
value=usart_getch();
for(i=0; i<10; i++)
{
longi_value[i] = usart_getch();
}
value = usart_getch();
for(i=1;value!=',';i++)
{
longi_value[i]=usart_getch();
value=longi_value[i];
}
longi_dir=usart_getch();
}
}
}
}
}
}
if(*lati_value && *longi_value)
{
for(i=0; i<9; i++)
{
final_message[i] = lati_value[i];
}
final_message[9] = lati_dir;
final_message[10] = ' ';
for(i=0; i<10; i++)
{
final_message[i+11] = longi_value[i];
}
final_message[21] = longi_dir;
final_message[22] = '\0';
}
else
goto a;
while(PINC==0xff);
WaitMs(1000);
usart_message("ATH");
WaitMs(50);
usart_message("AT+CMGF=1");
usart_writech(0x0D);
WaitMs(20);
WaitMs(20);
usart_message("AT+CMGS=\"+918907607614\"");
usart_writech(0x0D);
usart_message(final_message);//message
usart_writech(0x1A);
WaitMs(10000);
goto a;
}
return 0;
}
void WaitMs(unsigned int ms)
{
unsigned int i;
for(i=0;i<=ms;i++)
{
_delay_ms(1);
}
}
void usart_init()
{
UCSRB = (1 << RXEN) | (1 << TXEN);
// Use 8-bit character sizes
UCSRC |= (1 << URSEL) | (1 << UCZS0) | (1 << UCZS1);
// Load lower 8-bits of the baud rate value into the low byte of the UBRR register
UBRRL = BAUD_PRESCALE;
UBRRH = (BAUD_PRESCALE >> 8);
}
unsigned int usart_getch()
{
while (!(UCSRA & (1 << RXC)));
return(UDR);
}
void usart_writech(unsigned char data)
{
while(!(UCSRA & (1<<UDRE)));
UDR = data;
}
void usart_message(unsigned char *var)
{
int h;
while(*var)
usart_writech(var++); // send message
for(h=0;h<=200;h++);
}
Network and collaborate with thousands of CTOs, CISOs, and IT Pros rooting for you and your success.
”The time we save is the biggest benefit of E-E to our team. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange.
Our community of experts have been thoroughly vetted for their expertise and industry experience.
The Distinguished Expert awards are presented to the top veteran and rookie experts to earn the most points in the top 50 topics.