久しぶりの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。





