trykmkmの備忘録

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

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

 今回はいよいよ、超音波測距センサ(SRF02)とレーザ測距センサ(VL530X)の同時測定サンプルを製造していきたいと思います。

 

 前回動かしたサンプルをベースに、超音波センサのロジックを組み込みます。

  手順を下記に示します。

 

 ①ベースになるプロジェクトをコピー(前回使用したHelloWorld_53L0A1を右クリックし、名前を付けて保存)

f:id:trykmkm:20170927210522p:plain

 

 ②任意の名称を入力し、OKボタンクリック。(ここでは、UltraSonicAndLaserとする。)

f:id:trykmkm:20170927210604p:plain

  

 

 ③前々回使用した、超音波センサ用関数のコードSRF02.cとSRF02.hをUltraSonicAndLaserにコピー。

(SRF02.cとSRF02.hを右クリックでコピーを選択し、フォルダUltraSonicAndLaser上でctrl+v)

f:id:trykmkm:20170927213435p:plain

 

 ④UltraSonicAndLaserの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>

#include "SRF02.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);

SRF02 sensor(p28,p27,0xE0); //SRF02インスタンス(SDAピン, SCLピン, i2cデバイスアドレス指定)

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単位に変更

            //超音波センサ距離取得
            int distance = sensor.readcm();
            //USBシリアルポートに距離出力
            printf("ULTRASONIC(SRF02) : %4d [cm]\n",distance);
            //0.5秒待機
            wait(0.5);
        }
    }
}

 

⑤UltraSonicAndLaserをコンパイル

 ここで、コンパイルボタンをクリックすれば、実行ファイルが生成されるのですが・・・。

 下記のようなエラーが発生しました。

f:id:trykmkm:20170927221650p:plain

 エラー168とは、かぎ括弧の閉じ側が無いとか、関数宣言のところにセミコロンが無い場合に発生するものらしいです。

  

 いろいろ調査してみましたが、上記のエラーを解決することができませんでした。

 どうやら、STmicroのLV53L0Xライブラリを使用すると、他のi2cデバイスは使用できなくなるみたいです。

 よって、次回は別の方法を模索してみようと思います。