2026年8月25日火曜日

Arduino手習い

 YouTubeで日本の電子部品店の歴史という動画が出ていた。見てみるとお馴染み秋月や共立と並んでSwitch Scienceが紹介されていた。私はSwitch Scienceは外資系の会社だと思っていたが全く違うようだ。細かい話は動画を見ていただくこととして、Switch ScienceがArduino導入の先駆者らしく、PICの次はArduinoかと考えて、これを試したくなってきた。Arduinoは秋月でも売っているがこれまで気にも留めていなかった。

 Arduinoについて資料を漁り開発環境(Arduino IDE)をインストールした。たまたま秋月で興味本位で買ってデッドストックになっていた ESP32-DevKitC-32E はそのままIDEで扱えるようなので、お決まりのLEDチカチカに挑戦した。

IDEに付属のスケッチ例の中の 01.Basic にあった blink を試してみた。スケッチとは Arduino IDEにおけるプロジェクトに相当すると考えればよいようだ。スケッチはC/C++で記述し、最上位にmain() ではなく setup() と loop() という関数を記述する。setup() は初期化部分を記述し、loop() は実行部分を記述する。

実際にIDEで例にあるプログラム(blink)をコンパイルすると、PICのコンパイラと比べやたら遅い。それにお決まりのコンパイルエラーだ。 エラーは次の記述で発生した。

   pinMode(LED_BUILTIN, OUTPUT);

 この LED_BUILTIN が不明だと。確かにプログラム中の何処にも LED_BUILTIN は規定されていないし、#include 文も無い。ここで全くの初心者なら途方に暮れ、投げ出す所だろう。ネットで pinMode を検索すると第一引数はピン番号を表す整数のようだ。ここに直接数字を書いても良いが #define 文で LED_BUILTIN を定義するのがCのやり方だ。そして出来上がったのが次のプログラムだ。

#define LED_BUILTIN   5

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

static void loop_sub(unsigned int len1, unsigned int len2) {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(len1);
  digitalWrite(LED_BUILTIN, LOW);
  delay(len2);
}

void loop() {
  loop_sub(200, 200);
  loop_sub(200, 200);
  loop_sub(200, 200);
  loop_sub(600, 200);
  delay(500);   
}
 

単なる LEDチカチカでは面白くないのでモールスでテスト信号を表すVVV・・・と光るようにしている。

しかし、Cでプログラムを書くためには文法は勿論として、ライブラリーや関数に関する知識が不可欠だ。そこら辺の情報は何処にあってどう入手できるのだろうか。まだ先は長そうだ。

 

0 件のコメント:

コメントを投稿