#include <Arduino.h>
#include <U8g2lib.h>
//#include <SPI.h>
#include <Wire.h>
#include "DFRobot_CCS811.h"
#include "DFRobot_Libraries.h"   //LM35
#include <DFRobot_NeoPixel.h>

DFRobot_LM35 LM35;
DFRobot_CCS811 ccs811;    ///0x5A
DFRobot_NeoPixel  rgb_display_11;
/*
 * 显示屏硬件IIC接口构造函数
 *@param rotation：U8G2_R0 不旋转，横向，绘制方向从左到右
       U8G2_R1 顺时针旋转90度，绘制方向从上到下
       U8G2_R2 顺时针旋转180度，绘制方向从右到左
       U8G2_R3 顺时针旋转270度，绘制方向从下到上
       U8G2_MIRROR 正常显示镜像内容（v2.6.x版本以上使用)   注意:U8G2_MIRROR需要与setFlipMode（）配搭使用.
 *@param reset：u8g2_PIN_NONE 表示引脚为空，不会使用复位引脚
 * 显示屏硬件SPI接口构造函数
 *@param  cs 按引脚接上即可（引脚可自己选择）
 *@param  dc 按引脚接上即可（引脚可自己选择）
 *
*/
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(/* rotation=*/U8G2_R0, /* reset=*/ U8X8_PIN_NONE);    //  M0/ESP32/ESP8266/mega2560/Uno/Leonardo


int reTVOC=0,reCO2=0,tmp = 0;
uint16_t val = 0;
void setup() 
{
  ccs811.begin();
  ccs811.setMeasCycle(ccs811.eCycle_250ms);
  rgb_display_11.begin(11, 3, 255);   
  u8g2.begin();
  u8g2.setFont(u8g2_font_crox5tb_tr);//设置字体大小 
  u8g2.firstPage();   
  do
  {
    u8g2.drawStr(15,40,"Welcome");       //显示内容 
  } while( u8g2.nextPage() );
  uint32_t timeStamp=millis();
  while((millis()-timeStamp)<2000)
  {
    reTVOC = ccs811.getTVOCPPB();
    reCO2 = ccs811.getCO2PPM();
    val=analogRead(A0);//Connect LM35 on Analog 0
    tmp = (int) val * (5/10.24);
  }
}

void draw(int a )
{
   switch(a)
   {
     case 0: reTVOC = ccs811.getTVOCPPB();   //TVOC内容
             if(reTVOC > 350 )
             {
               rgb_display_11.setRangeColor(0, 2, 0xff0000);    
             }
             else
             {
               rgb_display_11.clear();
             }
             u8g2.drawStr(0,20,"TVOC:");         
             u8g2.setCursor(20,55);
             u8g2.print(reTVOC);
             u8g2.drawStr(87,55,"ppm");
             delay(3000); 
             break;            
     case 1: reCO2 = ccs811.getCO2PPM();
             if(reCO2 > 1200)
             {
               rgb_display_11.setRangeColor(0, 2, 0xff0000);    
             }
             else
             {
               rgb_display_11.clear();
             }
             u8g2.drawStr(0,20,"CO2:");
             u8g2.setCursor(20,55);
             u8g2.print(reCO2);
             u8g2.drawStr(90,55,"ppb"); 
             delay(3000); 
             break;   
     case 2: val=analogRead(A0);//Connect LM35 on Analog 0
             tmp = (int) val * (5/10.24);
             u8g2.drawStr(0,20,"Temp:");         
             u8g2.setCursor(30,55);
             u8g2.print(tmp);
             u8g2.drawStr(90,55,"C"); 
             delay(3000);    
             break;                      
   }     
}

void loop() 
{  
  for( int i = 0; i <3 ;i++ )
  {
  /*
   * u8g2.firstPage()/nextPage()：循环刷新显示。
   * firstPage方法会把当前页码位置变成0
   * 修改内容处于firstPage和nextPage之间，每次都是重新渲染所有内容
   * 该方法消耗的ram空间，比sendBuffer消耗的ram空间要少
  */ 
    u8g2.firstPage();   
    do
    {
      draw(i);
    } while( u8g2.nextPage() );    
  } 
}