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",...)
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;--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 thencc.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);endif  CallCnt >= LoopCnt  then--循环了设置的次数CallCnt = 0;print("开始延时:"..DelayHour.."小时");if  DelayHour <=35  thensys.timerStart(CallTelephoneLoop,DelayHour * 60 * 60 * 1000)elseif  DelayHour <=70  thensys.timerStart(Delay35Hour,35 * 60 * 60 * 1000)elseif  DelayHour <=100  thensys.timerStart(Delay35HourB,35 * 60 * 60 * 1000)endelseprint("循环");sys.timerStart(CallTelephoneLoop,DelayCallValue)endend
end--[[读取号码]]
function readcb(result,name,number)if  result == true  thenReadTelephoneCnt = ReadTelephoneCnt +1;print(result,name,number);print("ReadTelephoneCnt"..ReadTelephoneCnt);if  string.len(name)>0  thenReadErr = 0;if  string.len(number)>0  thenReadErr = 0;ReadTelephoneTable[name] = number;endelseif  string.len(number)==0 and string.len(name)==0 thenprint("ReadErr = ReadErr +1");ReadErr = ReadErr +1;if  ReadErr>5  thenReadErr = 0;sys.timerStop(ReadTelephone,1);print("timerStop");local i=1;for key,value in pairs(ReadTelephoneTable) doprint(key,value)if  key == "01" thenLoopCnt = tonumber(string.sub(value,1,2))if  LoopCnt>99 or LoopCnt<1 thenLoopCnt = 0;endDelayHour = tonumber(string.sub(value,3,4))if  DelayHour>99 or DelayHour<1 thenDelayHour = 0;endprint("DelayHour"..DelayHour)  elseprint("key"..key)  if  tonumber(key)~=nil and tonumber(key) <99 and tonumber(key)>0  thenReadTelephoneTableCopy[i] = value;i = i + 1;endendendCallMax = i - 1;ReadTelephoneSuccess  = 1;endendendif  string.len(number)>0 thenReadErr = 0;    print("string.len(number)>0 ReadErr = 0");endelseprint(result,name,number);end
endlocal InputCnt = 0;
local cnt = 0;
function  InputShowLed()if  pio.pin.getval(InputKey) == 0 thenInputCnt = InputCnt +1;if  InputCnt>6 and InputState==0 thenInputCnt = 0;if  ReadTelephoneSuccess == 1  thenInputState = 1;j=1;CallCnt = 0;sys.timerStopAll(CallTelephoneLoop)sys.timerStart(CallTelephoneLoop,1)endendelseInputCnt = 0;InputState = 0;sys.timerStopAll(CallTelephoneLoop)endcnt = cnt +1;if  cnt>100  thencnt = 0;print("信号强度:"..net.getRssi())if  net.getRssi() == 0  thenpio.pin.setval(0,Led1);--用三个指示灯指示信号的强度pio.pin.setval(0,Led2);pio.pin.setval(0,Led3); elseif  net.getRssi()<10 thenpio.pin.setval(0,Led1);pio.pin.setval(0,Led2);pio.pin.setval(1,Led3); elseif  net.getRssi()<20 thenpio.pin.setval(0,Led1);pio.pin.setval(1,Led2);pio.pin.setval(1,Led3); elseif  net.getRssi()>20 thenpio.pin.setval(1,Led1);pio.pin.setval(1,Led2);pio.pin.setval(1,Led3); endend
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"))
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)

其实逻辑处理也挺复杂的

源码打包出售  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

18-(基础入门篇)GPRS(Air202)拨打电话相关推荐

  1. Android基础入门教程——10.1 TelephonyManager(电话管理器)

    Android基础入门教程--10.1 TelephonyManager(电话管理器) 标签(空格分隔): Android基础入门教程 本节引言: 本章节是Android基础入门教程的最后一章,主要讲 ...

  2. 经典再现,看到就是赚到。尚硅谷雷神 - SpringBoot 2.x 学习笔记 - 基础入门篇

    SpringBoot 2.x 时代 – 基础入门篇 视频学习地址:https://www.bilibili.com/video/BV1Et411Y7tQ?p=112&spm_id_from=p ...

  3. 跟着王进老师学开发之Python篇第一季:基础入门篇-王进-专题视频课程

    跟着王进老师学开发之Python篇第一季:基础入门篇-2859人已学习 课程介绍         本季课程首先对Python简要介绍,然后演示如何搭建Python的开发环境,以及如何在IDE中调试Py ...

  4. 《Ansible权威指南 》一 第一篇 Part 1 基础入门篇

    本节书摘来自华章出版社<Ansible权威指南 >一书中的第1章,第1.1节,李松涛 魏 巍 甘 捷 著更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第一篇 ...

  5. linux入门_Linux超详细0基础入门篇(一)

    首先要感谢大康老师对我在Linux操作系统上的教导. 今天来讲一下用途广泛的Linux的基础入门教程 仅仅是做入门使用,如果想更加深入的学习那就需要自己做探索了. 本次例子使用的是kali linux ...

  6. 云小课|DGC数据开发之基础入门篇

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:欢迎来到DGC数据 ...

  7. sqlalchemy mysql教程_SQLAlchemy 教程 —— 基础入门篇

    SQLAlchemy 教程 -- 基础入门篇 一.课程简介 1.1 实验内容 本课程带领大家使用 SQLAlchemy 连接 MySQL 数据库,创建一个博客应用所需要的数据表,并介绍了使用 SQLA ...

  8. FPGA基础入门篇(四) 边沿检测电路

    FPGA基础入门篇(四)--边沿检测电路 一.边沿检测 边沿检测,就是检测输入信号,或者FPGA内部逻辑信号的跳变,即上升沿或者下降沿的检测.在检测到所需要的边沿后产生一个高电平的脉冲.这在FPGA电 ...

  9. JAVA中整型常量的长度,Java基础入门篇(三)——Java常量、变量,

    Java基础入门篇(三)--Java常量.变量, 一.Java常量 (一)什么是常量 常量指的是在程序中固定不变的值,是不能改变的数据.在Java中,常量包括整型常量.浮点型常量.布尔常量.字符常量等 ...

  10. 〖Python零基础入门篇㉟〗- 私有函数、私有变量及封装

    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...

最新文章

  1. Linux运维需要知道的Redis经验
  2. 币圈“水逆”,暴跌与高危漏洞
  3. UI 和 UX,区别在哪里?
  4. Python之web开发(二):python使用django框架搭建网站之新建文件
  5. java 图形立即显示_java 图形显示
  6. javase_03作业
  7. replace和replaceAll
  8. Base PyQt4, Simple Web APP Framwork
  9. java 常规类的可见性_Java 12常规可用性
  10. apache的产品分类说明
  11. 敏捷开发一千零一问系列之二:序言及解决问题的心法(无住)
  12. 如何在cocoapods中使用更新版本的pod
  13. springcloud中文手册API
  14. 扫二维码登录的实现原理
  15. android 缓存文件目录在哪个文件夹,哔哩哔哩缓存在哪个文件夹 具体操作步骤
  16. DVWA-Writeup
  17. text显示下标的字体 unity_Text Mesh Pro中文版
  18. 小鸟云服务器怎么修改密码?
  19. 单片机问题,24V NPN接近开关信号,怎么接入到单片机
  20. 如何保存google的壁纸

热门文章

  1. 百度+京东+美团Java面经合集
  2. win10中 有道词典不能联网/发音解决方法
  3. 小米6不显示与电脑连接到服务器,小米6怎么连接上电脑连不上怎么办
  4. 1040 实数的打印
  5. 8086CPU指令系统——算术运算类指令
  6. linux在命令行下打开pdf文件
  7. android音频系统(6):AudioService之音频输出通道切换
  8. allegro怎么导出PCB文件里封装
  9. causal snps | causal variants | tensorflow | 神经网络实战 | Data Simulation
  10. 计算机中的逻辑与或非,与或非运算(与或非逻辑运算口诀)