:::

3-3 顯示G5T數值

一、範例程式

 

#include <SoftwareSerial.h>
#include <UTFT.h>
SoftwareSerial PmsSerial(2, 3); // RX, TX
UTFT myGLCD(QD220A, A2,A1,A5,A4,A3);
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
 
static unsigned int pm_at_10;
static unsigned int pm_at_25;
static unsigned int pm_at_100;
static float sencorT;
static float sencorH;
 
void getG5(unsigned char ucData)//獲取G5的值
{
  static unsigned int ucRxBuffer[250];
  static unsigned int ucRxCnt = 0;
  ucRxBuffer[ucRxCnt++] = ucData;
  if (ucRxBuffer[0] != 0x42 && ucRxBuffer[1] != 0x4D) {   //資料頭判斷
    ucRxCnt = 0;
    return;
  }
  
  if (ucRxCnt > 32) {  //資料位元數判斷//G5T為32
    int ucRxSum = 0;
    for(int i=0; i<30; i++) {
      ucRxSum += ucRxBuffer[i];
    }
    if(ucRxSum != ((ucRxBuffer[30]<<8) + ucRxBuffer[31])) return;  //校驗碼加總檢查
    pm_at_10=(int)ucRxBuffer[10] * 256 + (int)ucRxBuffer[11];               
    pm_at_25=(int)ucRxBuffer[12] * 256 + (int)ucRxBuffer[13];
    pm_at_100=(int)ucRxBuffer[14] * 256 + (int)ucRxBuffer[15];
    sencorT=(int)ucRxBuffer[24] * 256 + (int)ucRxBuffer[25];
    sencorH=(int)ucRxBuffer[26] * 256 + (int)ucRxBuffer[27]; 
    sencorT=sencorT/10;
    sencorH=sencorH/10;

    if (pm_at_25 >  999) {
      ucRxCnt = 0;
      return;
    }
    ucRxCnt = 0;
    return;
  }
}
 
void setup() {
   PmsSerial.begin(9600);
   Serial.begin(9600);
   Serial.print("PM_AQI1.0");Serial.print(",");
   Serial.print("PM_AQI2.5");Serial.print(",");
   Serial.print("PM_AQI10");Serial.print(",");
   Serial.print("Temperature");Serial.print(",");
   Serial.println("Humandity");
    
   Serial.print("(ug/m3)");Serial.print(",");
   Serial.print("(ug/m3)");Serial.print(",");
   Serial.print("(ug/m3)");Serial.print(",");
   Serial.print("(ug/m3)");Serial.print(",");
   Serial.print("(ug/m3)");Serial.print(",");
   Serial.print("(ug/m3)");Serial.print(",");
   Serial.print("(pcs/0.01cf)");Serial.print(",");
   Serial.print("(pcs/0.01cf)");Serial.print(",");
   Serial.print("(pcs/0.01cf)");Serial.print(",");
   Serial.print("(pcs/0.01cf)");Serial.print(",");
   Serial.print("(C)");Serial.print(",");
   Serial.println("(%)");

//TFT
  myGLCD.InitLCD();
  myGLCD.clrScr();

  myGLCD.setFont(BigFont);
  myGLCD.print("PM2.5 Sencor", 0, 0);
  
  myGLCD.setFont(BigFont);
  myGLCD.setColor( 255 , 255 , 0 );
  myGLCD.print("NNJH", CENTER , 25);

  myGLCD.setFont(SmallFont);
  myGLCD.setColor( 255 , 0 , 0 );
  myGLCD.print("(pm2.5)", 30 ,45);

  myGLCD.setFont(SmallFont);
  myGLCD.setColor( 255 , 0 , 0 );
  myGLCD.print("ug/m3", 40 , 110);

  myGLCD.setFont(SmallFont);
  myGLCD.setColor( 255 , 0 , 0 );
  myGLCD.print("(Temp)", 130 ,105);

  myGLCD.setFont(SmallFont);
  myGLCD.setColor( 255 , 0 , 0 );
  myGLCD.print("(Humandity)", 120 ,135);

  pinMode(12,OUTPUT);
  digitalWrite(12,HIGH);
}
 
void loop() {
  while (PmsSerial.available()) {
    getG5(PmsSerial.read());
  }
  Serial.print(pm_at_10);Serial.print(",");
  Serial.print(pm_at_25);Serial.print(",");
  Serial.print(pm_at_100);Serial.print(",");
  Serial.print(sencorT);Serial.print(",");
  Serial.println(sencorH);

//TFT
            myGLCD.setFont(SevenSegNumFont);
            if (pm_at_25 < 16){
                myGLCD.setColor(0, 255, 0);
              }
              else if( (pm_at_25) > (16) & (pm_at_25)<(36)) {
                myGLCD.setColor(VGA_YELLOW);
              }
              else if ((pm_at_25) > (35) & (pm_at_25)<(55) ){
                myGLCD.setColor(208,123, 0);
              }
              else if ((pm_at_25) > (54) & (pm_at_25)<(151) ) {
                myGLCD.setColor(VGA_RED);
              }
              else if ((pm_at_25) > (150) ) {
                myGLCD.setColor(VGA_PURPLE);
              }
              
            if ((pm_at_25) < (10) ) {
              myGLCD.print("00"+String(pm_at_25) , 5, 58 );
              }
              else if ((pm_at_25) > (9) & (pm_at_25) < (100)) {
              myGLCD.print("0"+String(pm_at_25) , 5, 58 );
              }
              else if ((pm_at_25) > (99) ) {
              myGLCD.print(String(pm_at_25) , 5, 58 );
              }

            
            myGLCD.setFont(BigFont);
            if (sencorT < 10) {
              myGLCD.setColor(VGA_BLUE);
              myGLCD.print("0"+String(sencorT) , 115 , 115);
              }
              else if (sencorT > 9) {
              myGLCD.setColor(VGA_WHITE);
              myGLCD.print(String(sencorT) , 115 , 115);
              }
            if (sencorH < 10) {
              myGLCD.setColor(VGA_BLUE);
              myGLCD.print("0"+String(sencorH) , 115 , 150);
              }
              else if (sencorH > 9 & sencorH < 65) {
              myGLCD.setColor(VGA_WHITE);
              myGLCD.print(String(sencorH) , 115 , 150);
              }
              else if (sencorH >= 65) {
              myGLCD.setColor(VGA_RED);
              myGLCD.print(String(sencorH) , 115 , 150);
              }
   delay(2000);
}

 


搜尋