整合OLED顯示和PMS5003報數
#include <Arduino.h> #include <pms.h> ////////////////////////////////// #include <SPI.h> #include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> //////////////////////////////////////// #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); ////////////////////////////////// #if defined PMS_DYNAMIC Pms5003 *_pms; #define pms (*_pms) #else Pms5003 pms; #endif #define LOGO16_GLCD_HEIGHT 16 //定義顯示高度 #define LOGO16_GLCD_WIDTH 16 //定義顯示寬度 #if (SSD1306_LCDHEIGHT != 64) #error("Height incorrect, please fix Adafruit_SSD1306.h!"); #endif //////////////////////////////////////// auto lastRead = millis(); void setup( void ) { Serial.begin( 115200 ); while ( !Serial ) { }; display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64) display.clearDisplay(); #if defined PMS_DYNAMIC _pms = new Pms5003(); #else pms.begin(); #endif } //////////////////////////////////////// void loop( void ) { /////////////////////////////// const int n = Pms5003::Reserved; Pms5003::pmsData data[ n ]; Pms5003::PmsStatus status = pms.read( data, n ); switch ( status ) { case Pms5003::OK: { display.clearDisplay(); display.setCursor(0,0); //設置字體的起始位置 display.setTextColor(WHITE); //設置字體白色 //英文字符顯示 display.setTextSize(1); //設置字體大小 auto newRead = millis(); lastRead = newRead; for ( size_t i = Pms5003::PM1dot0; i < n; ++i ) { display.print("<"); if(i == n-3) { display.print( float(data[ i ]/1000) ); } if(i == n-2 || i == n-1) { display.print( float(data[ i ]/10)); } else { display.print(data[ i ]);//輸出字符並換行 } display.print("> "); } break; } case Pms5003::noData: break; }; delay(500); display.display(); //把緩存的都顯示 }
由於nano板內存太小,名字和單位都不能放,只是顯示了數據