//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++);
}
Experts Exchange always has the answer, or at the least points me in the correct direction! It is like having another employee that is extremely experienced.
When asked, what has been your best career decision?
Deciding to stick with EE.
Being involved with EE helped me to grow personally and professionally.
Connect with Certified Experts to gain insight and support on specific technology challenges including:
We've partnered with two important charities to provide clean water and computer science education to those who need it most. READ MORE