trykmkmの備忘録

自称組み込みエンジニアのブログ

超音波・レーザ測距センササンプルプログラム(4)

 今回は、前々回作成したハード上で、STmicroが公開しているレーザ測距センサ(VL53L0X)サンプルプログラムを動作させるサンプルプログラムを作成します。

 

 前回と同様、サンプルプログラムを動かすまでの手順を下記します。

 

 ①サンプルコードをmbedの開発環境にインポートするため、まずはブラウザでmbedにログインします。

 

 ②ブラウザで下記ページに移動します。

 HelloWorld_53L0A1 - a mercurial repository | Mbed

 

 ③サンプルコードをインポートします。画面のImpor into Compilerをクリックします。(下記キャプチャ参照)

f:id:trykmkm:20170924012251p:plain

 

 ④サンプルコードインポートを許可します。Importボタンをクリックします。

  今回は、Import Nameはそのまま、HelloWorld_53L0A1とします。(下記キャプチャ参照)

f:id:trykmkm:20170924012316p:plain

 

 ⑤開発環境のマイプログラム内にHelloWorld_53L0A1が追加されます。

 

 ⑥サンプルコードのリビジョンを変更します。

  最新版だとコンパイルが通らないため、コンパイルできるリビジョンに変更します。

 マイプログラム内のHelloWorld_53L0A1を選択し、右クリックして、リビジョンをクリックします。

f:id:trykmkm:20170924024109p:plain

 

⑦9番目のリビジョンを選択して、ワーキングコピーをこのリビジョンに切り替えるをクリックします。

f:id:trykmkm:20170924024737p:plain

 

⑧ファイル名をmain.cppのコードを一部変更します。

  理由は、下記の2つのためです。

  ・既存のコードは、i2cピンがmbed LPC1768ではない

  ・プログラム起動時にセンサをリセットさせる

  main.cppをクリックします。(下図参照)

 f:id:trykmkm:20170924013802p:plain

 

⑨main.cppを下記コードに変更

//This software includes the work that is distributed in the Apache License 2.0

#include "mbed.h"
#include "x_nucleo_53l0a1.h"
#include <stdio.h>

/* This VL53L0X Expansion board test application performs a range measurement in polling mode
on the onboard embedded top sensor. */

//#define VL53L0_I2C_SDA D14
//#define VL53L0_I2C_SCL D15
#define VL53L0_I2C_SDA p28 //D14->p28変更
#define VL53L0_I2C_SCL p27 //D15->p27変更

DigitalInOut resetPin(p12);

static X_NUCLEO_53L0A1 *board=NULL;


/*=================================== Main ==================================
=============================================================================*/
int main()
{
    int status;
    uint32_t distance;

    //センサリセット処理追加
    resetPin.output();
    resetPin = 1;
    wait(0.1);
    resetPin = 0;

    DevI2C *device_i2c = new DevI2C(VL53L0_I2C_SDA, VL53L0_I2C_SCL);

    /* creates the 53L0A1 expansion board singleton obj */
    //board = X_NUCLEO_53L0A1::instance(device_i2c, A2, D8, D2);
    board = X_NUCLEO_53L0A1::instance(device_i2c); //インスタンス生成方法変更

    /* init the 53L0A1 expansion board with default values */
    status = board->init_board();
    if (status) {
        printf("Failed to init board!\n\r");
        return 0;
    }

    while (1) {
        status = board->sensor_centre->get_distance(&distance);
        if (status == VL53L0X_ERROR_NONE) {
            //printf("Distance : %ld\n", distance);
            printf("LASER(LV53L0X) : %4d [cm]\n",distance/10); //cm単位に変更
        }
    }
}

 

⑩保存ボタンクリック後、コンパイルボタンをクリックして実行ファイル(HelloWorld_53L0A1_LPC1768.bin)生成。

 

⑪mbedをPCに接続し、mbedにHelloWorld_53L0A1_LPC1768.binを保存。

 

teratermでmbed Serial portを指定し、ボーレート9600bpsに指定すれば、センサの測定データが連続で出力します。下記にキャプチャを示します。

f:id:trykmkm:20170924025120p:plain

 

 次回は、超音波測距センサとレーザ測距センサの測定データを出力するサンプルプログラムを作成します。