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