Beruflich Dokumente
Kultur Dokumente
****************************************
#include <mega8.h>
#include <stdio.h>
#include <delay.h>
#include <adc.h>
#include <usart_ud.h>
#include <lcd_ud.h>
//#include <string.h>
#define msg_buf_len 80
#define desktop_l 80
#define pi PI
#define curr_ch_1 0
#define curr_ch_2 1
#define curr_ch_3 2
#define curr_ch_4 3
#define volt_ch_1 4
#define volt_ch_2 5
#pragma used+
void gprs_init();
void reply_sms();
short sms_decode();
short ip_decode();
//void get_signel_strength();
void send_data();
int volt1;
int volt2;
int volt3;
int curr1;
int curr2;
int curr3;
int curr4;
char buff[20];
short msg_pointer;
char message_buffer[msg_buf_len];
unsigned int j;
unsigned int i;
char data_frame[70];
char client_ip[20];
char server_ip[20];
char reply_number[11];
char reply_msg[50];
char number_buffer_[11];
char message_buffer_[32];
char temp_char;
short signal;
int msg_pointer_old;
int timer_int;
int viber_1,viber_2;
#pragma used-
void main()
delay_ms(1000);
usart_init();
adc_init();
lcd_init();
delay_ms(100);
usart_flush();
flash_lcd_out("started");
relay_1_d=1;
relay_2_d=1;
relay_3_d=1;
relay_1=0;
relay_2=0;
relay_3=0;
delay_ms(8000);
gprs_init();
timer_int=300;
TCCR1A=0x00;
TCCR1B=0x00;//TCCR1B=0x04;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
TIMSK=0x04;
usart_init();
UCSRB|=(1<<RXCIE);
#asm("sei");
while (1)
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
TCCR1B=0x04;
curr1=adc_read(3);
curr2=adc_read(3);
curr3=adc_read(3);
volt1=adc_read(5);
volt2=volt1;
volt3=volt1;
lcd_clear();
lcd_out(client_ip);
send_data();
msg_pointer=0;
int_i=30000;
while((msg_pointer==0x00)&&(int_i>0x00))
{int_i-=1;delay_us(800);}
if(msg_pointer!=0x00)
temp_char=message_buffer[0];
if(temp_char=='0')
relay_1=0;
relay_2=0;
relay_3=0;
if(temp_char=='1')
relay_1=0;
if(temp_char=='2')
relay_1=1;
if(temp_char=='3')
relay_2=0;
if(temp_char=='4')
{
relay_2=1;
if(temp_char=='5')
relay_3=0;
if(temp_char=='6')
relay_3=1;
temp_char=0x00;
};
void send_data()
#asm("cli");
printf("AT+CIPSEND\n\r");
int_i=0x03;
do
{
buff[0]=getchar_attempt(1000);
int_i-=1;
}while((buff[0]!='>')&&(int_i>0));
if(buff[0]!=0x00){getchar_attempt(1000);}
usart_flush();
// A B C D E F G
printf("A%3d B%3d C%3d D%3d E%3d F%3d G\n\r",volt1 ,curr1 ,volt2 ,curr2 ,volt3 ,curr3 );
putchar(0x1a);
timer_int-=1;
if(timer_int==0x00){timer_int=15000;reply_sms();}
else
delay_ms(500);
usart_flush();
#asm("sei");
{
UDR=0x00;
UCSRA|=(1<<RXC);
lcd_clear();
void gprs_init()
int_i=1;
usart_flush();
lcd_clear();
flash_lcd_out("INITIATING");
printf("ATE1\r\n");
delay_ms(100);
printf("AT\r\n");
delay_ms(5);
do
buff[2]=getchar_attempt(20000);
if(buff[2]=='K'){int_i=0x10;}
if(buff[2]==0x00)
int_i+=1;
printf("ATE1\r\n");
delay_ms(100);
printf("AT\r\n");
delay_ms(5);
}while(int_i<4);
if(int_i==0x06)
lcd_clear();
flash_lcd_out("MODEM FAILURE");
while(1);
temp_int=1;
//sprintf(line1,"CHECKING SIM");
//sprintf(line2,"ATTEMPT %d ",temp_int);
//lcd_clear();
//lcd_out(line1);
//lcd_move_cursor(0x40);
//lcd_out(line2);
delay_ms(1000);
usart_flush();
UCSRB|=(1<<RXCIE);
printf("ATE0\r\n");
delay_ms(100);
#asm("sei");
do
msg_pointer=0x00;
int_i=10000;
printf("AT +CREG?\r\n");
while((msg_pointer==0x00)&&(int_i>0x00)){int_i-=1;delay_us(300);}
if(int_i!=0x00)
delay_ms(int_i/3);
msg_pointer=0x00;
while(message_buffer[msg_pointer]!=0x00)
if(message_buffer[msg_pointer]==',')
msg_pointer+=1;
if(message_buffer[msg_pointer]!='0'){temp_int=0x10;}
msg_pointer+=1;
msg_pointer=0;
temp_int+=1;
}while(temp_int<4);
if(temp_int==0x06)
lcd_clear();
flash_lcd_out("SIM FAILURE");
while(1);
delay_ms(5000);
printf("AT+CMGF=1\r\n");
delay_ms(500);
for(j='1';j<='9';j++)
printf("AT+CMGD=%c\r\n",j);
delay_ms(100);
delay_ms(50);
printf("AT+CNMI=2,2,0,0,0\r\n");
delay_ms(50);
lcd_clear();
goto command_request_repeat_2;
command_request_repeat_1:
//sprintf(reply_number,"9025224376");
//reply_sms();
command_request_repeat_2:
delay_ms(5000);
msg_pointer=0x00;
lcd_clear();
lcd_move_cursor(0x40);
wait_for_msg:
while(msg_pointer==0x00);
int_i=30000;
while((msg_pointer<10)&&(int_i>0))
delay_ms(10);
int_i-=1;
if(int_i==0){goto wait_for_msg;}
delay_ms(300);
j=sms_decode();
msg_pointer=0;
if(j==0){lcd_clear();flash_lcd_out("unsupported sms");delay_ms(3000);usart_flush();goto
command_request_repeat_1;}
if((message_buffer_[0]=='S')&&(message_buffer_[1]=='T')&&(message_buffer_[2]=='A')&&(message_bu
ffer_[3]=='R')&&(message_buffer_[4]=='T'))
#asm("cli");
msg_pointer=0;
while(message_buffer_[msg_pointer]!=' '){msg_pointer+=1;}
message_buffer_[msg_pointer]=0x00;
msg_pointer+=1;
msg_pointer_old=msg_pointer;
do
server_ip[msg_pointer-msg_pointer_old]=message_buffer_[msg_pointer];
msg_pointer+=1;
server_ip[msg_pointer-msg_pointer_old]=0x00;
}while(message_buffer_[msg_pointer-msg_pointer_old]!='#');
for(i=i;i<20;i++)
if((server_ip[i]<0x30)&&(server_ip[i]!='.')){server_ip[i]=0x00;}
sprintf(line2,"%s\n\r",server_ip);
lcd_clear();
flash_lcd_out("IP RECEIVED");
lcd_move_cursor(0x40);
lcd_out(line2);
delay_ms(5000);
lcd_clear();
flash_lcd_out("CONNECTING GPRS");
delay_ms(3000);
else
lcd_clear();
lcd_out(message_buffer_);
delay_ms(3000);
sprintf(reply_number,"%s",number_buffer_);
goto command_request_repeat_2;
sprintf(reply_number,"%s",number_buffer_);
#asm("cli");
printf("AT+CMGF=1\r\n");
delay_ms(50);
for(j='1';j<='9';j++)
printf("AT+CMGD=%c\r\n",j);
delay_ms(40);
}
delay_ms(5);
printf("AT+CNMI=0,0,0,0,0\r\n");
delay_ms(5);
printf("AT+CIPMODE=0\r\n");
delay_ms(5);
printf("AT+CLPORT=");
putchar('"');
printf("UDP");
putchar('"');
putchar(',');
putchar('"');
printf("3501");
putchar('"');
printf("\r\n");
delay_ms(5);
//AT+CIPCSGP=1,"airtelgprs.com"
printf("AT+CIPCSGP=1");
putchar(',');
putchar('"');
printf("airtelgprs.com");
putchar('"');
printf("\r\n");
delay_ms(5);
printf("AT+CSTT\n\r");
delay_ms(20000);
printf("AT+CIICR\n\r");
do
message_buffer[1]=message_buffer[0];
message_buffer[0]=getchar();
if((message_buffer[1]=='E')&&(message_buffer[0]=='R'))
{delay_ms(300);usart_flush();printf("AT+CIPCLOSE\n\r");delay_ms(1000);printf("AT+AT+CIPSHUT\n\r");d
elay_ms(1000);usart_flush();}
}while((message_buffer[1]=='O')&&(message_buffer[0]=='K'));
UCSRB|=(1<<RXCIE);
delay_ms(3000);
#asm("sei")
int_i=0;
ip_get_repeat:
int_i+=1;
sprintf(line2,"ATTEMPT %u",int_i);
lcd_clear();
flash_lcd_out("GETTING IP");
lcd_move_cursor(0x40);
lcd_out(line2);
delay_ms(1000);
usart_flush();
msg_pointer=0;
printf("AT+CIFSR\n\r");
delay_ms(15000);
j=0;
temp_int=1000;
while((msg_pointer==0x00)&&(temp_int>0)){temp_int--;delay_ms(20);}
if(temp_int==0){goto ip_get_repeat;}
delay_ms(300);
j=ip_decode();
if(j==0){goto ip_get_repeat;}
for(i=i;i<20;i++)
if((client_ip[i]<0x30)&&(client_ip[i]!='.')){client_ip[i]=0x00;}
sprintf(line2,"%s\n\r",client_ip);
lcd_clear();
flash_lcd_out("CLIENT IP");
lcd_move_cursor(0x40);
lcd_out(line2);
delay_ms(3000);
sprintf(reply_msg,"CLIENT IP #%s\n",client_ip);
reply_sms();
delay_ms(5000);
printf("AT+CIPSTART=");
putchar('"');
printf("UDP");
putchar('"');
putchar(',');
putchar('"');
printf("%s",server_ip);
putchar('"');
putchar(',');
putchar('"');
printf("3500");
putchar('"');
printf("\r\n");
delay_ms(500);
msg_pointer=0;
message_buffer[msg_pointer]=getchar();
msg_pointer++;
message_buffer[msg_pointer]=0x00;
if(msg_pointer>=(msg_buf_len-1)){msg_pointer=0;usart_flush();}
short sms_decode()
int msg_pointer_old;
delay_ms(100);
#asm("cli");
message_buffer[msg_buf_len-1]=0x00;
message_buffer[msg_buf_len-2]=0x0a;
msg_pointer=0;
while(((message_buffer[msg_pointer]!=0x22)||(message_buffer[msg_pointer+1]!
='+'))&&(msg_pointer<desktop_l)&&(message_buffer[msg_pointer]!=0x00))
msg_pointer+=1;
if((msg_pointer>=desktop_l)||message_buffer[msg_pointer]==0x00)
usart_flush();
msg_pointer=0;
#asm("sei");
return 0;
msg_pointer+=4;
msg_pointer_old=msg_pointer;
while(((message_buffer[msg_pointer]!
=0x22)&&(msg_pointer<desktop_l))&&(message_buffer[msg_pointer]!=0x00))
number_buffer_[msg_pointer-msg_pointer_old]=message_buffer[msg_pointer];
msg_pointer+=1;
number_buffer_[msg_pointer-msg_pointer_old]=0x00;
if((msg_pointer>=desktop_l)||message_buffer[msg_pointer]==0x00)
usart_flush();
msg_pointer=0;
#asm("sei");
return 0;
while((message_buffer[msg_pointer]!
=0x23)&&(msg_pointer<desktop_l)&&(message_buffer[msg_pointer]!=0x00))
msg_pointer+=1;
if((msg_pointer>=desktop_l)||message_buffer[msg_pointer]==0x00)
delay_ms(1500);
usart_flush();
msg_pointer=0;
#asm("sei");
return 0;
msg_pointer+=1;
msg_pointer_old=msg_pointer;
while(((message_buffer[msg_pointer]!
=0x0d)&&(msg_pointer<msg_buf_len))&&(message_buffer[msg_pointer]!=0x00))
message_buffer_[msg_pointer-msg_pointer_old]=message_buffer[msg_pointer];
msg_pointer+=1;
message_buffer_[msg_pointer-msg_pointer_old]=0x00;
message_buffer_[msg_pointer-msg_pointer_old]=0x00;
usart_flush();
msg_pointer=0;
#asm("sei");
return 1;
short ip_decode()
delay_ms(100);
#asm("cli");
message_buffer[msg_buf_len-1]=0x00;
message_buffer[msg_buf_len-2]=0x0a;
msg_pointer=0;
while(((message_buffer[msg_pointer]!=0x0d)||(message_buffer[msg_pointer+1]!
=0x0a))&&(msg_pointer<desktop_l)&&(message_buffer[msg_pointer]!=0x00))
msg_pointer+=1;
if((msg_pointer>=desktop_l)||message_buffer[msg_pointer]==0x00)
usart_flush();
msg_pointer=0;
#asm("sei");
return 0;
lcd_clear();
flash_lcd_out("READING IP");
delay_ms(3000);
msg_pointer+=2;
msg_pointer_old=msg_pointer;
while((message_buffer[msg_pointer]!
=0x0d)&&(msg_pointer<desktop_l)&&(message_buffer[msg_pointer]!=0x00))
client_ip[msg_pointer-msg_pointer_old]=message_buffer[msg_pointer];
msg_pointer+=1;
}
if((msg_pointer>=desktop_l)||message_buffer[msg_pointer]==0x00)
usart_flush();
msg_pointer=0;
client_ip[msg_pointer]=0x00;
#asm("sei");
return 0;
client_ip[msg_pointer]=0x23;
client_ip[msg_pointer+1]=0x00;
usart_flush();
msg_pointer=0;
#asm("sei");
return 1;
void reply_sms()
usart_flush();
#asm("cli");
int_i=1;
printf("AT+CMGS=");
putchar(0x22);
printf("%s",reply_number);
putchar(0x22);
putchar(0x0d);
reply_sms_attempt=20;
do
buff[0]=getchar_attempt(1000);
if(buff[0]==0x00){reply_sms_attempt-=1;}
}while((buff[0]!='>')&&(reply_sms_attempt>0));
buff[0]=getchar_attempt(1000);
printf("%s",reply_msg);
putchar(0x1a);
buff[1]=0x00;
lcd_clear();
lcd_move_cursor(0);
flash_lcd_out("MESSAGE SENT");
usart_flush();
#asm("sei");
}
// External Interrupt 0 service routine
viber_1=1;
viber_2=1;