首页 > 代码库 > PMS5003ST+Arduino Nano OLED屏显示

PMS5003ST+Arduino Nano OLED屏显示

整合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板内存太小,名字和单位都不能放,只是显示了数据

技术分享

 

PMS5003ST+Arduino Nano OLED屏显示