「電気は見えないからキライ」なんて言われることが時々あります。
私は見えないから「なんでだろう」ってなって逆に興味がわくんですけどね。
でも、実際は見えてた方がわかりやすいのは確かです。
見えない電気ですが、テスターやオシロスコープを使えば値や電圧、電流の波形等を見ることはできます。
マイコンのプログラミングでも内部の状態がどうなってるか確認しながらプログラミングできた方が当然効率は上がります。
プログラミングの開発環境には、このための方法として「シリアル出力モニタ」という機能があります。
「ATOM LITE」の開発環境として紹介した「PlatformIO」にも「シリアル出力」された内容を表示できる機能(ターミナル)があり、プログラミング作成時には頻繁に使用することになるため、ここで紹介しておきます。
「ATOM LITE」については以下のリンクで詳しく紹介しています。
パソコンがなくてもシリアル出力データが確認できる便利な自作シリアルモニタの作り方も以下のリンクで詳しく紹介しています。
1.シリアル出力するための初期設定
シリアル出力を使用するには、まず初期設定にシリアル通信を行うための設定を記入します。
以下に初期設定の部分だけを記載します。
// 初期設定 -----------------------------------------------
void setup() {
// 本体初期化(UART有効, I2C無効, LED有効)
M5.begin(true, false, true);
Serial.begin(9600); //標準のシリアル通信を準備
}
シリアル通信を行うための初期設定は 6行目の一文だけです。「本体初期化」の後に記入してください。
標準の設定では本体のUSBを使った通信になるため、パソコンとの通信は既につながっているUSBケーブルで行います。
Serial.begin ( 通信速度 );
Serial.begin:シリアル通信の初期設定を行うコマンドです。
通信速度:シリアル通信を行う速度(タイミング)の設定です。
この速度を通信相手と合わせることでデータのやり取りができるようになります。
2.シリアル出力するためのプログラム
シリアル出力を行うためのプログラムは以下のようになります。
これらのプログラムが実行された時点で「( )」内に記入した情報がシリアル出力されます。
Serial.print ( ” 文字 “ ); //改行なし
Serial.println ( 変数、関数等); //改行あり
連続で記入すると横並び1行で表示されていきます。
Serial.println:シリアル出力を実行するコマンド(改行あり)。
連続で記入すると1行づつ改行して表示されていきます。
” 文字 “:文字は「” “」(ダブルクォーテーション)で挟んで記入。
変数、関数等:変数はそのまま変数を記入とその値が表示されます。
関数はその関数の実行結果が出力されます。(例:入出力の状態を確認する場合 digitalRead(端子番号)を記入)
3.「Lチカ」プログラムで動作確認してみよう
「C言語 演算子(条件式)について」で使用した「Lチカ」プログラムを使用して、マイコンボード「ATOM LITE」で実際にシリアル出力で値を確認してみましょう。
本体のボタンを押した回数を変数「i」でカウントしており、ボタンを押すたびに変数「i」は「1,2,3・・・」と増えていきます。
シリアル出力ではボタンを押すたびに変数「i」のカウント数が表示されます。
「VS Code」を開いてください。シリアル出力の表示を確認するには下画像のように、画面左下の「コンセントプラグのマーク」をクリックします。
これで画面下の「ターミナル」ウインドウで表示を確認できるようになります。
※コピーは下コード(黒枠)内の右上角にある小さなアイコンのクリックでもできます。
#include <M5Atom.h> //Atomのヘッダファイルを準備
// FastLEDライブラリの設定(CRGB構造体)
CRGB dispColor(uint8_t r, uint8_t g, uint8_t b) {
return (CRGB)((r << 8) | (g << 16) | b);
}
// 変数宣言
int i = 0; //ifの条件確認用
// 初期設定 -----------------------------------------------
void setup() {
// 本体初期化(UART有効, I2C無効, LED有効)
M5.begin(true, false, true);
Serial.begin(9600); //標準のシリアル通信を準備
// LED全消灯(赤, 緑, 青)
M5.dis.drawpix(0, dispColor(0, 0, 0));
}
// メイン -------------------------------------------------
void loop() {
M5.update(); //本体のボタン状態更新
if (M5.Btn.wasPressed()) { //ボタンが押された時
i++; //iを+1する
//シリアル出力
Serial.print("i = "); //文字出力(改行なし)
Serial.println(i); //値出力(改行あり)
}
if ((1 <= i) && (i <= 3)) { //ボタンを押した回数が1~3回なら
M5.dis.drawpix(0, dispColor(0, 0, 255)); //LED(青)
} else { //1~3回でなければ
M5.dis.drawpix(0, dispColor(20, 20, 20)); //LED(白)
}
delay(100); //100ms待機
}
「ATOM LITE」の本体ボタンを押すたびに、下画像のように「i」のカウント値が表示されると思います。
以上のようにシリアル出力を使うことでマイコン内部の状態を確認することができます。
プログラムの動作確認やうまく動作しない時のエラー探し(デバック作業)等、今後頻繁に使用しますので覚えておきましょう。
「C言語」については以下のリンクで詳しく紹介しています。
コメント