-
Notifications
You must be signed in to change notification settings - Fork 0
/
CO.c
203 lines (165 loc) · 3.42 KB
/
CO.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#include <reg51.h>
#include <AT89X51.H>
#define port2 P2
unsigned char *command_AT = "AT\r";
unsigned char *command_CMGF="AT+CMGF=1\r";
unsigned char *command_CMGS;
unsigned char *message="For heavens sake thou good soul, save me ! I am at : \n";
unsigned char CTRLZ =0x1A;
unsigned int LAT[9], LON[10];
int switch_pin; //P3.2
char info[70];
char test[6]={"$GPGGA"};
char comma_position[15];
unsigned int check=0,i;
unsigned char a;
void receive_data();
void delay(unsigned int msec)
{
int i,j ;
for(i=0;i<msec;i++)
for(j=0;j<1275;j++);
}
void find_comma()
{
unsigned int i,count=0;
for(i=0;i<70;i++)
{
if(info[i]==',')
{
comma_position[count++]=i;
}
}
}
void init()
{
TMOD=0x20; //Timer select mode2 (8 bit auto-reload)
TH1=0xfd; //the higher byte of timer1 is set for 9600 baud_rate
SCON=0x50; //mode1 8-bit UART to enable receiving of serial data;
TR1=1; //enable timer 1
IT0=0;
IE=0x91;
}
void compare()
{
IE.4=0; //Interrupt disable
find_comma(); //Function to detect position of comma in the string
//lcd_latitude(); //Function to show Latitude
//lcd_longitude(); //Function to show Longitude
check=0;
IE.4=1; //Interrupt enable
}
void receive_data() interrupt 4
{
info[check++]=SBUF; //Read SBUF
if(check<7) //Condition to check the required data
{
if(info[check-1]!=test[check-1])
check=0;
}
RI=0;
}
void ex0_isr (void) interrupt 0
{
//GPS_location_receive();
while(1)
{
if(check==69)
compare();
}
GSM_init();
send_messages();
}
void receive_data()
{
info[check++]=SBUF;
}
void sendcommandcharbychar(unsigned char ch)
{
SBUF=ch;
while(TI==0); //wait until the char is sent and TI is set to 1
TI=0; // set TI back to 0
}
void sendcommand(unsigned char *p)
{
unsigned char *temp=p;
while(*temp!=0x00)
{
sendcommandcharbychar(*temp);
temp++;
}
}
void GSM_write(unsigned char *command_CMGS)
{
sendcommand(command_AT);
sendcommand(command_CMGF);
sendcommand(command_CMGS);
sendcommand(message);
sendcommand(LAT);
sendcommand(LON);
sendcommand(CTRLZ);
}
void send_messages()
{
command_CMGS="AT+CMGS=\"9654309726\"\r"; //aakash
GSM_write(command_CMGS);
command_CMGS="AT+CMGS=\"9958221803\"\r"; //sarthak
GSM_write(command_CMGS);
command_CMGS="AT+CMGS=\"9971408507\"\r"; //akarsha
GSM_write(command_CMGS);
command_CMGS="AT+CMGS=\"8527617051\"\r"; //anannya
GSM_write(command_CMGS);
command_CMGS="AT+CMGS=\"8375895350\"\r"; //ramya
GSM_write(command_CMGS);
}
void gps () {
unsigned char Temp, i;
if (recieve_data() == ‘$’){
if( recieve_data() == ‘G’){
if (recieve_data() == ‘P’){
if (recieve_data() == ‘R’){
if (recieve_data() == ‘M’){
if (recieve_data() == ‘C’){
while (recieve_data() != ‘,’);
while (recieve_data() != ‘,’);
/*checking for “A” condition*/
Temp = recieve_data();
if (Temp == ‘A’||Temp == ‘V’){
while (recieve_data() != ‘,’);
/*latitude values*/
//LCDCmd (0x80);
for (i=0; i<9; i++)
{
LAT[i] = recieve_data();
//LCDData (LAT[i]);
}
while (recieve_data() != ‘,’);
while (recieve_data() != ‘,’);
/*longitude values*/
//LCDCmd (0xc0);
for (i=0; i<10; i++)
{
LON[i] = recieve_data();
// LCDData (LON[i]);
}
}
}
}
}
}
}
}
}
void main()
{
EA=1;
ES=1;
while(1)
{
init();
gps();
if(switch_pin==1){
send_messages();
}
}
}