#include <16F876A.h>
#device adc=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES WRT_50% //Lower half of Program Memory is Write Protected
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C0,rcv=PIN_C1,bits=8,stream=gps)
#use rs232(baud=9600,parity=N,xmit=PIN_C3,rcv=PIN_C4,bits=8,stream=gsm)
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int count=0,f=0;
char s[78],lat[15],lon[15];
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void sensors();
void gsmsend();
void gps1();
char timed_getc() ;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#int_TIMER1
void TIMER1_isr(void)
{
count++;
if(count>=24)
{
count=0;
gsmsend();
}
}
void main()
{
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_DIV_32);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
while(1)
{
while(f==0)
gps1();
sensors();
}
}
//$GPRMC,1040.777,V,1023.000,N,0000.000,E$GPRMC,1040.777,V,1023.000,N,0000.000,E
char timed_getc()
{
long timeout;
timeout=0;
while(!kbhit(gsm)&&(++timeout<5000)) // 50000 >>1/2
delay_us(10);
if(kbhit(gsm))
return(fgetc(gsm));
else {
return(0);
}
}
void gps1()
{char g[20]={0},data[50],ch;
int i,j;
while(1)
{
ch=fgetc(gps);
if(ch=='$')
{
for(i=0;i<5;i++)
{
g[i]=fgetc(gps);
}
if(g[3]=='M')
{
for(i=0;i<40;i++)
{
data[i]=fgetc(gps); //start with ,
}
for(i=14,j=0;i<23;i++,j++)
{ f=1;
lat[j]=data[i];
}
lat[j]='\0'; //latitude
for(i=26,j=0;i<36;i++,j++)
{
lon[j]=data[i];
}
lon[j]='\0'; //longitude
delay_ms(100);
break;
}
}
}
}
void gsmsend()
{ int i;
char at[4]="AT\r",x;
char txt[12]="AT+CMGF=1\r";
char snd[22]="AT+CMGS=\"8547406778\"\r";
char msglat[15]="\r\nLatitude=",msglon[15]="\r\nLongitude=";
for(i=0;at[i];i++)
{
fputc(at[i],gsm);
delay_ms(30);
}
x = timed_getc();
x = timed_getc();
for(i=0;txt[i];i++)
{
fputc(txt[i],gsm);
delay_ms(30);
}
x = timed_getc();
x = timed_getc();
for(i=0;snd[i];i++)
{
fputc(snd[i],gsm);
delay_ms(30);
}
x = timed_getc();
x = timed_getc();
for(i=0;s[i];i++)
{
fputc(s[i],gsm);
delay_ms(30);
}
x = timed_getc();
x = timed_getc();
for(i=0;msglat[i];i++)
{
fputc(msglat[i],gsm);
x = timed_getc();
}
for(i=0;lat[i];i++)
{
fputc(lat[i],gsm);
x = timed_getc();
}
for(i=0;msglon[i];i++)
{
fputc(msglon[i],gsm);
x = timed_getc();
}
for(i=0;lon[i];i++)
{
fputc(lon[i],gsm);
x = timed_getc();
}
fputc(0x1a,gsm);
x = timed_getc();
x = timed_getc();
x = timed_getc();
x = timed_getc();
x = timed_getc();
delay_ms(20);
}
void sensors()
{long int T,P,H,W;
set_adc_channel(0); //Temperature
delay_ms(10);
T = read_adc();
T=T/2.048;
set_adc_channel(1); //Pressure
delay_ms(10);
P = read_adc();
set_adc_channel(2); //Humidity
delay_ms(10);
H = read_adc();
set_adc_channel(3); //wind/light
delay_ms(10);
W= read_adc();
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////// temp humidity /////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////
//sunny day--- 25-35 60-80 / ///////////////////////////////////////////////////////////////
//snowfall--- (-2) - 5 20-30 /////////////////////////////////////////////////////////////////
//rainy ---- 20- 25 40-60 /////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(T>=28&&H>=30)
{
sprintf(s,"SUNNY DAY\nTEMPERATURE=%ld\nPRESSURE=%ld\nHUMIDITY=%ld\nLOCATION\n"T,P,H); //sunny
}
if(T>=0&&T<=5&&H<=30)
{
sprintf(s,"SNOW FALL\nTEMPERATURE=%ld\nPRESSURE=%ld\nHUMIDITY=%ld\nLOCATION=\n"T,P,H);
}
if(T<=25&&H>50)
{
sprintf(s,"RAINY DAY\n\rTEMPERATURE=%ld\n\rPRESSURE=%ld\n\rHUMIDITY=%ld\n\rLOCATION=\n\r"T,P,H);
}
else
sprintf(s,"TEMPERATURE=%ld\nPRESSURE=%ld\nHUMIDITY=%ld\nLOCATION=\n"T,P,H);
}
working--weather4cast.rar_WORKING_weatherforecasting
版权申诉
23 浏览量
2022-09-14
21:53:16
上传
评论
收藏 58KB RAR 举报
刘良运
- 粉丝: 67
- 资源: 1万+
最新资源
- Picasso_v3.1 2.ipa
- chromedriver-mac-arm64.zip
- 蓝zapro.apk
- chromedriver-linux64.zip
- UCAS研一深度学习实验-MNIST手写数字识别python源码+详细注释(高分项目)
- 基于Python和PyTorch框架完成的一个手写数字识别实验源码(带MINIST手写数字数据集)+详细注释(高分项目)
- 基于Matlab在MNIST数据集上利用CNN完成手写体数字识别任务,并实现单层CNN反向传播算法+源代码+文档说明(高分项目)
- NVIDIA驱动、CUDA和Pytorch及其依赖
- 基于SVM多特征融合的微表情识别python源码+项目说明+详细注释(高分课程设计)
- html动态爱心代码一(附源码)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈