18-GPRS(Air202)拨打电话

https://www.cnblogs.com/yangfengwu/p/9968883.html这个直接用官方给的demo就可以  现在说个需求哈,是当初一个人给提出的需求例如存入的号码 姓名 号码 1 10086 2 10010 ... ....

https://www.cnblogs.com/yangfengwu/p/9968883.html

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

 

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

复制代码
例如存入的号码
姓名 号码 
1 10086
2 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",...)
end

local 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;--Led1
Led2 = pio.P0_6;--Led2
Led3 = pio.P0_7;--Led3
pio.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
    end
end


--[[读取号码]]
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);
    end
end

local 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
    end
end

--[[可以打电话]]
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"))
end

sys.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)
复制代码

 

 

其实逻辑处理也挺复杂的

 

 

 

 

 

 

 源码打包出售  https://item.taobao.com/item.htm?spm=a2126o.11854294.0.0.3e3a4831ODxjIk&id=582359919556

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

资料源码链接

链接:https://pan.baidu.com/s/1-SRfsKGQ7rZVvFmp1ObHWw 密码:p9qs

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

https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-18540610442.6.36a74814ZSaRsu&id=569295486025

  • 发表于 2018-11-16 15:18
  • 阅读 ( 2295 )

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
杨奉武

18 篇文章

作家榜 »

  1. 技术销售Delectate 43 文章
  2. 陈夏 26 文章
  3. 国梁 24 文章
  4. miuser 21 文章
  5. 晨旭 20 文章
  6. 朱天华 19 文章
  7. 金艺 19 文章
  8. 杨奉武 18 文章