烟雾和火焰传感器在串口显示模拟值,只能显示一次,但是单独的代码程序都没有问题
#include <SPI.h>
#include <RFID.h>
#include "U8glib.h"
#include <dht11.h>
#include <DS1302.h>
#include <stdio.h>
#include <string.h>
//温湿度传感器定义
dht11 DHT11;
#define DHT11PIN 2
//显示屏定义
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
char str[0];
// 用于在OLED上显示时间
char oled_buf[50];
//定义门禁
RFID rfid(53,5);
//原扇区A密码,16个扇区,每个扇区密码6Byte
unsigned char sectorKeyA[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
unsigned char blockAddr = 4;
char strn[MAX_LEN];
const int R = 37;
const int G = 38;
const int B = 39;
const int NR = 40;
const int NG = 41;
const int NB = 42;
namespace {
const int kCePin = 8; // 复位引脚
const int kIoPin = 6; // 数据引脚
const int kSclkPin = 7; // 时钟引脚
DS1302 rtc(kCePin, kIoPin, kSclkPin);
void printTime() {
// 从模块获得当前时间
Time t = rtc.time();
// 格式化时间数据
snprintf(oled_buf, sizeof(oled_buf), "%02d:%02d:%02d",
t.hr, t.min, t.sec);
}
} // namespace
/*void init_oled(){
if ( u8g.getMode() == U8G_MODE_R3G3B2 )
u8g.setColorIndex(255); // white
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )
u8g.setColorIndex(3); // max intensity
else if ( u8g.getMode() == U8G_MODE_BW )
u8g.setColorIndex(1); // pixel on
u8g.setFont(u8g_font_6x10);
u8g.setFontRefHeightExtendedText();
u8g.setDefaultForegroundColor();
u8g.setFontPosTop();
}*/
void setup()
{
Serial.begin(9600);
//init_oled();
rtc.writeProtect(false);
rtc.halt(false);
pinMode(A0,INPUT);
pinMode(A1,INPUT);//模拟口输入模式
pinMode(B,OUTPUT);
pinMode(G,OUTPUT);
pinMode(R,OUTPUT);//状态指示灯
pinMode(NB,OUTPUT);
pinMode(NG,OUTPUT);
pinMode(NR,OUTPUT);//门禁指示灯
}
void loop()
{
//烟雾传感器
Serial.println(analogRead(A0),DEC);
/*if(analogRead(A0) > 200)
{
digitalWrite(R,HIGH);
}*/
//火焰传感器
Serial.println(analogRead(A1),DEC);//串口发送火焰传感器模拟量
//delay(500);
/*if(analogRead(A1) > 200)
{
digitalWrite(R,HIGH);
}
else
{
digitalWrite(G,HIGH);
}*/
//温湿度
DHT11.read(DHT11PIN);
float h = DHT11.humidity;
float t = DHT11.temperature;
//显示屏
u8g.firstPage(); //OLED左上角为0,0 ;字符定位为 左下角 firstPage标志图像循环开始
do {
u8g.setFont(u8g_font_unifont);
u8g.drawStr( 0, 10, "Hum="); //显示 H=
u8g.drawStr( 50, 10, dtostrf(h, 5, 2, str));
u8g.drawStr( 100, 10, "%");
u8g.drawStr( 0, 30, "Tem="); //显示 T=
u8g.drawStr( 50, 30, dtostrf(t, 5, 2, str));
u8g.drawStr( 100, 30, "oC");
u8g.drawStr( 0, 50, "Time=");
u8g.drawStr( 50, 50, oled_buf);
} while( u8g.nextPage() );//nextPage标志图像循环结束
delay(500);
printTime();
delay(500);
//nfc门禁
digitalWrite(NB,HIGH);
rfid.init();
if (rfid.isCard())
{
//读取标签卡的序列号
if (rfid.readCardSerial())
{
//选卡,可返回卡容量(锁定卡片防止多数读取),去掉本行将连续读卡
rfid.selectTag(rfid.serNum);
//读卡
if (rfid.auth(PICC_AUTHENT1A, blockAddr , sectorKeyA, rfid.serNum) == MI_OK) //认证
{
//读数据
if ( rfid.read(blockAddr, strn) == MI_OK)
{
if( strcmp(strn,"manager") == 0 )
{
digitalWrite(NB,LOW);
digitalWrite(NG,HIGH);
delay(2000);
digitalWrite(NG,LOW);
}
else
{
digitalWrite(NB,LOW);
digitalWrite(NR,HIGH);
delay(2000);
digitalWrite(NR,LOW);
}
}
else
{
digitalWrite(NB,LOW);
digitalWrite(NR,HIGH);
delay(2000);
digitalWrite(NR,LOW);
}
}
}
}
rfid.halt();
}