#include <UTFT.h>
UTFT myGLCD(YYROBOT_TFT144,A2,A1,A5,A4,A3); // Remember to change the model parameter to suit your display module!
//YYROBOT_TFT144 屏幕型號,不用修改
//SDA----A2
//SCL----A1
//CS-----A5
//RST----A4
//RS----A3
//LED---A0 UTFT庫里面設定的,如果需要修改需要修改庫文件
extern uint8_t SmallFont[];//原始文件在庫文件的DefaultFonts.c中
extern uint8_t BigFont[];//原始文件在庫文件的DefaultFonts.c中
extern uint8_t SevenSegNumFont[];//原始文件在庫文件的DefaultFonts.c中
const uint8_t tfont16[] =
{
0x10,0x04,0x1F,0xFC,0x10,0x84,0x10,0x80,0x10,0x80,0x10,0x80,0x0F,0x00,0x00,0x00,/*"P",0*/
0x10,0x04,0x1F,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x1F,0xFC,0x10,0x04,0x00,0x00,/*"M",1*/
0x00,0x00,0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x11,0x84,0x0E,0x0C,0x00,0x00,/*"2",2*/
0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*".",3*/
0x00,0x00,0x1F,0x98,0x10,0x84,0x11,0x04,0x11,0x04,0x10,0x88,0x10,0x70,0x00,0x00,/*"5",4*/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*" ",5*/
0x08,0x20,0x06,0x20,0x40,0x7E,0x31,0x80,0x04,0x20,0x18,0x40,0x10,0x80,0x13,0xFF,
0x1C,0x02,0xF3,0x84,0x10,0x60,0x10,0x50,0x14,0x88,0x19,0x04,0x00,0x02,0x00,0x00,/*"濃",6*/
0x00,0x02,0x00,0x0C,0x3F,0xF1,0x24,0x01,0x24,0x21,0x24,0x32,0x3F,0xAA,0xA4,0xA4,
0x64,0xA4,0x24,0xA4,0x3F,0xAA,0x24,0x32,0x24,0x01,0x24,0x01,0x20,0x01,0x00,0x00,/*"度",7*/
};
#define PM2_5Serial Serial1 //用于接收PM2.5數據
//本例程使用MEGA2560,有Serial1,若使用UNO,請將這里修改為Serial
//并且把DebugSerial.begin(9600);修改為DebugSerial.begin(2400);
//串口界面通過2400波特率觀看數據
#define DebugSerial Serial //用于把數據通過串口界面返回
byte buffer[7] = {
};
int count = 0;
bool bufferComplete = false;
void setup() {
PM2_5Serial.begin(2400);
DebugSerial.begin(9600);
randomSeed(analogRead(0));
// Setup the LCD
myGLCD.InitLCD();//初始化液晶
myGLCD.InitLCD();//初始化兩次有利于系統穩定
myGLCD.InitLCD(PORTRAIT);
myGLCD.setFont(SmallFont);//設置字體為SmallFont格式
//ChineseFont Test 16*16自定義漢字測試
myGLCD.clrScr();
myGLCD.setFont(SmallFont);
myGLCD.print("ug/m3", RIGHT, 100); //打印
Show_CH_Font16(0,10,0);
Show_CH_Font16(16,10,1);
Show_CH_Font16(32,10,2);
Show_CH_Font16(48,10,3);
Show_CH_Font16(64,10,4);
//SegNum Test
myGLCD.setColor(255, 255, 255);
myGLCD.setBackColor(0, 0, 0);
}
void loop() {
int ppm;
int count_sum = 0;
long sum = 0;
while (count_sum < 10)
{
while (PM2_5Serial.available() > 0) {
char inChar = (char)PM2_5Serial.read();
buffer[count] = (byte)inChar;
// DebugSerial.print("count=");
// DebugSerial.println(count);
//
// DebugSerial.print("buffer[count]=");
// DebugSerial.println(buffer[count],HEX);
if (buffer[count] == 0xAA) {
count = 0;
// DebugSerial.println("start");
}
else if (buffer[count] == 0xFF && buffer[0] == 0xAA)
{
bufferComplete = true;
// DebugSerial.println("bufferComplete = true;");
}
count++;
if (count >= 7)
{
count = 0;
}
}
//把接收到的數據轉發出來
if (bufferComplete == true) {
bufferComplete = false;
for (int i = 0 ; i < 7 ; i++)
{
DebugSerial.print(buffer[i], HEX);
DebugSerial.print(",");
}
DebugSerial.println("");
//處理數據
float v_out = 0;
v_out = (float)((buffer[1] * 256) + buffer[2]) * 5 / 1024;
DebugSerial.print("v_out = ");
DebugSerial.println(v_out);
int ppm = v_out * 1000 * 0.5; //單位為ug/m3
DebugSerial.print("ppm = ");
DebugSerial.print(ppm);
DebugSerial.println("ug/m3");
if(ppm >= 0)
{
count_sum++;
sum += ppm;
}
}
}
sum /= 10;
DebugSerial.println("***********");
DebugSerial.print("sum = ");
DebugSerial.print(sum);
DebugSerial.println("ug/m3");
DebugSerial.println("***********");
myGLCD.setFont(SevenSegNumFont);
myGLCD.printNumI(sum, 0, 40, 4, '0');//顯示數值是i,位置x=0,y=40,長度4,空位置填充字符0
delay(500);
}
void Show_CH_Font16(int x,int y,int FontPos)
{
char temp,t,t1,k;
int y0=y;
int HZnum;
for(t=0;t<32;t++)//每個16*16的漢字點陣 有32個字節
{
temp=tfont16[t+32*FontPos];
for(t1=0;t1<8;t1++)
{
if(temp&0x80)
{
myGLCD.setColor(255, 255, 255);//FontColor
myGLCD.drawPixel(x,y);
}
else
{
myGLCD.setColor(0, 0, 0);//BackColor
myGLCD.drawPixel(x,y);
}
temp<<=1;
y++;
if((y-y0)==16)
{
y=y0;
x++;
break;
}
}
}
}
|