mbedを使う

# ７セグメントディスプレイをつかってmbedを確認
mbedはARMの開発環境。OSに依存せずブラウザだけで開発ができることが最大の特徴。

## 用いたもの
- [NUCLEO-F303RE](https://os.mbed.com/platforms/ST-Nucleo-F303RE/)
- [７セグメントディスプレイ](https://www.switch-science.com/catalog/1175/)
    - TM1637による制御
        - 制御的には、DIO、CLK、VDD、GNDの４本

## 配線
[NUCLEO-F303RE](https://os.mbed.com/platforms/ST-Nucleo-F303RE)のPC_0にCLKをPC_1にDIOを配線する（VDDとGNDとの説明は省略）。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/65d5d859-e838-d68e-df42-527142f861d6.png", width=80%>


## mbed
### 準備
[コンソール](https://console.mbed.com)上のNUCLEO-F303REを選択する。または’＋’を選択してターゲットを追加する。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/2336dbc9-fe0b-c1e0-00dd-8d625d1b07a9.png", width=50%>

選択すると、[これ](https://os.mbed.com/platforms/ST-Nucleo-F303RE/)が見える。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/5550a7f2-b3ab-c2ae-62a0-e7d46b9d77ae.png", width=40%>

Open Mbed Compilerをクリックすると、次が表示される。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/6417dd30-bef6-d341-a05b-36c280e9a537.png", width=60%>

ここでは、新規プログラムとして「7SegTest」とした（テンプレートはなんでもよい）。すると、次のような表示となる。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/8f25dd9d-6f91-e4e7-b110-b79ed5d8ca3b.png", width=90%>

### TM1637ライブラリのインポート
TM1637ライブラリをインポートする。左上の「インポート」をクリックし、TM1637を入力して検索。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/7ff5a1b7-1f8d-c861-4b7f-40b385e8c48c.png", width=90%>

ここで最初に検索されたものを選択して、右の「インポート！」をクリック。すると、
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/6d35ed35-05fb-2ff3-2893-87a673dd582c.png", width=60%>

が表示され、LibraryとしてImportする。次のようにTM1637ライブラリがこのプログラムにインポートされる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/6a0dd548-43d1-773c-28ce-63da3e42a01b.png)

### TM1637ライブラリの修正
そのままではビルドエラーが発生していた。調べるとCATALEXというものを使うように設定する必要があるらしい。TM1637_Config.hを下記のように修正する。

```c++:TM1637_Config.h
// Select one of the testboards for TM1637 LED controller
#define TM1637_TEST   0
#define CATALEX_TEST  1 
#define ROBOTDYN_TEST 0 
#define EYEWINK_TEST  0 
```

### テストプログラム
Font_7Seg.hを見ると表示できる文字がわかる。CATALEXのクラスを見て作ったプログラムは下記のとおり。

```c++:main.cpp
#include "mbed.h"
#include "TM1637.h"

TM1637_CATALEX CATALEX(PC_1, PC_0);

char digits[] = {C7_0,C7_1,C7_2,C7_3,C7_4,C7_5,C7_6,C7_8,C7_9};

TM1637::DisplayData_t hi_str = {C7_H, C7_I, 0x00, 0x00};
TM1637::DisplayData_t bye_str   = {C7_B, C7_Y, C7_E, 0x00};


int main()
{
    int i;
    TM1637::DisplayData_t disp_str;
    
    CATALEX.cls();
    CATALEX.writeData(hi_str);
    wait(2);
    for (i=0; i<10; i++) {
        memset(disp_str, digits[i], 4);
        CATALEX.writeData(disp_str);
        wait(2);
    }
    CATALEX.writeData(bye_str);
}
```

### ビルド
コンパイルをクリック。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/f77e6cdd-6062-1c2f-ef4e-ea6485244fad.png", width=60%>

ビルドが終わると、プログラムを保存するダイアログが表示される。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/9f3182f3-1206-65d9-5e86-62ff000ea040.png", width=70%>

### ボードへのプログラム転送
いたってかんたん、ドラッグ＆ドロップ。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/5fc8367b-7052-b9e2-ef7e-858da016af67.png", width=70%>

## 実際の動作の様子
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/980f9a46-6454-e3e0-290a-5290ec618a26.png", width=70%>

## 感想
時代遅れの年寄りにはびっくり。しかもこういった開発環境レスはかなり前から存在していたので。