博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
18-(基础入门篇)GPRS(Air202)拨打电话
阅读量:6804 次
发布时间:2019-06-26

本文共 6455 字,大约阅读时间需要 21 分钟。

这个直接用官方给的demo就可以

 

 现在说个需求哈,是当初一个人给提出的需求

例如存入的号码姓名 号码 1 100862 10010... .... 例如存入的号码01 0501 05代表所有的号码循环拨打5次 01代表延时1小时后重复GPIO4控制打电话(低电平有效)开机以后先读取手机卡里面的信息,筛选出来姓名1-99 和对应的号码取出01对应的次数 5 时间间隔 1小时读取完成以后如果GPIO4为低电平,先拨打姓名1对应的号码,如果后面还有2 间隔50S就会再拨打2对应的号码,如果还有3,4,5....依次排着拨打顺序拨打完一遍 次数加1 顺序拨打5次 延时1小时 然后 循环

 

直接源码

module(...,package.seeall)require"cc"require"pb"require"sys"require"net"require"pins"require"common"--[[GPIO4低电平拨打电话GPIO5,GPIO6,GPIO7信号强度指示]]local function print(...)    _G.print("testCall",...)endlocal ReadTelephoneTable={};local ReadTelephoneTableCopy={};local ReadTelephoneCnt=1;local ReadErr=0;local LoopCnt=0;local DelayHour=0;local CallReadyFlage=0;local j=1;local CallMax = 0;local CallCnt = 0;local DelayCallValue = 50000;local InputState = 0;local ReadTelephoneSuccess = 0;--是否读取号码完成InputKey = pio.P0_4;--输入按钮Led1 = pio.P0_5;--Led1Led2 = pio.P0_6;--Led2Led3 = pio.P0_7;--Led3pio.pin.setdir(pio.OUTPUT,InputKey)pio.pin.setval(1,InputKey)pio.pin.setdir(pio.OUTPUT,Led1)pio.pin.setval(1,Led1)pio.pin.setdir(pio.OUTPUT,Led2)pio.pin.setval(1,Led2)pio.pin.setdir(pio.OUTPUT,Led3)pio.pin.setval(1,Led3)function ReadTelephone()    pb.read(ReadTelephoneCnt, readcb)end--[[小于70小时,大于35小时使用]]function Delay35Hour()     sys.timerStart(CallTelephoneLoop,(DelayHour-35) * 60 * 60 * 1000) end--[[小于100小时,大于70小时使用]]function Delay35HourA()    sys.timerStart(CallTelephoneLoop,(DelayHour-70) * 60 * 60 * 1000)end--[[小于100小时,大于70小时使用]]function Delay35HourB()    sys.timerStart(Delay35HourA,35 * 60 * 60 * 1000)end--[[拨打电话]]function CallTelephoneLoop()    if  j<= CallMax and CallMax>=1 and DelayHour >= 1 and LoopCnt>=1 then        cc.dial(ReadTelephoneTableCopy[j]);        sys.timerStart(cc.hangUp,30000,ReadTelephoneTableCopy[j])        print("拨打::"..ReadTelephoneTableCopy[j]);        j=j+1;        if  j > CallMax  then--循环了一遍            j = 1;            CallCnt = CallCnt + 1;            print("循环次数:"..CallCnt);        end        if  CallCnt >= LoopCnt  then--循环了设置的次数            CallCnt = 0;            print("开始延时:"..DelayHour.."小时");            if  DelayHour <=35  then                sys.timerStart(CallTelephoneLoop,DelayHour * 60 * 60 * 1000)            elseif  DelayHour <=70  then                sys.timerStart(Delay35Hour,35 * 60 * 60 * 1000)            elseif  DelayHour <=100  then                sys.timerStart(Delay35HourB,35 * 60 * 60 * 1000)            end        else            print("循环");            sys.timerStart(CallTelephoneLoop,DelayCallValue)        end    endend--[[读取号码]]function readcb(result,name,number)    if  result == true  then        ReadTelephoneCnt = ReadTelephoneCnt +1;        print(result,name,number);        print("ReadTelephoneCnt"..ReadTelephoneCnt);        if  string.len(name)>0  then            ReadErr = 0;            if  string.len(number)>0  then                ReadErr = 0;                ReadTelephoneTable[name] = number;            end        else            if  string.len(number)==0 and string.len(name)==0 then                print("ReadErr = ReadErr +1");                ReadErr = ReadErr +1;                if  ReadErr>5  then                    ReadErr = 0;                    sys.timerStop(ReadTelephone,1);                    print("timerStop");                    local i=1;                    for key,value in pairs(ReadTelephoneTable) do                        print(key,value)                        if  key == "01" then                            LoopCnt = tonumber(string.sub(value,1,2))                            if  LoopCnt>99 or LoopCnt<1 then                                LoopCnt = 0;                            end                            DelayHour = tonumber(string.sub(value,3,4))                            if  DelayHour>99 or DelayHour<1 then                                DelayHour = 0;                            end                            print("DelayHour"..DelayHour)                          else                            print("key"..key)                              if  tonumber(key)~=nil and tonumber(key) <99 and tonumber(key)>0  then                                ReadTelephoneTableCopy[i] = value;                                i = i + 1;                            end                        end                    end                    CallMax = i - 1;                    ReadTelephoneSuccess  = 1;                end            end        end        if  string.len(number)>0 then            ReadErr = 0;                print("string.len(number)>0 ReadErr = 0");        end    else        print(result,name,number);    endendlocal InputCnt = 0;local cnt = 0;function  InputShowLed()    if  pio.pin.getval(InputKey) == 0 then        InputCnt = InputCnt +1;        if  InputCnt>6 and InputState==0 then            InputCnt = 0;            if  ReadTelephoneSuccess == 1  then                InputState = 1;                j=1;                CallCnt = 0;                sys.timerStopAll(CallTelephoneLoop)                sys.timerStart(CallTelephoneLoop,1)            end        end    else        InputCnt = 0;        InputState = 0;        sys.timerStopAll(CallTelephoneLoop)    end    cnt = cnt +1;    if  cnt>100  then        cnt = 0;        print("信号强度:"..net.getRssi())        if  net.getRssi() == 0  then            pio.pin.setval(0,Led1);--用三个指示灯指示信号的强度            pio.pin.setval(0,Led2);            pio.pin.setval(0,Led3);         elseif  net.getRssi()<10 then            pio.pin.setval(0,Led1);            pio.pin.setval(0,Led2);            pio.pin.setval(1,Led3);         elseif  net.getRssi()<20 then            pio.pin.setval(0,Led1);            pio.pin.setval(1,Led2);            pio.pin.setval(1,Led3);         elseif  net.getRssi()>20 then            pio.pin.setval(1,Led1);            pio.pin.setval(1,Led2);            pio.pin.setval(1,Led3);         end    endend--[[可以打电话]]local function CallReadyMethod()    CallReadyFlage = 1;    print("*****************************CALL_READY*****************************");end---对方接听-- string num,建立通话的对方号码local function connected(num)    print("主动结束通话")    cc.hangUp(num)end--结束通话local function disconnected(para)    print("disconnected:"..(para or "nil"))endsys.timerLoopStart(ReadTelephone,1000,1)sys.subscribe("CALL_CONNECTED",connected)sys.subscribe("CALL_READY",CallReadyMethod)sys.subscribe("CALL_DISCONNECTED",disconnected)sys.timerLoopStart(InputShowLed,10)cc.dtmfDetect(true)

 

 

其实逻辑处理也挺复杂的

 

 

 

 

 

 

 源码打包出售  

 剩余的大家自己去研究哈,也可以按照规定的存储手机卡号码,看看拨打情况

资料源码链接

链接: 密码:p9qs

基础教程源码链接如果失效,请在淘宝介绍中下载,由于链接还是失效,请联系卖家,谢谢

 

转载地址:http://atjwl.baihongyu.com/

你可能感兴趣的文章
Qt之自定义QLineEdit右键菜单
查看>>
项目Alpha冲刺(团队6/10)
查看>>
springboot2.0+dubbo整合分布式服务发布和调用
查看>>
Debian系统常用配置
查看>>
风景最美的地方
查看>>
android系列7.单元测试学习
查看>>
using的几种用法
查看>>
【转】Deep Learning(深度学习)学习笔记整理系列之(三)
查看>>
angularJs按需加载代码(未验证)
查看>>
avalon 笔记---Mr.wing
查看>>
sgu 109 Magic of David Copperfield II
查看>>
Redis在CentOS和Windows安装过程
查看>>
Eclipse的SVN插件使用
查看>>
JavaScript鼠标经过图片的放大镜效果
查看>>
AngulaJS02
查看>>
[LeetCode] House Robber II
查看>>
FastReport快速入门
查看>>
载入背景图片
查看>>
JavaScrip ES6数组方法
查看>>
AspectJ的基本使用
查看>>