小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Arduino看門狗問題,求助(已解決)

 開啟美好每一天 2015-11-13
ARDUINO 代碼
  1. //*******************************************/
  2. //神經(jīng)元2號(hào)控制器
  3. //Neuron Ver 2.02D
  4. //高勝  2012-4-1
  5. //修改  2012-8-12
  6. //電信基站機(jī)房監(jiān)控
  7. //D0-D1為串口和網(wǎng)絡(luò)模塊接口
  8. //OUT1  2號(hào)口(開關(guān)量輸出)煙感報(bào)警器1按鈕接口
  9. //OUT2  3號(hào)口(開關(guān)量輸出)煙感報(bào)警器2按鈕接口
  10. //SG    4號(hào)口(開關(guān)量輸出)室外聲光警報(bào)器輸出口
  11. //VD4   5號(hào)口(開關(guān)量輸出)通訊狀態(tài)燈
  12. //VD3   6號(hào)口(開關(guān)量輸出)設(shè)備故障燈
  13. //VD2   7號(hào)口(開關(guān)量輸入)報(bào)警燈
  14. //IN5   8號(hào)口(開關(guān)量輸入)測(cè)試按鈕
  15. //IN6   9號(hào)口(開關(guān)量輸入)煙感報(bào)警器1接口
  16. //GZ1   10號(hào)口(開關(guān)量輸入)煙感報(bào)警器2接口
  17. //A0    模擬0 (模擬量輸入)采集室外聲光報(bào)警器電壓
  18. //********************************************/
  19. //修改輸出字串 變DD[20] 為 DD[0-19]+DH[4-10] (DH[4-10]為參數(shù))
  20. /*
  21. 寫入基本信息指令: {*009,255;010,255;014,060;}
  22. 寫入標(biāo)識(shí)信息指令: {*041,001;}
  23. 保存指令:         {#}
  24. */


  25. //Lib函數(shù)庫庫
  26. #include <EEPROM.h>
  27. #include <avr/wdt.h>                                                                //使用WDT看門狗


  28. //數(shù)字傳感器端口

  29. #define smoke1_pin                            9                 //煙感報(bào)警器1接口
  30. #define smoke2_pin                            10                //煙感報(bào)警器2接口
  31. #define alarm1_test_pin          2                 //煙感報(bào)警器1按鈕接口
  32. #define alarm2_test_pin                         3                 //煙感報(bào)警器2按鈕接口

  33. #define alarm_pin                         4                 //室外聲光警報(bào)器輸出口
  34. #define reset_pin                            4                 //電源復(fù)位 (常開接點(diǎn),需要上電是輸出高電平)

  35. #define commled_pin                                 5                                   //通訊狀態(tài)燈         
  36. #define led_pin                          6                 //設(shè)備故障燈
  37. #define alarmled_pin                        7                 //報(bào)警燈
  38. #define testbutton_pin                    8                 //測(cè)試按鈕


  39. //模擬傳感器端口
  40. #define ac_pin                            0                   //電源電壓傳感器
  41. #define bj_pin                            0                   //聲光報(bào)警器電壓傳感器


  42. int count;                                           //程序控制器計(jì)數(shù)器
  43. int connect_count;                                                                        // 通訊計(jì)數(shù)器
  44. byte alarmcount[20];                                 //為每個(gè)參數(shù)分配一個(gè)報(bào)警計(jì)數(shù)器
  45. byte unalarmcount[20];                               //為每個(gè)參數(shù)分配一個(gè)un報(bào)警計(jì)數(shù)器
  46. byte alarmstatus[20];
  47. //int resetcount;
  48. int status;                                                                                 //系統(tǒng)進(jìn)入空閑狀態(tài)
  49. int address;                                                                                 //程序控制器變量
  50. int values;                                                                                 //程序控制器變量
  51. static uint32_t timer;                                                                 //計(jì)時(shí)器
  52. boolean testflag = false;                           //自檢測(cè)時(shí)標(biāo)示
  53. boolean alarmflag = false;                                                        //報(bào)警標(biāo)示                                               
  54. int        checkcount;                                                                       //煙感報(bào)警器和聲光報(bào)警器狀態(tài)檢測(cè)周期計(jì)數(shù)器 每1小時(shí)檢測(cè)一次
  55. long jiange;

  56. int DD[20];                                          //動(dòng)態(tài)數(shù)據(jù) |ADD|NULL|D2|D3|....|D11|D12|D13|A0|..|A5| 一共20個(gè)

  57. byte DH[42];                                                      //[0]:標(biāo)示為"N" 否則認(rèn)定沒有設(shè)置參數(shù)
  58.                                                                                                  //[1]-[20]為控制位 1-8字節(jié) 1(1 啟用本通道 0 禁用本通道 ) 2、3(00數(shù)字輸入 01數(shù)字輸出 10
  59.                                                                                                  //模擬輸入 11模擬輸出)4(1高位報(bào)警 0低位報(bào)警) 5、6(00不報(bào)、01只監(jiān)控、10上限報(bào)警 11下限報(bào)警)
  60.                                                                                                  //7、8(00網(wǎng)絡(luò)報(bào)警 01 聲音 10 短信 11聲音+短信)
  61.                                                                                                  //[21]-[40]對(duì)應(yīng)[1]-[20]的報(bào)警數(shù)值
  62.                                                                                                  //[41]設(shè)備地址碼  
  63.                                                                                                  //DH[9] DH[10] fire        DH[14] timer      
  64. void setup()
  65. {
  66.         //初始化串口
  67.         Serial.begin(9600);         

  68.         //煙感報(bào)警器接口(輸入)
  69.         pinMode(smoke1_pin,INPUT);
  70.         pinMode(smoke2_pin,INPUT);
  71.         pinMode(testbutton_pin ,INPUT);

  72.         //煙感報(bào)警器測(cè)試按鈕接口(輸出)
  73.         pinMode(alarm1_test_pin,OUTPUT);
  74.         pinMode(alarm2_test_pin,OUTPUT);

  75.         //輸出 LED燈 報(bào)警器 電源復(fù)位
  76.         pinMode(led_pin,OUTPUT);
  77.         pinMode(commled_pin,OUTPUT);
  78.         pinMode(alarmled_pin,OUTPUT);

  79.         pinMode(reset_pin,OUTPUT);
  80.         pinMode(alarm_pin,OUTPUT);



  81.         //拉高電平給設(shè)備供電
  82.         digitalWrite(reset_pin, LOW);  
  83.         digitalWrite(alarm1_test_pin, LOW);  
  84.         digitalWrite(alarm2_test_pin, LOW);  
  85.         digitalWrite(alarm_pin, LOW);         
  86.     int i;
  87.     for (i=0;i<20;i++){
  88.                 alarmcount[i]=0;
  89.                 }
  90.     for (i=0;i<20;i++){
  91.                 DD[i]=1;
  92.                 }
  93.     //設(shè)備初始化
  94.         deviceinit();

  95.         //變量初始化
  96.         delay(1000);
  97.     jiange=millis();
  98.         status = 0;
  99.     count = 100;
  100.         connect_count=0;
  101.         //初始化看門狗
  102.         wdt_enable(WDTO_8S);      

  103. }


  104. //主循環(huán)程序   
  105. void loop()  
  106. {  
  107.         byte inbyte;
  108.         wdt_reset();                                                                          //喂狗         
  109.    if (Serial.available() > 0){                          //從串口接收指令
  110.     inbyte = Serial.read();                              //
  111.     action(inbyte);                                      //調(diào)用控制函數(shù)進(jìn)入指令狀態(tài)
  112.    }

  113. if (status==0)                         //status==0 那么系統(tǒng)進(jìn)入空閑狀態(tài),繼續(xù)采集數(shù)據(jù)、監(jiān)控報(bào)警,否則進(jìn)入忙狀態(tài)暫停采集報(bào)警任務(wù)
  114. {
  115.     data_capture();                //數(shù)據(jù)采集
  116.     if   (testflag==true)        {
  117.         alarmcheck();                 //報(bào)警檢測(cè)
  118.         }
  119.         if (!digitalRead(testbutton_pin))        //按下自檢測(cè)試按鈕
  120.         {
  121.     testflag=false;
  122.         checkcount=0;
  123.         checkfire();         //進(jìn)行火災(zāi)探測(cè)器的自檢測(cè)試
  124.         delay(1000);
  125.         checkalarm();    //進(jìn)行聲光報(bào)警器的自檢測(cè)試

  126.         }
  127. }





  128. //設(shè)備自檢自啟動(dòng)
  129. void selftest(){

  130.         Serial.print("<i|SELF_TEST|");
  131.         Serial.print(DH[41],DEC);
  132.         Serial.println("|>");

  133. for(int i=1;i<=3;i++){
  134.         digitalWrite(led_pin, HIGH);  
  135.         digitalWrite(alarmled_pin, HIGH);  
  136.     wdt_reset();                                                                                          //喂狗               
  137.         delay(3000);
  138.         digitalWrite(led_pin, LOW);
  139.         digitalWrite(alarmled_pin, LOW);
  140.         }

  141.         Serial.print("<i|SYSTEM_RESET|");
  142.         Serial.print(DH[41],DEC);
  143.         Serial.println("|>");
  144.         delay(10000);                                                                                                //8S后系統(tǒng)復(fù)位
  145.         }




順便說一下 看門狗的用法很簡(jiǎn)單 看看是不是片子和bootload的問題
只需要三句話就可以

#include <avr/wdt.h>                                                                //使用WDT看門狗

wdt_enable(WDTO_8S);                                                                  //初始化看門狗

wdt_reset();                                                                                          //喂狗

然后給個(gè)長(zhǎng)于8S的延時(shí),系統(tǒng)就可以重新啟動(dòng)


另外 我還常用軟啟動(dòng)來解決系統(tǒng)啟動(dòng)問題,效率比看門狗要高,只是啟動(dòng)后,寄存器和內(nèi)存變量的值不變,供各位參考:


void software_Reset() // 軟啟動(dòng)系統(tǒng),但不 復(fù)位寄存器和變量
{
        asm volatile ("  jmp 0");
}  

這個(gè)原理很簡(jiǎn)單,直接跳轉(zhuǎn)到程序起始位:0000開始運(yùn)行,學(xué)過匯編的應(yīng)該明白,這個(gè)效率真他媽的高啊 呵呵

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多