何故惹秋风 2019-03-24 17:37
浏览 448

mega2560的串口数据只显示一次

烟雾和火焰传感器在串口显示模拟值,只能显示一次,但是单独的代码程序都没有问题

#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();
}
  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥30 这是哪个作者做的宝宝起名网站
    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!