Wednesday 3 October 2012

WEEK 33


Objectives:
  • Re-Programming for the GSM for find out the problem
Content:
  • For make the programming for GSM can interface with the hardware from the sending message from mobile phone correctly.
#define PUSH_BUTTON
#define ADC
#define UART
#define I2C
#define HD44780
#define GSM_MODEM
#define PULSE 9000
#define SEL RC0

#include <htc.h>
#include "LibraryHardware.h"
#include "LibraryPeripheral.h"
#include "LibraryUniversalDisplay.h"
#include "LibraryAtCommand.h"
#include "LibraryDS1307.h"

void pic_init(void);
char read_button(void);
char sms(void);

unsigned int counter[3];

__EEPROM_DATA('0','1','3','6','2','8','9','8');
__EEPROM_DATA('4','4',1,1,0,0,0,0);
__EEPROM_DATA(0,0,0,0,0,0,0,0);
__EEPROM_DATA(0,0,0,0,0,0,0,0);
__EEPROM_DATA(0,0,0,0,0,0,0,0);
__EEPROM_DATA(0,0,0,0,0,0,0,0);
__EEPROM_DATA(0,0,0,0,0,0,0,0);
__EEPROM_DATA(0,0,0,0,0,0,0,0);
__EEPROM_DATA(0,0,0,0,0,0,0,0);
__EEPROM_DATA(0,0,0,0,0,0,0,0);
__EEPROM_DATA(0,0,0,0,0,0,0,0);
__EEPROM_DATA(0,0,0,0,0,0,0,0);
__EEPROM_DATA(0,0,0,0,0,0,0,0);
__EEPROM_DATA(0,0,0,0,0,0,0,0);

static void interrupt isr(void)
{
if(RCIF==1){
counter[0]=0;
get_phone_message();}
if(TMR0IF==1){
TMR0IF=0;
reset_yz();
if(counter[0]<PULSE) counter[0]++;
else counter[0]=0;
}
}

main()
{
unsigned char button,temp,disp=0,mode=0;
unsigned char set=0,mo[12]={31,28,31,30,31,30,31,31,30,31,30,31};
unsigned char sec,min,hrs,date,month,year,time[2];
int i,j,voltage,current;
pic_init(); //initialize PIC
uart_init(9600);         //initialize UART
i2c_init(10); //initialize I2C
lcd_init(); //initialize LCD
phone[0]='+';
phone[1]='6';
for(i=0;i<=9;i++) phone[i+2]=eeprom_read(i);
phone[12]=0xFF;
for(i=0;i<=1;i++) time[i]=eeprom_read(i+10);
case 2:{
lcd_goto(0,0);
lcd_string("    PHONE NUMBER    ");            // LCD will be display "PHONE NUMBER"
lcd_goto(0,1);
lcd_string("     ");
for(i=0;i<=9;i++){
if(((i+1)==set)&(counter[0]<PULSE/2)) lcd_string(" "); // Set the Phone number
else lcd_write(phone[i+2]);}
lcd_string("     ");

switch(button){
case 1:{
mode++;
set=0;
delay(200);
break;}
case 2:{
if(set<10) set++;
else set=0;
delay(200);
break;}
case 4:{
if(phone[set+1]<'9') phone[set+1]++;
else phone[set+1]='0';
eeprom_write(set-1,phone[set+1]);
delay(200);
break;}
case 8:{
if(phone[set+1]>'0') phone[set+1]--;
else phone[set+1]='9';
eeprom_write(set-1,phone[set+1]);
delay(200);
break;}
}
break;}

case 3:{
lcd_goto(0,0);
lcd_string("     SEND TIME      ");  // LCD will be display "  SEND TIME "
lcd_goto(0,1);
lcd_string("       ");
if((set==1)&(counter[0]<PULSE/2)) lcd_string("  ");
else lcd_number(time[0],10,2);
lcd_string(":");
if((set==2)&(counter[0]<PULSE/2)) lcd_string("  ");
else lcd_number(time[1],10,2);
lcd_string("        ");

switch(button){
case 1:{
mode++;
set=0;
delay(200);
break;}
case 2:{
if(set<2) set++;
else set=0;
delay(200);
break;}
case 4:{
if(set==1){
if(time[0]<23) time[0]++;
else time[0]=0;
eeprom_write(10,time[0]);}
if(set==2){
if(time[1]<59) time[1]++;
else time[1]=0;
eeprom_write(11,time[1]);}
delay(200);
break;}
case 8:{
if(set==1){
if(time[0]>0) time[0]--;
else time[0]=23;
eeprom_write(10,time[0]);}
if(set==2){
if(time[1]>0) time[1]--;
else time[1]=59;
eeprom_write(11,time[1]);}
delay(200);
break;}
}
break;}

case 5:{
counter[1]=0;
LCD_LIGHT=1;
lcd_goto(0,0);
lcd_string("      MESSAGE       ");  // LCD will be display "   MESSAGE   "
lcd_goto(0,1);
lcd_string("      RECEIVE       "); // LCD will be display "   RECEIVE  "

text_mode();
sms_read(1,1);
temp=sms();
sms_delete(1);

switch(temp){
case 1:{
sms_send();
uart_string("Voc(hrs:V)");
uart_transmit(0x0D);           //Enter
for(j=hrs;j>=0;j--){
uart_number(j,10,2);
uart_string(":");
voltage=256*eeprom_read(16+2*j)+eeprom_read(17+2*j);
uart_number(voltage/100,10,2);
uart_transmit(0x0D);  //Enter
}

for(j=23;j>hrs;j--){
uart_number(j,10,2);
uart_string(":");
voltage=256*eeprom_read(16+2*j)+eeprom_read(17+2*j);
uart_number(voltage/100,10,2);
uart_transmit(0x0D); //Enter
}

uart_transmit(0x1A); //Ctrl+Z
break;}

case 2:{
sms_send();
uart_string("Isc(hrs:mA)");
uart_transmit(0x0D); //Enter
for(j=hrs;j>=0;j--){
uart_number(j,10,2);
uart_string(":");
current=256*eeprom_read(64+2*j)+eeprom_read(65+2*j);
uart_number(current,10,2);
uart_transmit(0x0D); //Enter
}
for(j=23;j>hrs;j--){
uart_number(j,10,2);
uart_string(":");
current=256*eeprom_read(64+2*j)+eeprom_read(65+2*j);
uart_number(current,10,2);
uart_transmit(0x0D); //Enter
}
uart_transmit(0x1A); //Ctrl+Z
break;}

default:{
sms_send();
uart_string("Unrecognized Code");
uart_transmit(0x1A); //Ctrl+Z
break;}
}
mode=0;
delay(1000);
break;}

case 6: case 7:{
counter[1]=0;
LCD_LIGHT=1;
lcd_goto(0,0);
lcd_string("      SENDING       ");
lcd_goto(0,1);
lcd_string("      MESSAGE       ");

text_mode();

if(mode==6){
sms_send();
uart_string("Voc(hrs:V)");
uart_transmit(0x0D); //Enter
for(j=hrs;j>=0;j--){
uart_number(j,10,2);
uart_string(":");
voltage=256*eeprom_read(16+2*j)+eeprom_read(17+2*j);
uart_number(voltage/100,10,2);
uart_transmit(0x0D); //Enter
}
for(j=23;j>hrs;j--){
uart_number(j,10,2);
uart_string(":");
voltage=256*eeprom_read(16+2*j)+eeprom_read(17+2*j);
uart_number(voltage/100,10,2);
uart_transmit(0x0D); //Enter
}
uart_transmit(0x1A); //Ctrl+Z
}
if(mode==7){
sms_send();
uart_string("Isc(hrs:mA)");
uart_transmit(0x0D); //Enter
for(j=hrs;j>=0;j--){
uart_number(j,10,2);
uart_string(":");
current=256*eeprom_read(64+2*j)+eeprom_read(65+2*j);
uart_number(current,10,2);
uart_transmit(0x0D); //Enter
}
for(j=23;j>hrs;j--){
uart_number(j,10,2);
uart_string(":");
current=256*eeprom_read(64+2*j)+eeprom_read(65+2*j);
uart_number(current,10,2);
uart_transmit(0x0D); //Enter
}
uart_transmit(0x1A); //Ctrl+Z
}
for(i=0;i<=9;i++) phone[i+2]=eeprom_read(i);
delay(1000);
mode=0;
break;}

default:{
mode=0;
break;}
}
}
}

void pic_init(void)
{
TRISA=0b00000011;
TRISB=0b11110000;
TRISC=0b00000000;
TRISD=0b00000000;
TRISE=0b00000000;
ANSEL=0b00000000;
ANSELH=0b00000000;
OPTION_REG=0b00001000;
INTCON=0b11100000; //Enable Global, TMR0 Interrupt
PIE1=0b00100000;         //Enable RX interrupt
PORTA=0b00000001;
PORTB=0b00000000;
PORTC=0b00000000;
PORTD=0b00000000;
PORTE=0b00000000;
}

char read_button(void)
{char i=0;
if(PB1==0) i=i+8;
if(PB2==0) i=i+4;
if(PB3==0) i=i+2;
if(PB4==0) i=i+1;
if(i>0){
counter[2]=0;
LCD_LIGHT=1;}
return i;
}

char sms(void)
{
char i,j=0;


i=0;
if((message[0]=='V')|(message[0]=='v')) i++;
if((message[1]=='O')|(message[1]=='o')) i++;
if((message[2]=='L')|(message[2]=='l')) i++;
if((message[3]=='T')|(message[3]=='t')) i++;
if((message[4]=='A')|(message[4]=='a')) i++;
if((message[5]=='G')|(message[5]=='g')) i++;
if((message[6]=='E')|(message[6]=='e')) i++;
if(i==7) j=1;

i=0;
if((message[0]=='C')|(message[0]=='c')) i++;
if((message[1]=='U')|(message[1]=='u')) i++;
if((message[2]=='R')|(message[2]=='r')) i++;
if((message[3]=='R')|(message[3]=='r')) i++;
if((message[4]=='E')|(message[4]=='e')) i++;
if((message[5]=='N')|(message[5]=='n')) i++;
if((message[6]=='T')|(message[6]=='t')) i++;
if(i==7) j=2;

return j;
}

Result and Analysis

The programming for the gsm and hardware is successful for interfacing. The data or result from solar hardware can be send to the mobile phone via gsm on 7.00pm for average voltage and current result automatically. This program also can send the result manually with sending the message to the gsm "voltage" for voltage result and "current" for current result in every time. This programm will be reply for each message to the mobile phone.

Conclusion:
As a conclusion, this program is successfully and can interfacing with the solar hardware. I know how to learn programming for two way communication using gsm to the mobile phone or otherwise. For next step, i will make the design for the poster.