arduino uno r3 + SIM900 + USB打火机 实现电话触发点火
需求来源
1.儿子过完年6岁,喜欢玩烟花,但是胆子小,于是我就负责点火,从年前26到大年初八,每天晚上要给儿子点鞭炮啊点鞭炮。
2.这边过年要打关门炮跟开门炮,大年初一凌晨还要起来帮老妈点鞭炮,说实在的那个整串的小鞭炮也炸的太快了,每次没跑几步就开响,哥也心脏不好啊。
设计:
根据需求,我们需要个远程点火的打火机,上taobao上逛了一圈,找到了usb打火机,续电器,外加一张SIM900 arduino扩展板,回来简单的一连,就了了了。
代码:
#include <SoftwareSerial.h> #include <String.h> SoftwareSerial GPRS(7, 8); String currentLine = ""; // string to hold the text from server String triggerNo="13616761237"; String mobile = ""; boolean readingNo=false; long lastTriggerTime=0; boolean fireing=false; int led=4; void setup() { GPRS.begin(19200); // the GPRS baud rate Serial.begin(19200); // the GPRS baud rate pinMode(9, OUTPUT); pinMode(led,OUTPUT); digitalWrite(led,LOW); delay(500); powerUpOrDown(); } void loop() { if(fireing){ if( millis() - lastTriggerTime >= 12 * 1000){ Serial.println("stop fire!"); digitalWrite(led,LOW); fireing=false; }else{ return; } } while(GPRS.available()){ char inChar=GPRS.read(); currentLine +=inChar; if(inChar=='\n')currentLine=""; if(currentLine.endsWith( "+CLIP: \"")){ readingNo=true; mobile=""; } if(readingNo){ if(inChar !=','){ if(inChar !='"')mobile+=inChar; }else{ readingNo=false; Serial.println(mobile); if(mobile==triggerNo){ lastTriggerTime=millis(); Serial.println("fire!!"); fireing=true; currentLine=""; mobile=""; delay(1000); digitalWrite(led,HIGH); delay(4000); GPRS.println("ATH"); while(GPRS.available()){ GPRS.read(); } } } } } } void powerUpOrDown() { digitalWrite(9,LOW); delay(1000); digitalWrite(9,HIGH); delay(2000); digitalWrite(9,LOW); delay(3000); }
效果图(分待机状态跟触发状态):

#include <SoftwareSerial.h> #include <String.h> SoftwareSerial GPRS(7, 8); String currentLine = ""; // string to hold the text from server String triggerNo="13616761237"; String mobile = ""; boolean readingNo=false; long lastTriggerTime=0; boolean fireing=false; int led=4; long lastReadTime=0; void setup() { GPRS.begin(19200); // the GPRS baud rate Serial.begin(19200); // the GPRS baud rate pinMode(9, OUTPUT); pinMode(led,OUTPUT); digitalWrite(led,LOW); delay(500); } void loop() { if(fireing){ if( millis() - lastTriggerTime >= 12 * 1000){ Serial.println("stop fire!"); digitalWrite(led,LOW); fireing=false; }else{ return; } } while(GPRS.available()){ lastReadTime=millis(); char inChar=GPRS.read(); currentLine +=inChar; if(inChar=='\n')currentLine=""; if(currentLine.endsWith( "+CLIP: \"")){ readingNo=true; mobile=""; } if(readingNo){ if(inChar !=','){ if(inChar !='"')mobile+=inChar; }else{ readingNo=false; Serial.println(mobile); if(mobile==triggerNo){ lastTriggerTime=millis(); Serial.println("fire!!"); fireing=true; currentLine=""; mobile=""; delay(1000); digitalWrite(led,HIGH); delay(4000); GPRS.println("ATH"); while(GPRS.available()){ GPRS.read(); } } } } } if(millis()- lastReadTime >= 1000 * 30) { tryPowerUp(); } } void tryPowerUp(){ GPRS.println("AT"); delay(500); if(GPRS.available())return; powerUpOrDown(); } void powerUpOrDown() { digitalWrite(9,LOW); delay(1000); digitalWrite(9,HIGH); delay(1000); digitalWrite(9,LOW); delay(5000); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
2010-03-19 地址重写中使用httpModule映射.htm的问题