18-(基础入门篇)GPRS(Air202)拨打电话
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)拨打电话相关推荐
- Android基础入门教程——10.1 TelephonyManager(电话管理器)
Android基础入门教程--10.1 TelephonyManager(电话管理器) 标签(空格分隔): Android基础入门教程 本节引言: 本章节是Android基础入门教程的最后一章,主要讲 ...
- 经典再现,看到就是赚到。尚硅谷雷神 - SpringBoot 2.x 学习笔记 - 基础入门篇
SpringBoot 2.x 时代 – 基础入门篇 视频学习地址:https://www.bilibili.com/video/BV1Et411Y7tQ?p=112&spm_id_from=p ...
- 跟着王进老师学开发之Python篇第一季:基础入门篇-王进-专题视频课程
跟着王进老师学开发之Python篇第一季:基础入门篇-2859人已学习 课程介绍 本季课程首先对Python简要介绍,然后演示如何搭建Python的开发环境,以及如何在IDE中调试Py ...
- 《Ansible权威指南 》一 第一篇 Part 1 基础入门篇
本节书摘来自华章出版社<Ansible权威指南 >一书中的第1章,第1.1节,李松涛 魏 巍 甘 捷 著更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第一篇 ...
- linux入门_Linux超详细0基础入门篇(一)
首先要感谢大康老师对我在Linux操作系统上的教导. 今天来讲一下用途广泛的Linux的基础入门教程 仅仅是做入门使用,如果想更加深入的学习那就需要自己做探索了. 本次例子使用的是kali linux ...
- 云小课|DGC数据开发之基础入门篇
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:欢迎来到DGC数据 ...
- sqlalchemy mysql教程_SQLAlchemy 教程 —— 基础入门篇
SQLAlchemy 教程 -- 基础入门篇 一.课程简介 1.1 实验内容 本课程带领大家使用 SQLAlchemy 连接 MySQL 数据库,创建一个博客应用所需要的数据表,并介绍了使用 SQLA ...
- FPGA基础入门篇(四) 边沿检测电路
FPGA基础入门篇(四)--边沿检测电路 一.边沿检测 边沿检测,就是检测输入信号,或者FPGA内部逻辑信号的跳变,即上升沿或者下降沿的检测.在检测到所需要的边沿后产生一个高电平的脉冲.这在FPGA电 ...
- JAVA中整型常量的长度,Java基础入门篇(三)——Java常量、变量,
Java基础入门篇(三)--Java常量.变量, 一.Java常量 (一)什么是常量 常量指的是在程序中固定不变的值,是不能改变的数据.在Java中,常量包括整型常量.浮点型常量.布尔常量.字符常量等 ...
- 〖Python零基础入门篇㉟〗- 私有函数、私有变量及封装
订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...
最新文章
- Linux运维需要知道的Redis经验
- 币圈“水逆”,暴跌与高危漏洞
- UI 和 UX,区别在哪里?
- Python之web开发(二):python使用django框架搭建网站之新建文件
- java 图形立即显示_java 图形显示
- javase_03作业
- replace和replaceAll
- Base PyQt4, Simple Web APP Framwork
- java 常规类的可见性_Java 12常规可用性
- apache的产品分类说明
- 敏捷开发一千零一问系列之二:序言及解决问题的心法(无住)
- 如何在cocoapods中使用更新版本的pod
- springcloud中文手册API
- 扫二维码登录的实现原理
- android 缓存文件目录在哪个文件夹,哔哩哔哩缓存在哪个文件夹 具体操作步骤
- DVWA-Writeup
- text显示下标的字体 unity_Text Mesh Pro中文版
- 小鸟云服务器怎么修改密码?
- 单片机问题,24V NPN接近开关信号,怎么接入到单片机
- 如何保存google的壁纸
热门文章
- 百度+京东+美团Java面经合集
- win10中 有道词典不能联网/发音解决方法
- 小米6不显示与电脑连接到服务器,小米6怎么连接上电脑连不上怎么办
- 1040 实数的打印
- 8086CPU指令系统——算术运算类指令
- linux在命令行下打开pdf文件
- android音频系统(6):AudioService之音频输出通道切换
- allegro怎么导出PCB文件里封装
- causal snps | causal variants | tensorflow | 神经网络实战 | Data Simulation
- 计算机中的逻辑与或非,与或非运算(与或非逻辑运算口诀)