第0回

プログラミングとマイコン

プログラミングを始める前に、最低限必要な全体像を理解する。

この回の目的

コードを書き始める前に、「そもそもコンピュータは何をしているのか」「書いたC++がどうやってマイコン上で動くのか」という全体像を押さえる。ここが曖昧なままだと、以降のすべてが暗記になってしまう。

プログラムとは

  • コンピュータは何をしているのか
  • 命令とは何か
  • プログラムとは何か
  • ソースコードとは何か

コンピュータは、あらかじめ与えられた命令を順に実行しているだけの機械である。その命令の並びを人間が読める形で書いたものがソースコードであり、ソースコードの集まりがプログラムである。

コンパイル

C++ソースコード
      ↓
   コンパイラ
      ↓
機械語を含む実行可能な形式
      ↓
      CPU

ここで理解してほしいのは、「C++を書けばそのままCPUが実行するわけではない」 ということである。人間が書いたC++は、コンパイラによって機械語へ変換されて初めてCPUが実行できる形になる。

マイコンとは

マイコンは、CPU・メモリ・周辺機能が1つのチップに収まったものである。講座では概要を押さえておけばよい。

分類名称役割
演算CPU命令を実行する
メモリRAM実行中のデータを置く(電源を切ると消える)
メモリFlash / ROMプログラムを保存する(電源を切っても残る)
入出力GPIOデジタルの入力・出力
入出力ADCアナログ電圧を数値として読む
入出力PWM擬似的なアナログ出力(LEDの明るさ・モータ速度)
通信UARTシリアル通信
通信I2C少ない線で複数のデバイスと通信
通信SPI高速な同期通信

Arduino系プログラムの形

void setup() {
}

void loop() {
}
  • setup():電源投入・リセット後に1回だけ実行される。初期設定を書く。
  • loop():setup()のあと、電源が切れるまで繰り返し呼ばれる。通常の処理を書く。

PC上のプログラムが持つmain()に相当するものが、Arduino系ではsetup()とloop()に分かれていると考えるとよい。

動かして確かめる

演習に入る前に、まずこのサンプルを動かして結果を見る。追加の部品は要らない。光るのはボードに載っている内蔵LEDで、それ以外はシリアルモニタの出力で確かめられる。code/examples/00-blink/を開き、pio run -t uploadで書き込んでからpio device monitorで出力を見る(手順と、外付けのLEDなどをつなぐ場合は開発環境にまとめてある)。

code/examples/00-blink/src/main.cpp
// 第0回:LEDを点滅させる
// 最小構成。setup() と loop() の役割を確認する。

#include <Arduino.h>

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

void loop() {
    digitalWrite(LED_BUILTIN, HIGH);
    delay(500);

    digitalWrite(LED_BUILTIN, LOW);
    delay(500);
}

ボード上のRGB LEDが0.5秒ごとに白く点滅する。シリアルモニタには何も出ない。

確かめること。

  • setup()は電源が入ったあとに1回だけ、loop()は電源が切れるまで繰り返し呼ばれる
  • delay(500)の数値を変えると点滅の速さが変わる
  • LED_BUILTINはボード上のLEDを指す名前。このボードの内蔵LEDはアドレサブルRGB LEDで、digitalWriteすると白く点く(開発環境に書いてある)

演習:LEDを点滅させる

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

void loop() {
    digitalWrite(LED_BUILTIN, HIGH);
    delay(500);

    digitalWrite(LED_BUILTIN, LOW);
    delay(500);
}

書き込んでLEDが点滅することを確認する。

発展

  • 点滅速度を変える
  • ボタンを追加する
  • LEDのON/OFFを条件分岐する