NO
YES
YES
NO
YES IS
TMR2IF=1?
TMR2IF=0
KE=KE+1
ADC
KE=0
T=1;
AVG=SUM/15 IS KE=15?
SUM=0
TMR2IE=0
RETURN
NO
YES
NO
YES
NO
YES
Is RCIF=1?
RS[RSP]=RCREG
RS[RSP]=$
RSP=0 RS[0]=$
RCIF=0 RCIE=0 Is RS[0]=$? &
RS[RSP-1]=0*0D &&
RS[RSP]=0*0A?
TXREG = '#'
RSF=1
RSP=RSP+1
RETURN
SUBROUTINE
YES
YES
IS TRMT=1
CONVERT
unit=p%10, k=p/10
ten=k%10; hnd=p/100;
a[0]=hnd+0x30;
a[1]=ten+0x30;
a[2]=unit+0x30;
RETURN
TRANSMIT
i=0
TXREG=a[i]
IS i<=2
F
i=i+1
RETURN E
F E
ADC
value=((b1*5)/10) [Converting to deg centigrade]
b1= b1 LOGICALLY OR WITH b2 b2=VALUE IN ADRESL b1=SHIFT 8 BIT OF b1 TO LEFT
b1=VALUE IN ADRESH
S=SET CHANNEL 1 USING ADCON0 b1=0, b2=0
RETURN
HIGH_BAUDRATE
ENABLE SERIAL PORT;
SELECT ASYNCHRONOUS MODE
SET HIGH BAUD RATE;
SPBRG=38
ENABLES USART RECEIVE INTERRUPT
RETURN
RETURN LOW BAUDRATE
ENABLE SERIAL PORT, SELECT ASYNCHRONOUS MODE
SET HIGH BAUD RATE;
SPBRG=38 ]
SET TRANSMIT ENABLE BIT CREN=1
NO
YES
NO
YES
IS TRMT=1
i=0
TXREG=R_S[i]
IS i<=69
RETURN i=i+1 GPS TRANSMIT
SERVER
NO
YES
YES
START
READ DATA SENT FROM SOLDIER
DISPLAY DATA
IF HB<55 OR
HB>95 EXTRACT DATA
DISPLAY HEART BEAT PROBLEM ID & NAME
IN MESSAGE BOX
IF CALL IS PRESS?
CALL SOLDIER
PROGRAM
#include<htc.h>
#define _XTAL_FREQ 12000000 void adc();
void transmit();
void tmrcount();
void conv(int p);
void trans_gps();
void high_baudrate();
void gps_transmit();
void low_baudrate();
int value=0,cnt=0,ke=1,m=0,c=0,d=0,e=0,i=0,temp=0;
char a[3];
char id[11]="12345678\r\n";
char pulse=0;
char bpm=0,ckt=0;
int unit=0,ten=0,hnd=0,k=0,old=0,v=0,n=0,no=0,sum=0,avg=0,ths=0,l=0;
int COUNT=0,jk=0,actual=0,gps_stat=0;
char rcvd_str[71];
char rcvd_str_pos=0;
char rcvd_str_flag = 0;
void interrupt dis() {
if (TMR1IF) //timer module for outing the data in each Min {
TMR1IF=0;
COUNT=COUNT+1;
if(COUNT>344) {
TMR1IF=0;
bpm=ckt;
TMR3L=0;
COUNT=0;
ckt=0;
m=1;
TMR2IE=1;
TMR2ON=1;
} }
if (TMR2IF)//for checking 15 adc values and finaly takes the avg {
TMR2IF=0;
ke=ke+1;
adc();
sum=sum+value;
if(ke==15) {
d=c;
ke=0;
avg=sum/15;
c=avg;
sum=0;
e=1;
TMR2IE=0;
} }
if(RCIF) {
rcvd_str[rcvd_str_pos] = RCREG;
if (rcvd_str[rcvd_str_pos] == '$') {
rcvd_str_pos = 0;
rcvd_str[0] = '$';
}
if (rcvd_str[0] == '$' && rcvd_str[rcvd_str_pos-1] == 0x0D &&
rcvd_str[rcvd_str_pos] == 0x0A) {
TXREG = '#';
rcvd_str_flag = 1;
RCIF=0;
RCIE=0;
}
rcvd_str_pos++;
} }
void main() {
GIE=1;
PEIE=1;
BRGH=1;
SPBRG=38;
SYNC=0;
SPEN=1;
TXEN=1;
TXIF=0;
RCIE=1;
CREN=1;
T2CON=0b00000011;//for adc
T1CON=0b10110001;//for sending data to server in each min T3CON=0b00000011;//for counting heart beat
TMR1L=0;
TMR1H=0;
TMR2IE=0;
TMR1IE=1;
TRISA4=1;
TRISA0=1;
TRISD=0;
TRISE2=0;
TRISE0=0;
TRISC6=0;
TRISC7=1;
TRISC0=1;
ADCON0=0x00;
ADCON1=0x80;
while(1) {
pulse=TMR3L;
actual=pulse;
if(temp!=actual) {
ckt++;
}
if(m==1&&e==1&&rcvd_str_flag == 1)// the values are updated with in 1 Min {
CREN=0;
e=0;
m=0;
rcvd_str_flag=0;
low_baudrate();
for(i=0;i<11;i++) {
while(!TRMT);
TXREG=id[i];
} i=0;
conv(avg);
while(!TRMT);
TXREG='T';
while(!TRMT);
transmit();
conv(bpm);
while(!TRMT);
TXREG='H';
while(!TRMT);
transmit();
bpm=0;
gps_transmit();
high_baudrate();
}
temp=actual;
} }
void conv(int p)//function to convert the int value to charecter
{
unit=p%10;
k=p/10;
ten=k%10;
hnd=p/100;
a[0]=hnd+0x30;
a[1]=ten+0x30;
a[2]=unit+0x30;
}
void transmit() {
for(i=0;i<=2;i++) {
while(!TRMT);
TXREG=a[i];
} }
void adc() {
int b1=0,b2=0;
ADCON0=0X05;//chanel 1 b1=ADRESH;
b1=b1<<8;
b2=ADRESL;//converts the 8 bit in adresl and 2 bit in adresh b1=b1|b2;
value=((b1*5)/10);//converting to deg centigrade }
void low_baudrate() {
SPEN=1;
SYNC=0;
BRGH=1;
SPBRG=78;
TXEN=1;
}
void high_baudrate() {
SPEN=1;
SYNC=0;
BRGH=1;
SPBRG=38;
RCIE=1;
CREN=1;
}
void gps_transmit() {
for(i=0;i<=69;i++)
{
while(!TRMT);
TXREG=rcvd_str[i];
}
}
VB PROGRAM
Dim con As New ADODB.Connection Dim rs As New ADODB.Recordset Dim rs1 As New ADODB.Recordset
Private Sub cboSOLDIER_KeyPress(KeyAscii As Integer) If KeyAscii = 39 Then KeyAscii = 0
End Sub
Private Sub cmdCALL_Click() MSComm1.Output = "ATD" & " "
MSComm1.Output = "" + txtContact.Text + "" & ";"
MSComm1.Output = Chr(&HD) End Sub
Private Sub cboSOLDIER_Click() Dim rsFill As New ADODB.Recordset Set rsFill = Nothing
rsFill.CursorLocation = adUseClient
rsFill.Open "SELECT * FROM RECORD WHERE ID='" & Trim(cboSOLDIER.Text)
& "'", con, adOpenDynamic, adLockOptimistic If Not rsFill.EOF Then
txtId.Text = IIf(Not IsNull(rsFill.Fields(0)), rsFill.Fields(0), "") txtName.Text = IIf(Not IsNull(rsFill.Fields(1)), rsFill.Fields(1), "")
txtDesig.Text = IIf(Not IsNull(rsFill.Fields(2)), rsFill.Fields(2), "")
txtContact.Text = IIf(Not IsNull(rsFill.Fields(3)), rsFill.Fields(3), "") End If
End Sub
Private Sub cmdClear_Click() txtId.Text = ""
txtName.Text = ""
txtDesig.Text = ""
txtContact.Text = ""
cboSOLDIER.Text = ""
End Sub
Private Sub cmdSave_Click()
Dim rsSave As New ADODB.Recordset
If Trim(txtId.Text) = "" Then MsgBox "Id can not be blank.", vbCritical:
txtId.SetFocus: Exit Sub Set rsSave = Nothing
rsSave.CursorLocation = adUseClient
rsSave.Open "SELECT * FROM RECORD WHERE ID='" & Trim(txtId.Text) & "'", con, adOpenDynamic, adLockOptimistic
con.BeginTrans If rsSave.EOF Then rsSave.AddNew
rsSave!ID = Trim(txtId.Text) End If
rsSave!Name = Trim(txtName.Text)
rsSave!POSITION = Trim(txtDesig.Text) rsSave!CONTACT = Trim(txtContact.Text) rsSave.Update
con.CommitTrans
MsgBox "Record Saved Sucessfully.", vbInformation, "Jeevan"
cmdClear_Click LoadSolider txtId.SetFocus End Sub
Private Sub LoadSolider()
Dim rsSoldier As New ADODB.Recordset Set rsSoldier = Nothing
rsSoldier.CursorLocation = adUseClient
rsSoldier.Open "SELECT ID FROM RECORD ORDER BY ID", con, adOpenDynamic, adLockOptimistic
cboSOLDIER.Clear
If Not rsSoldier.EOF Then Do Until rsSoldier.EOF
cboSOLDIER.AddItem rsSoldier!ID rsSoldier.MoveNext
Loop End If End Sub
Private Sub Form_Load() MSComm1.PortOpen = True
Set con = New ADODB.Connection
con.Provider = "Microsoft.Jet.OLEDB.4.0;Data
Source=D:\JEEVAN\JEEVAN.mdb;Persist Security Info=False"
con.Open
Set rs = New ADODB.Recordset rs.ActiveConnection = con rs.LockType = adLockOptimistic rs.Open "RECORD"
Set rs1 = New ADODB.Recordset rs1.ActiveConnection = con
rs1.LockType = adLockOptimistic rs1.Open "LOCATION"
LoadSolider End Sub
Private Sub MSComm1_OnComm() Dim S, A, B, C, D, E, F, G, H As String Dim POS, POS1, POS2, POS3, PO As Integer If MSComm1.CommEvent = comEvReceive Then txtReceive.Text = txtReceive.Text + MSComm1.Input End If
S = txtReceive.Text If Len(S) >= 84 Then txtReceive.Text = ""
G = Mid$(S, 1, 8) txtId.Text = G rs.MoveFirst While Not rs.EOF
If rs.Fields(0) = Text1.Text Then txtName.Text = rs.Fields(1) txtDesig.Text = rs.Fields(2) txtContact.Text = rs.Fields(3) End If
rs.MoveNext Wend
POS = InStr(S, "T") D = Mid$(S, POS + 1, 3) txtTemp.Text = D
POS1 = InStr(S, "H") H = Mid$(S, POS1 + 1, 3) txtHB.Text = H
If H < 65 Or H > 85 Then POS2 = InStr(S, "GPRMC") A = Mid$(S, POS2 + 1) POS = InStr(A, "V")
B = Mid$(A, POS + 2, 9) txtLONGI.Text = B POS1 = InStr(A, "N") C = Mid$(A, POS1 + 2, 10) txtLATTI.Text = C
rs1.MoveFirst While Not rs1.EOF
If rs1.Fields(0) = B And rs1.Fields(1) = C Then Label8.Caption = rs1.Fields(2)
End If
rs1.MoveNext Wend
MsgBox "SOLDIER NO:" & Text1.Text & " " & "HEART BEAT:" & H End If
End If End Sub