Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

#include <16F877A.

h>

#use delay (clock=20000000)


#use rs232 (baud = 9600,
xmit=PIN_B0,rcv=PIN_B1,stream=GSM)

#include <lcd.c>
#include <gsm.c>
#include <timer.c>

byte ch = 0;
byte data[95];
byte get[] = {"get"};
byte help[] = {"help"};
byte d1on[] = { "d1on" }; //get the meter reading
byte d1off[] = { "d1off" }; //get the meter reading

byte num[15] = "";

int16 count = 0;
unsigned int balance = 0;

void start()
{
lcd_putc('\f'); //Clear LCD Display
lcd_gotoxy(1,1);
printf(lcd_putc," Energy Meter");
lcd_gotoxy(1,2);
printf(lcd_putc,"Billing, Control");
delay_ms(2500);
}

void sendingsms()
{
lcd_gotoxy(1,2);
printf(lcd_putc,"Sending SMS...");
}

void shownum()
{
lcd_putc('\f');
lcd_gotoxy(1,1);
printf(lcd_putc,"num = %s",num);
}

void show_message()
{
lcd_putc('\f');
lcd_gotoxy(1,1);
printf(lcd_putc,"Received Message");
lcd_gotoxy(1,2);
printf(lcd_putc,"from:%s",num);
}

void send_sms_num()
{
output_high(PIN_C3);
fprintf(GSM,"AT+CMGS=\"%s\"\r\n",num);
delay_ms(2000);
}

void main()
{

lcd_init();
start();

output_high(PIN_D2); //LED
delay_ms(1000);
output_low(PIN_D2);
delay_ms(1000);
output_high(PIN_D2);
delay_ms(1000);
output_low(PIN_D2); Kusuma@2025

output_high(PIN_D6);
output_high(PIN_D7);

lcd_putc('\f');
lcd_gotoxy(1,1);
printf(lcd_putc," Initialising");
lcd_gotoxy(1,2);
printf(lcd_putc," GSM Modem");

fprintf(GSM,"AT\r\n");
delay_ms(1500);
fprintf(GSM,"AT\r\n");
delay_ms(1500);

output_high(PIN_C3);
init_gsm();

while(1)
{
output_toggle(PIN_D2);

freq = get_timer0();
set_timer0(0); //reset timer after reading it's value. to
avoid missing pulses //IMP
delay_ms(10);
energy = freq * (1.0/3200);
if(energy != 0.0) //To avoid unnecessary EEPROM Access
{
total_energy = total_energy+energy;
}

if(tcount > 180) //


{
tcount = 0;
lcd_putc('\f');
lcd_gotoxy(1,1);
printf(lcd_putc,"Sending Message");

send_sms_num();
fprintf(GSM,"Energy Meter Live Reading: %4.4f KWH \r\
n",total_energy);
delay_ms(300);
fprintf(GSM,"Bill: %4.4f INR \r\n",total_energy*2.5);

send_message();
}

lcd_putc('\f');
lcd_gotoxy(1,1);
printf(lcd_putc," KWH = %4.4f",total_energy);
//printf(lcd_putc," KWH = %8.4w",total_energy);
lcd_gotoxy(1,2);
printf(lcd_putc,"Bill = %4.4f Rs",total_energy*2.5);
delay_ms(1000);

tcount++;

count = 0;
data[count] = 0;

read_gsm_data();

fprintf(GSM,"AT+CMGD=1\r\n");
delay_ms(2000);

show_message();
delay_ms(5000);

if(strstr(data,d1on))
{
output_high(PIN_D7);

send_sms_num();
fprintf(GSM,"D1 got switched : ON\r\n");
send_message();
}
else if(strstr(data,d1off))
{
output_low(PIN_D7);

send_sms_num();
fprintf(GSM,"D1 got switched : OFF\r\n");
send_message();
}

else if(strstr(data,get))
{
lcd_putc('\f');
lcd_gotoxy(1,1);
printf(lcd_putc,"Message Received");
lcd_gotoxy(1,2);
printf(lcd_putc," get");

send_sms_num();
fprintf(GSM,"Energy Meter Live Reading: %4.4f KWH \r\
n",total_energy);
delay_ms(300);
fprintf(GSM,"Bill: %4.4f INR \r\n",total_energy*2.5);
send_message();
}
else
{
lcd_putc('\f');
lcd_gotoxy(1,1);
printf(lcd_putc,"Invalid Message");
delay_ms(3000);
}
}
}

You might also like