• 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=='
    ')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=='
    ')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);
    }
    View Code
  • 相关阅读:
    【Mybatis】使用sql标签封装可复用SQL片段,使用include标签对其进行调用
    【Mybaits】如何在xxMapper.xml中的SQL语句里加入代码注释
    推理(Inference)与预测(Prediction)
    Lombok
    科普 | 深度学习训练和推理有何不同?
    什么是JavaBean,JavaBean作用
    虚函数可以用inline吗?
    python语言版(代码):计算百分数的概率单位
    【转载】百分数的概率单位变换——解惑:概率确实没有单位但是数学里面确实有“概率单位”这个词
    ppt小技巧
  • 原文地址:https://www.cnblogs.com/wdfrog/p/4350940.html
Copyright © 2020-2023  润新知