久しぶりのmbed。相変わらず至れり尽くせりで何を書いていいか悩むところだが、今回はLPS25H使用気圧センサーモジュールをI2Cで使用し、PCとシリアル通信でやりとりしてみた。
回路
mbedのプラットフォームからF401REのピンアサインのページを探しこんな感じで配線する。

プログラミング
LPS25Hのデータシートを見ながらI2Cのプログラムをつくろうかなぁと思いながらmbedのサイトでLPS25Hを検索してみると、はい、ありました。
LPS25Hのライブラリ。
そしてmbedでのライブラリの使い方検索し、ライブラリの作成ページにて概要を理解し、あとは先ほどのLPS25Hのライブラリのインポートボタンをおせば、8割ぐらいはできたようなもの。
そしてコーディング。今回はPC側からの指令に応答する形にしてみた。mbed側はメインループでセンシングしつつ、シリアル受信イベントで応答するプログラムにしてみた。
【ソースコード】
#include "mbed.h"
#include "LPS25H.h"
LPS25H lps25h(PB_9,PB_8);
int hPa;
float temp;
AnalogIn ain(A0);
DigitalOut myled(LED1);
Serial pc(USBTX, USBRX);
float sensor1;
//受信イベント
void isrRx(){
    char ch;
    ch = pc.getc();
    
    switch(ch){
        case 'a':
            pc.printf("%.3f\n", sensor1);
            break;
        case 'b':
            pc.printf("%d\n", hPa);
            break;
        case 'c':
            pc.printf("%.1f\n", temp);
            break;
    }    
}
int main() {
    pc.baud(38400);
    pc.attach(isrRx,Serial::RxIrq);     //割り込みハンドラ登録
    
    while(1) {
        
        sensor1 = ain.read();               //A0のデータ読み込み
        hPa = lps25h.pressure() / 4096;     //気圧センサ読み込み
        temp = 42.5 + lps25h.temperature() / 480;     //気温読み込み
        
        myled = !myled;
        wait(0.1);
    }
}
動作確認
使い慣れたArduino IDEで動作確認。bを送信すると気圧、cを送信すると気温が返ってくることを確認できた。今後もいろいろありがたく使わせてもらおうmbed。





