整合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板内存太小,名字和单位都不能放,只是显示了数据
时间: 2024-10-27 00:57:20