需求來源
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); }