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板內存太小,名字和單位都不能放,只是顯示了數據

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM