strong161 发表于 2017-9-22 16:50

MAX32630FTHR OLED显示测试

MAX32630FTHR 倒是方便,使用MBED开发确实省事很多。
不过MAX32630 由于mbed没有IAR支持,只有MDK支持,加之makefile对于我等菜鸟来说,完全就是搞不明白,
前前后后其实花了不少时间,但是吧都不是在写代码,都是在整支持,最早的时候搞MBED CLI开发环境,后面吧,CLI确实老是编译不成功,各种问题,玩不来,主要是太菜了,后面就在整eclipse想搭个本地调试环境,但是吧,也没有搞出啥子东西出来。
等于是前前后后花了不少时间确毫无进展,然后mbed基于C++,说多了都是泪……又去学习一下C++,本来想着写几个库方便用的,结果吧……玩不来。
时间不多了就实打实的写代码吧……
初步功能差不多就这些,另外还有LEDbar还没有搞,周未再搞吧!
先把初步的代码搞出来。现在结果读取都没有什么问题。使用OLED显示,
主要准备是三个传感器,1个PM2.5,1个CO传感器,1个酒精传感器,
主要选择这三个传感器的原因,有新闻报道CO中毒事件,酒精传感器嘛其实也可以用易燃气体传感器,目的明确,
PM2.5就不多说了,车上的空气有多脏大家都懂的……。
原来打算用一个大的OLED倒映到挡风玻璃上面,形成抬头显示,但是OLED确实太贵了,最后买了一堆小的,就那么个意思吧。
LEDbar也是用来当抬头显示用的。这次没有加,周未再加。
#include "mbed.h"
#include "max32630fthr.h"
#include "Adafruit_SSD1306.h"
#include "USBSerial.h"

MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);

I2C oledI2C(P3_4, P3_5); // SDA, SCL

// Hardware serial port over DAPLink
Serial daplink(P2_1, P2_0);

// serial port for pm1003
Serial pmSerial(P3_1, P3_0);
//for 595 drive LED bar
DigitalOut ledbarClk(P5_3);
DigitalOut ledbardat(P5_4);
DigitalOut ledbarlatch(P5_5);

/* Analog inputs 0 and 1 have internal dividers to allow measuring 5V signals
* The dividers are selected by using inputs AIN_5 and AIN_5 respectively.
* The full scale range for AIN0-3 is 1.2V
* The full scale range for AIN4-5 is 6.0V
*/
AnalogIn fireAir(AIN_4);
AnalogIn alcohol(AIN_5);

// main() runs in its own thread in the OS
// (note the calls to Thread::wait below for delays)
int main()
{
    char incomeByte;
    unsigned int pm25;
    unsigned int pm1;
    unsigned int pm10;

    daplink.printf("start \r\n");
    pmSerial.baud(9600);

    Thread::wait(50);// Give the supplies time to settle before initializing the display
    Adafruit_SSD1306_I2c OLED(oledI2C);
    OLED.printf("%ux%u OLED Display\r\n", OLED.width(), OLED.height());
    OLED.printf("HelloWorld \r");
    OLED.display();

    daplink.printf("OLED init over \r\n");
    while(1) {
      Thread::wait(250);
      
      while(pmSerial.getc() !=0x42){}
            if(pmSerial.getc() == 0x4d){
                for(int i = 2; i < 32; i++){
                  incomeByte = pmSerial.getc();
                }
               
                unsigned int calcsum = 0;
                incomeByte = 0x42;
                incomeByte = 0x4d;
                unsigned int exptsum = (incomeByte<<8) + incomeByte;
                for(int i = 0; i < 30; i++){
                  calcsum += incomeByte;
                  daplink.printf("income[%d],%d\n",i,incomeByte);
                }
                if( calcsum == exptsum)
                {
                   daplink.printf("check ok \n");
                   pm1 = incomeByte + incomeByte;
                   pm25 = incomeByte + incomeByte;
                   pm10 = incomeByte + incomeByte;

                   daplink.printf("pm1:%d\n",pm1);
                   daplink.printf("pm2.5:%d\n",pm25);
                   daplink.printf("pm10:%d\n",pm10);
                }
      
      }      
      Thread::wait(10);
      OLED.clearDisplay();
      OLED.setTextCursor(0,0);
      OLED.printf("MAX32630FTHR OLED\n");
      OLED.printf("fireAir: %1.2f\n", (6.0f * fireAir) );// fireAir inputs 4
      OLED.printf("alcohol: %1.2f\n", (1.2f * alcohol) );// alcohol inputs 5
      OLED.printf("PM2.5: %d \n", pm25 );// alcohol inputs 5
      OLED.display();
    }
}

代码很简单,内容也不多。
串口接收到的结果没有毛病,

OLED显示也没有问题。等后去加好LEDbar再上传工程完工吧!



常见泽1 发表于 2017-9-22 16:55

MBED没玩过 好像现在用到的地方还蛮多的

strong161 发表于 2017-9-22 17:06

常见泽1 发表于 2017-9-22 16:55
MBED没玩过 好像现在用到的地方还蛮多的

:surrender:,那玩意就是C++打了包……玩不来

lcofjp 发表于 2017-9-22 18:31

壮哥威武!{:1_103:}

ljj3166 发表于 2017-9-22 21:36

每次看到Cpp都有股蛋蛋滴忧桑

strong161 发表于 2018-3-20 14:38

测试一下 # include"test.h"


页: [1]
查看完整版本: MAX32630FTHR OLED显示测试