//*******************************************/ //神经元2号控制器 //Neuron Ver 2.02D //高胜 2012-4-1 //修改 2012-8-12 //电信基站机房监控 //D0-D1为串口和网络模块接口 //OUT1 2号口(开关量输出)烟感报警器1按钮接口 //OUT2 3号口(开关量输出)烟感报警器2按钮接口 //SG 4号口(开关量输出)室外声光警报器输出口 //VD4 5号口(开关量输出)通讯状态灯 //VD3 6号口(开关量输出)设备故障灯 //VD2 7号口(开关量输入)报警灯 //IN5 8号口(开关量输入)测试按钮 //IN6 9号口(开关量输入)烟感报警器1接口 //GZ1 10号口(开关量输入)烟感报警器2接口 //A0 模拟0 (模拟量输入)采集室外声光报警器电压 //********************************************/ //修改输出字串 变DD[20] 为 DD[0-19]+DH[4-10] (DH[4-10]为参数) /* 写入基本信息指令: {*009,255;010,255;014,060;} 写入标识信息指令: {*041,001;} 保存指令: {#} */ //Lib函数库库 #include <EEPROM.h> #include <avr/wdt.h> //使用WDT看门狗 //数字传感器端口 #define smoke1_pin 9 //烟感报警器1接口 #define smoke2_pin 10 //烟感报警器2接口 #define alarm1_test_pin 2 //烟感报警器1按钮接口 #define alarm2_test_pin 3 //烟感报警器2按钮接口 #define alarm_pin 4 //室外声光警报器输出口 #define reset_pin 4 //电源复位 (常开接点,需要上电是输出高电平) #define commled_pin 5 //通讯状态灯 #define led_pin 6 //设备故障灯 #define alarmled_pin 7 //报警灯 #define testbutton_pin 8 //测试按钮 //模拟传感器端口 #define ac_pin 0 //电源电压传感器 #define bj_pin 0 //声光报警器电压传感器 int count; //程序控制器计数器 int connect_count; // 通讯计数器 byte alarmcount[20]; //为每个参数分配一个报警计数器 byte unalarmcount[20]; //为每个参数分配一个un报警计数器 byte alarmstatus[20]; //int resetcount; int status; //系统进入空闲状态 int address; //程序控制器变量 int values; //程序控制器变量 static uint32_t timer; //计时器 boolean testflag = false; //自检测时标示 boolean alarmflag = false; //报警标示 int checkcount; //烟感报警器和声光报警器状态检测周期计数器 每1小时检测一次 long jiange; int DD[20]; //动态数据 |ADD|NULL|D2|D3|....|D11|D12|D13|A0|..|A5| 一共20个 byte DH[42]; //[0]:标示为"N" 否则认定没有设置参数 //[1]-[20]为控制位 1-8字节 1(1 启用本通道 0 禁用本通道 ) 2、3(00数字输入 01数字输出 10 //模拟输入 11模拟输出)4(1高位报警 0低位报警) 5、6(00不报、01只监控、10上限报警 11下限报警) //7、8(00网络报警 01 声音 10 短信 11声音+短信) //[21]-[40]对应[1]-[20]的报警数值 //[41]设备地址码 //DH[9] DH[10] fire DH[14] timer void setup() { //初始化串口 Serial.begin(9600); //烟感报警器接口(输入) pinMode(smoke1_pin,INPUT); pinMode(smoke2_pin,INPUT); pinMode(testbutton_pin ,INPUT); //烟感报警器测试按钮接口(输出) pinMode(alarm1_test_pin,OUTPUT); pinMode(alarm2_test_pin,OUTPUT); //输出 LED灯 报警器 电源复位 pinMode(led_pin,OUTPUT); pinMode(commled_pin,OUTPUT); pinMode(alarmled_pin,OUTPUT); pinMode(reset_pin,OUTPUT); pinMode(alarm_pin,OUTPUT); //拉高电平给设备供电 digitalWrite(reset_pin, LOW); digitalWrite(alarm1_test_pin, LOW); digitalWrite(alarm2_test_pin, LOW); digitalWrite(alarm_pin, LOW); int i; for (i=0;i<20;i++){ alarmcount[i]=0; } for (i=0;i<20;i++){ DD[i]=1; } //设备初始化 deviceinit(); //变量初始化 delay(1000); jiange=millis(); status = 0; count = 100; connect_count=0; //初始化看门狗 wdt_enable(WDTO_8S); } //主循环程序 void loop() { byte inbyte; wdt_reset(); //喂狗 if (Serial.available() > 0){ //从串口接收指令 inbyte = Serial.read(); // action(inbyte); //调用控制函数进入指令状态 } if (status==0) //status==0 那么系统进入空闲状态,继续采集数据、监控报警,否则进入忙状态暂停采集报警任务 { data_capture(); //数据采集 if (testflag==true) { alarmcheck(); //报警检测 } if (!digitalRead(testbutton_pin)) //按下自检测试按钮 { testflag=false; checkcount=0; checkfire(); //进行火灾探测器的自检测试 delay(1000); checkalarm(); //进行声光报警器的自检测试 } } //设备自检自启动 void selftest(){ Serial.print("<i|SELF_TEST|"); Serial.print(DH[41],DEC); Serial.println("|>"); for(int i=1;i<=3;i++){ digitalWrite(led_pin, HIGH); digitalWrite(alarmled_pin, HIGH); wdt_reset(); //喂狗 delay(3000); digitalWrite(led_pin, LOW); digitalWrite(alarmled_pin, LOW); } Serial.print("<i|SYSTEM_RESET|"); Serial.print(DH[41],DEC); Serial.println("|>"); delay(10000); //8S后系统复位 }
联系客服