第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などをつなぐ場合は開発環境にまとめてある)。
// 第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を条件分岐する