前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >18-GPRS(Air202)拨打电话

18-GPRS(Air202)拨打电话

作者头像
杨奉武
发布2018-12-13 16:42:25
5560
发布2018-12-13 16:42:25
举报
文章被收录于专栏:知识分享知识分享

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

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

代码语言:javascript
复制
例如存入的号码
姓名 号码 
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小时 然后 循环

直接源码

代码语言:javascript
复制
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 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档