Raspberry Pi 備忘録 / Mbedもあるよ!

Raspberry Pi であれこれやった事の記録

Mbed LPC1114FN28 を試す その2

f:id:pongsuke:20161208110624j:plain

f:id:pongsuke:20161208110628j:plain

前回、動作確認まで取れたので、早速違うことをやってみましょう。

Raspberry pi の様に、センサーにつないで、値を読み込んでみよう。

、、、と思ったのですが、読み込んだ値を確認するすべがない!

なので、まずはモニターを付けます。

I2C LCDモニター ACM1602NI

以前買った I2C LCDモニター ACM1602NI を使いたいと思います。

LPC1114FN28 には、I2Cも有るし、問題ないでしょう。
けど、一体どう配線して、どういうコードを書けば良いのやら?

配線

I2C SCL と SCL
I2C SDA と SDA

を繋いでみました。

最終的に動いたので、正しそうです。

ライブラリを探す

そこで、Mbedの強みの1つと言われている、他の人が作って公開してくれているライブラリを探してみましょう。

mbed 公式サイトに行って、 "ACM1602NI" で検索します。

検索結果のURL

Search | Mbed

"Takuo WATANABE" さんのライブラリを発見しました。

ACM1602NI | Mbed

早速使います。

"Import into Compiler" をクリックして、インポートするプロジェクトを選択する。
それだけです。

早速利用します。

要点だけに成りますが、

#include "ACM1602NI.h"

ACM1602NI lcd(dp5, dp27);

    lcd.cls();
    lcd.printf("ACM1602NI\n");
    lcd.printf("\n");

など書きます。

温度センサー MCP9700

引き続き、手元にある MCP9700 を使います。

まず、アナログインプットを読み込ませたいので、DP13 に接続しました。

続いて、ライブラリを探します。

MCP9700 Linear Temperature Sensor | Mbed

発見しましたので、import して、使います。

コード

手元に合ったタクトスイッチを入れて、とりあえず動いているコード。

#include "mbed.h"
#include "ACM1602NI.h"
#include "LinearTempSensor.h"

DigitalOut led2(LED2);
DigitalIn mysw(dp17);
LinearTempSensor sensor(dp13);  

// I2C pins: p9 = sda, p10 = scl
ACM1602NI lcd(dp5, dp27); 


int main() {
    float Vout, Tav, To;
    
    led2    = 0;
    mysw.mode(PullDown);

    lcd.printf("ACM1602NI\n");
    lcd.printf("\n");
    wait(2);

    while(1) {
        led2    = 1;
        wait(0.2);
        led2    = 0;
        wait(0.2);
        
        if(mysw.read()==1){
            lcd.cls();
            lcd.printf("TEMP:");
            Vout = sensor.Sense();          // Sample data (read sensor)
            Tav  = sensor.GetAverageTemp(); // Calculate average temperature from N samples
            To   = sensor.GetLatestTemp();  // Calculate temperature from the latest sample
            lcd.locate(5, 0);
            lcd.printf("%4.1f\n", Tav);
            // lcd.printf("Vout:%f  Tav:%f  To:%f\n", Vout, Tav, To);    // Debug print
        }else{
            lcd.cls();
            lcd.printf("Please Push.\n");
        }
        wait(0.2);
    }
}

なお、本来は、こういうコードも、mbedオフィシャルサイトに投稿するのが正しいのでしょうが、
「Mbedってなに?」というレベルだと、そこに到達しませんので、本当のMbed初心者のために、書き残します。

Raspberry pi と比較すると、アナログの値をそのまま読み取れるのは楽です。
ADコンバーターないぶん、配線が少ない。

Thread について

調査中ですが、
Mbed で Thread を使用するには、OS を使うらしい。

Mbed OS を使う方法と、RTOSをインポートする方法が有るらしい。

ですが、
LPC1114FN28 は、

Note: LPC1114FN28 platform doesn't support RTOS due to its flash size. Please do not import mbed-rtos library into your project.

とあり、使えません!

補足

7 VDDA アナログ電源(+3.3V)
8 VSSA アナログ基準電位(GND)

の使い方を知らずに、一旦写真も乗せましたが、どうも、この端子を電源に接続しないとAD変換結果が正常に出ません。 らしいので、修正してます。

こちらで知りました。

LPC1114FN28の7,8Pinの名称について - Question | Mbed