中级会员
 
- 积分
- 235
- 金钱
- 235
- 注册时间
- 2019-7-8
- 在线时间
- 27 小时
|
1金钱
原子哥的例程给的是用上位机控制SIM900A的打电话的功能,我现在想用单片机通过NRF检测数据,直接拨打指定电话号码,不需要手动的那种,在外部中断里检测到nrf的数据是对的就直接让SIM800C打指定的电话。但是SIM800C的C文件有点复杂,看了好久才明白了一部分需要改动的地方,但是我想实现的功能是拨打,不在程序中自动挂断,只能是对方先挂断,没弄明白让对方挂断后,这个状态怎么让单片机检测出来,或者说这个对方挂断的AT指令是多少,然后我给单片机发送怎么样的指令才能让它执行别的操作,我查了使用说明也没找到,下面是我改的一些程序,希望大神帮忙看看:
u8 sim800c_call_test(void)
{
u8 key;
u16 lenx;
u8 callbuf[20];
u8 pohnenumlen=0; //oÅÂë3¤¶è,×î′ó15¸öêy
u8 *p,*p1,*p2;
u8 oldmode=0;
u8 cmode=0; //Ä£ê½
//0:μè′y2|oÅ
//1:2|oÅÖD
//2:í¨»°ÖD
//3:½óêÕμ½à′μç
u8 phone[11];
phone[11]="13986428703";
if(sim800c_send_cmd("AT+CTTSRING=0","OK",200))return 1; //éèÖÃTTSà′μçéèÖÃ
if(sim800c_send_cmd("AT+CTTSPARAM=20,0,50,70,0","OK",200))return 1; //éèÖÃTTSéùòôÅäÖÃ
if(sim800c_send_cmd("AT+CLIP=1","OK",200))return 1; //éèÖÃà′μçÏÔê¾
if(sim800c_send_cmd("AT+COLP=1","OK",200))return 2; //éèÖñ»½DoÅÂëÏÔê¾
p1=mymalloc(SRAMIN,20); //éêÇë20Ö±½óóÃóú′æ·ÅoÅÂë
if(p1==NULL)return 2;
while(1)
{
delay_ms(10);
if(USART3_RX_STA&0X8000) //½óêÕμ½êy¾Y
{
sim_at_response(0);
if(cmode==1||cmode==2)
{
if(cmode==1)if(sim800c_check_cmd("+COLP:"))cmode=2; //2|oÅ3é1|
if(sim800c_check_cmd("NO CARRIER"))cmode=0; //2|oÅê§°ü
if(sim800c_check_cmd("NO ANSWER"))cmode=0; //2|oÅê§°ü
if(sim800c_check_cmd("ERROR"))cmode=0; //2|oÅê§°ü
}
if(sim800c_check_cmd("+CLIP:"))//½óêÕμ½à′μç
{
cmode=3;
p=sim800c_check_cmd("+CLIP:");
p+=8;
p2=(u8*)strstr((const char *)p,"\"");
p2[0]=0;//ìí¼ó½áêø·û
strcpy((char*)p1,(char*)p);
}
USART3_RX_STA=0;
}
key=phone(pohnenumlen);
if(key)
{
if(pohnenumlen<11)
{
if(cmode==0&&pohnenumlen<15)
{
callbuf[pohnenumlen++]=phone(pohnenumlen);
u3_printf("AT+CLDTMF=2,\"%c\"\r\n",phone(pohnenumlen));
delay_ms(55);//Ñóê±ò»ÏÂ
u3_printf("AT+CTTS=2,\"%c\"\r\n",phone(pohnenumlen)); //TTSóïòô
}
else if(cmode==2)//í¨»°ÖD
{
u3_printf("AT+CLDTMF=2,\"%c\"\r\n",phone(pohnenumlen));
delay_ms(100);
u3_printf("AT+VTS=%c\r\n",phone(pohnenumlen));
}
}else
{
if(pohnenumlen==11)//Ö′DD2|oÅ
{
//2|oÅÄ£ê½
callbuf[pohnenumlen]=0; //×îoó¼óèë½áêø·û
u3_printf("ATD%s;\r\n",callbuf);//2|oÅ
cmode=1; //2|oÅÖDÄ£ê½
}
if(pohnenumlen==11)
{
if(cmode==1)//2|oÅÖDÄ£ê½
{
sim800c_send_cmd("ATA","OK",200);//·¢Ëíó|′eÖ¸áî
//Show_Str(40+56,70,200,16,callbuf,16,0);
cmode=2;
}else
{
sim800c_send_cmd("ATH",0,0);//2»1üóDûóDÔúí¨»°,¶¼½áêøí¨»°
break;//íË3öÑ-»·
}
}
}
if(cmode==0)//Ö»óDÔúμè′y2|oÅÄ£ê½óDD§
{
callbuf[pohnenumlen]=0;
//LCD_Fill(40+56,70,239,70+16,WHITE);
Show_Str(40+56,70,200,16,callbuf,16,0);
}
}
if((lenx%50)==0)LED0=!LED0;
lenx++;
}
myfree(SRAMIN,p1);
return 0;
}
|
|