zoukankan      html  css  js  c++  java
  • 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板内存太小,名字和单位都不能放,只是显示了数据

  • 相关阅读:
    AVAYA语音通知管理
    如何打出强烈低杆
    iSCSI存储技术全攻略
    域控制器的管理注意事项
    Ogre的ExampleApplication阅读
    CEImagesetEditor编译过程
    Ogre基础教程遇到的问题
    SQLServer中进行sql除法运算结果为小数时显示0的解决方案
    【全面解禁!真正的Expression Blend实战开发技巧】第五章 从最常用ButtonStyle开始 ImageButton
    silverlight,WPF动画终极攻略之白云飘,坐车去旅游篇(Blend 4开发)
  • 原文地址:https://www.cnblogs.com/nightnine/p/6661428.html
Copyright © 2011-2022 走看看