組込みプログラミングⅠ, Ⅱ - esatoesato.net/ex/robo/arduino/text2020_1.pdf図2 arduino...

17
1 2020 年度版 ロボティクスコース実験Ⅰ 組込みプログラミングⅠ, Ⅱ 1.スケジュール # 内容 1 Arduino の基本構成とプログラミング その1 2 Arduino の基本構成とプログラミング その2 3 実験1 予備実験の実施 実験1 本実験の計画書の作成とチェック 4 実験1 本実験の実施とレポート作成 (➡提出期限:翌週の授業開始時) 5 実験2 予備実験の実施 実験2 本実験の計画書の作成とチェック 6 実験2 本実験の実施とレポート作成 (➡提出期限:翌週の 17:00 まで) 2.目的 (1)マイコンボード Arduino の基本構成と各部の働きを理解する (2)制御プログラムを作成するツール Arduino IDE(統合開発環境)の使い方を修得する (3)C 言語の基本やデジタル入出力を扱うための関数を理解し、使い方を修得する (4)コンピュータが割込みを処理する仕組みを理解し、割込みの使い方を修得する 3.マイコンボード Arduino 3.1 概要 Arduino は、イタリアの Massimo Banzi 氏らが初心者でも比較的簡単に使えるように考慮して開発した マイコンボード及びプログラム開発環境である。マイコンボードにはプロセッサや入出力用のポートが 実装されており、LED やモーターなどの電子部品を接続して動作させることができる。また、オープンソ ースハードウェアの形態をとっているため、公開された設計情報をもとに互換性のあるマイコンボード を作製することも可能である。Arduino には、いくつかのエディションが販売されており、代表的なもの として表 1 が挙げられる。本実験ではこのうち、メモリやデジタル I/O が拡張された Arduino Mega2560 を使用する。Arduino Mega2560 には、Atmel の 8 ビットマイクロコントローラ AVR が利用されている。 図1にそのハードウェア構成を示す。

Upload: others

Post on 20-Jan-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 組込みプログラミングⅠ, Ⅱ - ESatoesato.net/ex/robo/arduino/text2020_1.pdf図2 Arduino Mega2560 R3におけるソケットの信号割当 4 4.実験 4.1 実験の進め方

1

2020 年度版

ロボティクスコース実験Ⅰ

組込みプログラミングⅠ, Ⅱ

1.スケジュール

# 内容

1 Arduino の基本構成とプログラミング その1

2 Arduino の基本構成とプログラミング その2

3 実験1 予備実験の実施

実験1 本実験の計画書の作成とチェック

4 実験1 本実験の実施とレポート作成 (➡提出期限:翌週の授業開始時)

5 実験2 予備実験の実施

実験2 本実験の計画書の作成とチェック

6 実験2 本実験の実施とレポート作成 (➡提出期限:翌週の 17:00 まで)

2.目的

(1)マイコンボード Arduino の基本構成と各部の働きを理解する

(2)制御プログラムを作成するツール Arduino IDE(統合開発環境)の使い方を修得する

(3)C言語の基本やデジタル入出力を扱うための関数を理解し、使い方を修得する

(4)コンピュータが割込みを処理する仕組みを理解し、割込みの使い方を修得する

3.マイコンボード Arduino

3.1 概要

Arduino は、イタリアの Massimo Banzi 氏らが初心者でも比較的簡単に使えるように考慮して開発した

マイコンボード及びプログラム開発環境である。マイコンボードにはプロセッサや入出力用のポートが

実装されており、LED やモーターなどの電子部品を接続して動作させることができる。また、オープンソ

ースハードウェアの形態をとっているため、公開された設計情報をもとに互換性のあるマイコンボード

を作製することも可能である。Arduino には、いくつかのエディションが販売されており、代表的なもの

として表 1 が挙げられる。本実験ではこのうち、メモリやデジタル I/O が拡張された Arduino Mega2560

を使用する。Arduino Mega2560 には、Atmel の 8 ビットマイクロコントローラ AVR が利用されている。

図1にそのハードウェア構成を示す。

Page 2: 組込みプログラミングⅠ, Ⅱ - ESatoesato.net/ex/robo/arduino/text2020_1.pdf図2 Arduino Mega2560 R3におけるソケットの信号割当 4 4.実験 4.1 実験の進め方

2

表 1 主な Arduino エディションのスペック

Arduino Uno R3 Arduino Nano Arduino Mega2560 R3

プロセッサ

(動作周波数)

ATmega328 16MHz

(16MHz)

ATmega168/328

(16MHz)

ATmega2560

(16MHz)

SRAM 2KB 1KB/2KB 8KB

フラッシュメモリ 32KB 16KB/32KB 256KB

デジタル I/O ピン数 14 14 54

PWM 出力ピン数 6 6 15

アナログ入力ピン数 6 8 16

アナログ出力ピン数 - - -

動作電圧 5V 5V 5V

その他 IF USRT, I2C, SPI USRT, I2C, SPI USRT, I2C, SPI

サイズ 74.9×53.3mm 43.2×17.8mm 102×54mm

図1 プロセッサ ATmega2560 のブロック・ダイアグラム

※主にポート Aから Gをデジタル I/O、ポート Hと Jをアナログ入力、ポート Hと Lを PWM 出力に利用

(出典:Atmel 8 ビットマイクロコントローラ データシート)

Page 3: 組込みプログラミングⅠ, Ⅱ - ESatoesato.net/ex/robo/arduino/text2020_1.pdf図2 Arduino Mega2560 R3におけるソケットの信号割当 4 4.実験 4.1 実験の進め方

3

3.2 マイコンボードのコネクタ

Arduino Mega2560の各ソケットに割り当てられた信号を図2に示す。D0からD53はデジタルI/O、ADC[0]

から ADC[15]はアナログ入力用として用いられる。さらに、外部割込み信号の入力や USRT、I2C 及び SPI

などの周辺インターフェースを実現する信号線も設けられている。

図2 Arduino Mega2560 R3 におけるソケットの信号割当

Page 4: 組込みプログラミングⅠ, Ⅱ - ESatoesato.net/ex/robo/arduino/text2020_1.pdf図2 Arduino Mega2560 R3におけるソケットの信号割当 4 4.実験 4.1 実験の進め方

4

4.実験

4.1 実験の進め方

第2週までに行う課題「プログラミング演習」と予備実験についてはレポートを作成し、提出する必

要がない。しかし、本実験の計画や結果、考察の記載に必要があれば、その内容を取り入れること。

レポートの提出を課す本実験については、予め計画書に(S1)から(S4)までの内容を記載すること。

レポートを課す本実験の進め方

(S1) 準備(実現方法の基本的な考え方をまとめる)

(S2) アルゴリズムとフローチャートの作成 計画書として事前に内容を記載

(S3) プログラムの作成(コーディング及びデバグ)

(S4) 回路図の作成

(S5) 配線

(S6) プログラムをマイコンボードに書き込み、動作を検証

4.2 使用部品とブレッドボードの使い方

(1)使用部品

表2 部品表

使用部品 個数 外形 備考 番号

Arduino Mega2560 R3 1

LED 赤/緑/黄 3 足の長い方がアノード(陽極)

1kΩ抵抗 3

DIP スイッチ 1

KSD82

LED モジュール 1

文字側がアノード(陽極) OSX10201-R

押しボタンスイッチ

(タクトスイッチ)

1

押した時に導通する端子をテスターで確

認すること

集合抵抗 1kΩ 1

印字面を手前に向けて左側が共通端子 RKC8BD102J

ブレッドボード 1 BB-102

ワイヤー 必要数

圧電スピーカー 1

PKM13EPYH4000-A0

Page 5: 組込みプログラミングⅠ, Ⅱ - ESatoesato.net/ex/robo/arduino/text2020_1.pdf図2 Arduino Mega2560 R3におけるソケットの信号割当 4 4.実験 4.1 実験の進め方

5

(圧電スピーカー)

(2)ブレッドボードの使い方

図3 ブレッドボード

4.3 プログラミング演習(2週目までに実施する課題)

4.3.1 実習回路の作成

図4のとおり実習の回路を作成する。回路作成手順の詳細は、実験サポート用 Web サイト

(htts://esato.net/ex/robo/)の説明を参考にすること。

図4 Arduino 基礎編で使用する回路

ブレッドボードの左端の 2列と右端の 2列は,図3中の縦線で示す

ように各列の穴同士が接続されている。これらの列は赤を電源(+5

V)、青をGND(0V)に使用する。

横に並んでいる5個の穴同士(横線で示す)は互いに接続されてい

る。右側の横に並んだ5個の穴も同様である。

DIP スイッチや LED モジュール、押しボタンスイッチは中央をまたぐ

ように片側を図のeの列、反対側をfの列に挿入する。残りの部品は

配線がし易いようによく考えて適宜配置すること。

Page 6: 組込みプログラミングⅠ, Ⅱ - ESatoesato.net/ex/robo/arduino/text2020_1.pdf図2 Arduino Mega2560 R3におけるソケットの信号割当 4 4.実験 4.1 実験の進め方

6

4.3.2 プログラミング実習

(1)次のプログラムを実行して LED の点灯動作を確認せよ。

リスト1

void setup() {

pinMode(31,OUTPUT);

digitalWrite(31,HIGH);

} ★ポイント★

pinMode( )と digitalWrite( )

void loop() { 関数の使い方、機能を知る

}

(2)リスト1に変更を加え、3つの LED を点灯させよ。

(3)次のプログラムを実行して LED の点滅動作を確認せよ。

リスト2

void setup() {

pinMode(31,OUTPUT);

}

void loop() {

digitalWrite(31,HIGH);

delay(1000); ★ポイント★

digitalWrite(31,LOW); setup()と loop()の違いを理解する

delay(1000); delay( )の使い方、機能を知る

}

(4)青->黄->赤の順に 10 秒間隔で LED を(信号機のように)点滅させる動作を実現せよ。

(5)次のプログラムを実行し、押しボタンスイッチを押した時の動作を確認せよ。

リスト3

void setup() {

pinMode(31,OUTPUT);

pinMode(47,INPUT_PULLUP);

}

Page 7: 組込みプログラミングⅠ, Ⅱ - ESatoesato.net/ex/robo/arduino/text2020_1.pdf図2 Arduino Mega2560 R3におけるソケットの信号割当 4 4.実験 4.1 実験の進め方

7

(リスト3のつづき)

void loop() { ★ポイント★

if (digitalRead(47)==HIGH) { 信号入力を扱う関数の使い方を知る

digitalWrite(31,HIGH); 条件分岐命令 if else の使い方を知る

} DIP スイッチからの信号が負論理

else{

digitalWrite(31,LOW);

}

}

(6)下記のとおり DIP スイッチを押し続ける時間により点灯する LED が変化する動作を実現せよ。

a.DIP スイッチを押していない場合:LED はいずれも点灯しない

b.DIP スイッチを 1秒未満押した場合:赤の LED が 1秒点灯して消える

c.DIP スイッチを 1秒以上押した場合:緑の LED が 1秒点灯して消える

(7)次のプログラムを実行してブザー(圧電スピーカー)が鳴ることを確認した後、オシロスコープ

を使用して出力波形を観察せよ。(波形の形状? 周波数?)

リスト4

void setup() {

pinMode(31,OUTPUT); ★ポイント★

tone(51,1000,1000); tone( )の使い方、機能を理解する

}

void loop() {

}

(8)圧電スピーカーを使用して以下の楽譜の第 2小節までを演奏せよ。設定する周波数については「音

階周波数」をキーワードに Web サイトで調べること。また、オシロスコープを使用して、各音の周

波数を確認せよ。

図5 謎の楽譜

Page 8: 組込みプログラミングⅠ, Ⅱ - ESatoesato.net/ex/robo/arduino/text2020_1.pdf図2 Arduino Mega2560 R3におけるソケットの信号割当 4 4.実験 4.1 実験の進め方

8

4.4 実験1

4.4.1 予備実験

(1)課題内容

DIP スイッチで設定した 8ビットのバイナリ値を LED モジュールに表示させる。

(2)手順

予備実験はレポート提出の必要はないが、“レポートを課す本実験の進め方”に従って作業を進める。

(S1)準備(実現方法の基本的な考え方をまとめる)

Arduino のデジタル I/O の D41 から D48 を DIP スイッチに接続し、設定した 8ビットのバイナリ値を読

み取る。また、デジタル I/O の D31 から D38 を LED モジュールに接続し、DIP スイッチから読み取った値

を出力する。

(S2)アルゴリズムとフローチャートの作成

DIPスイッチで設定した8ビットのバイナリ値をLEDモジュールに表示される処理の流れを図6に示す。

図6 予備実験のフローチャートの例

なお、DIP スイッチの各ビットから設定値(sw)を得る関数 dip_S()と設定値を LED モジュールに表示さ

せる関数 led_M()を下記のとおり設ける。

(i)関数 dipS()の機能

例えば Dip スイッチが 0b10100101 であった場合、D48、D46、D43 及び D41 が 1(HIGH)であるため、

sw=0x80+0x20+0x04+0x01=0xA5 と計算し、0xA5 の値を設定値として戻す。

(ii)関数 led_M()の機能

まず、LED 表示を行う値を引数 p で受け取る。例えば、p=0xA5 とした場合、次の論理演算を行って

各ビットの表示有無を確認する。

0 ビットの検査:0xA5(0b10100101) and(論理積) 0x01(0b00000001) = 0x01(表示有)

1 ビットの検査:0xA5(0b10100101) and(論理積) 0x02(0b00000010) = 0x00 (表示無)

※if の条件式において 0x00 以外は TRUE(真)になる

Page 9: 組込みプログラミングⅠ, Ⅱ - ESatoesato.net/ex/robo/arduino/text2020_1.pdf図2 Arduino Mega2560 R3におけるソケットの信号割当 4 4.実験 4.1 実験の進め方

9

(S3)プログラムの作成(コーディングとシミュレーション及びデバグ)

リスト5 実験1 予備実験のサンプル

void led_M(int p){ ★ポイント★

if (p & 0x01) { digitalWrite(31,HIGH); } led_M(int p)は LED モジュールの使用

else {digitalWrite(31,LOW); } を目的に作成した関数の例

引数 pが 2の累乗数を含んでいるかを

if (p & 0x02) { digitalWrite(32,HIGH); } 調べ、該当する桁の LED を表示させる

else {digitalWrite(32,LOW); }

if (p & 0x04) { digitalWrite(33,HIGH); }

else {digitalWrite(33,LOW); }

if (p & 0x08) { digitalWrite(34,HIGH); }

else {digitalWrite(34,LOW); }

if (p & 0x10) { digitalWrite(35,HIGH); }

else {digitalWrite(35,LOW); }

if (p & 0x20) { digitalWrite(36,HIGH); }

else {digitalWrite(36,LOW); }

if (p & 0x40) { digitalWrite(37,HIGH); }

else {digitalWrite(37,LOW); }

if (p & 0x80) { digitalWrite(38,HIGH); }

else {digitalWrite(38,LOW); }

}

int dip_S(){ ★ポイント★

int sw = 0; dip_S()は DIP スイッチの状態を調べ

if (digitalRead(41)==HIGH) { sw = sw + 0x01; } その設定値を返す関数

if (digitalRead(42)==HIGH) { sw = sw + 0x02; }

if (digitalRead(43)==HIGH) { sw = sw + 0x04; }

if (digitalRead(44)==HIGH) { sw = sw + 0x08; }

if (digitalRead(45)==HIGH) { sw = sw + 0x10; }

if (digitalRead(46)==HIGH) { sw = sw + 0x20; }

if (digitalRead(47)==HIGH) { sw = sw + 0x40; }

if (digitalRead(48)==HIGH) { sw = sw + 0x80; }

return sw;

}

Page 10: 組込みプログラミングⅠ, Ⅱ - ESatoesato.net/ex/robo/arduino/text2020_1.pdf図2 Arduino Mega2560 R3におけるソケットの信号割当 4 4.実験 4.1 実験の進め方

10

(リスト5のつづき)

void setup() {

pinMode(31,OUTPUT);

pinMode(32,OUTPUT);

pinMode(33,OUTPUT);

pinMode(34,OUTPUT);

pinMode(35,OUTPUT);

pinMode(36,OUTPUT);

pinMode(37,OUTPUT);

pinMode(38,OUTPUT);

pinMode(41,INPUT_PULLUP);

pinMode(42,INPUT_PULLUP);

pinMode(43,INPUT_PULLUP);

pinMode(44,INPUT_PULLUP);

pinMode(45,INPUT_PULLUP);

pinMode(46,INPUT_PULLUP);

pinMode(47,INPUT_PULLUP);

pinMode(48,INPUT_PULLUP);

}

void loop() {

int res = 0;

res = dip_S();

led_M(res);

}

Page 11: 組込みプログラミングⅠ, Ⅱ - ESatoesato.net/ex/robo/arduino/text2020_1.pdf図2 Arduino Mega2560 R3におけるソケットの信号割当 4 4.実験 4.1 実験の進め方

11

(S4)回路図の作成

Arduino のソケットと DIP スイッチ及び LED モジュールの接続は図7のとおり行った。なお、デジタル

I/O の D41 から D48 の入力信号は、DIP スイッチがオンの時に LOW、オフの時に HIGH となる。

図7 実験1 予備実験の回路図

4.4.2 本実験

(1)課題内容

DIP スイッチで設定した 8ビットのバイナリ値に 5を足した結果を LED モジュールに表示させる。

(2)確認事項

DIP スイッチに次の4通りの値を設定して、正しい結果が得られているかどうかを確認する。

(ⅰ)0x53 (0b01010011)を設定した場合

(ⅱ)0xFE (0b11111110)を設定した場合

(ⅲ)0x00 (0b00000000)を設定した場合

(ⅳ)0xFF (0b11111111)を設定した場合

Page 12: 組込みプログラミングⅠ, Ⅱ - ESatoesato.net/ex/robo/arduino/text2020_1.pdf図2 Arduino Mega2560 R3におけるソケットの信号割当 4 4.実験 4.1 実験の進め方

12

4.5 実験2

4.5.1 予備実験

(1)内容

デジタルI/OポートのD2に接続した押しボタンスイッチを押すと(入力は負論理で押したときに0,

押さないときに 1とする)、LED モジュールの表示が 0x00 にクリアされるプログラムを次の Aと Bの 2

通りの方法で作成せよ。但し、表示は 3秒間に1ずつカウントアップすること。

<方法 A 割込みを用いない方法>

プログラム中でスイッチが押されているか否かを判定し、押されている時に表示をクリアする。

なお表示は、0xFF から更に1だけカウントアップすると自動的に 0x00 に戻る。

<方法 B 割込みを用いる方法>

スイッチが押されたときに割込みが発生し、割込み処理の中で表示をクリアする。なお表示は、0xFF

から更に1だけカウントアップすると自動的に 0x00 に戻る。

(2)方法 Aの手順

(S1)準備(実現方法の基本的な考え方をまとめる)

メインルーチンの先頭で D2 の信号を読み取り、LOW なら LED 表示データを 0x00 に戻し(クリアすると

いう)、そうでないならそのままにして次に進んで表示を行う。ついで 3 秒間待った後,LED 表示データ

を1だけ増加してから元に戻るようにすればよい。

Page 13: 組込みプログラミングⅠ, Ⅱ - ESatoesato.net/ex/robo/arduino/text2020_1.pdf図2 Arduino Mega2560 R3におけるソケットの信号割当 4 4.実験 4.1 実験の進め方

13

(S2)アルゴリズムとフローチャートの作成(準備に示した基本的な考え方に基づいてアルゴリズムを作

成しフローチャートで表す)

図8 押しボタンスイッチを押すと表示がクリアされるカウンタプログラムのフローチャート

(S3)プログラムの作成(コーディングとシミュレーション及びデバグ)

※省略(各自で考える)

Page 14: 組込みプログラミングⅠ, Ⅱ - ESatoesato.net/ex/robo/arduino/text2020_1.pdf図2 Arduino Mega2560 R3におけるソケットの信号割当 4 4.実験 4.1 実験の進め方

14

(S4)回路図の作成

図9に示すように部品を接続する.このとき LED モジュールの極性に注意すること(部品表参照).

図9 予備実験の回路図

(S6)結果確認事項

次の 5通りの場合について,表示が正しくクリアされた回数を求め、グラフを作成せよ。

(ⅰ)押しボタンスイッチを 1秒間押した後 10秒間離す操作を10回繰り返した時にクリアされた回数

(ⅱ) 〃 2 秒間 〃

(ⅲ) 〃 3 秒間 〃

(ⅳ) 〃 4 秒間 〃

(ⅴ) 〃 5 秒間 〃

(3)方法 Bの手順

(S1)準備(実現方法の基本的な考え方をまとめる)

割り込み処理はメインプログラムと独立しているため、メインプログラムでは3秒間待った後に1だ

けカウントアップする動作だけを繰り返す。一方割り込み処理プログラムでは LED 表示データをクリア

(0x00)にし、表示させる処理を実行する。

Page 15: 組込みプログラミングⅠ, Ⅱ - ESatoesato.net/ex/robo/arduino/text2020_1.pdf図2 Arduino Mega2560 R3におけるソケットの信号割当 4 4.実験 4.1 実験の進め方

15

(S2)アルゴリズムとフローチャートの作成(準備に示した基本的な考え方に基づいてアルゴリズムを

作成しフローチャートで表す)

プログラムのフローチャートは次のようになる。

(a)メインルーチン (b)割込み処理ルーチン

図 10 割込み処理を用いたプログラムのフローチャート

(S3)プログラムの作成(コーディングとシミュレーション及びデバグ)

リスト6 実験2 方法 B 予備実験のソースリスト

volatile int ld; ★ポイント★

volatile ; 変数をレジスタから

void led_M(int p){ ではなく RAM からロードするよう

if (p & 0x01) { digitalWrite(31,HIGH); } コンパイラに指示。割込み処理を

else {digitalWrite(31,LOW); } 行う場合に必要。

: ※省略 リスト5を参照

}

Page 16: 組込みプログラミングⅠ, Ⅱ - ESatoesato.net/ex/robo/arduino/text2020_1.pdf図2 Arduino Mega2560 R3におけるソケットの信号割当 4 4.実験 4.1 実験の進め方

16

(リスト6のつづき)

void setup() {

pinMode(31,OUTPUT);

pinMode(32,OUTPUT);

pinMode(33,OUTPUT);

pinMode(34,OUTPUT);

pinMode(35,OUTPUT);

pinMode(36,OUTPUT);

pinMode(37,OUTPUT);

pinMode(38,OUTPUT);

ld=0;

attachInterrupt(digitalPinToInterrupt(2), interuptP, FALLING);

}

void interuptP(){

ld = 0;

led_M(ld);

}

void loop() {

if (ld>0xff){ ld=0; }

led_M(ld);

delay(3000);

ld = ld+1;

}

(5)実験項目及び結果のまとめ

次の 5通りの場合について,表示が正しくクリアされた回数を求めてグラフを作成する.

(ⅰ)押しボタンを 1秒間押した後 10秒間離す操作を10回繰り返した時にクリアされた回数

(ⅱ) 〃 2 秒間 〃

(ⅲ) 〃 3 秒間 〃

(ⅳ) 〃 4 秒間 〃

(ⅴ) 〃 5 秒間 〃

Page 17: 組込みプログラミングⅠ, Ⅱ - ESatoesato.net/ex/robo/arduino/text2020_1.pdf図2 Arduino Mega2560 R3におけるソケットの信号割当 4 4.実験 4.1 実験の進め方

17

4.5.2 本実験

(1)課題内容

押しボタンスイッチを押すたびに(押したときに 0、押さないときに 1 とする)、8 個の LED モジュ

ールの表示がカウントアップからカウントダウンへまたはカウントダウンからカウントアップへ切り

替わるプログラムを次の 2通りの方法で作成せよ。但し、カウントは 3秒間に1回ずつ行うこと。

<方法 A 割込みを用いない方法>

プログラム中でスイッチが押されているか否かを判定し、押されている時にカウントの向きを切り

替える。

<方法 B 割込みを用いる方法>

スイッチが押された時に割込みが発生し,割込み処理の中でカウントの向きを切り替える。なお表

示は,0xFF から更に1だけカウントアップすると自動的に 0x00 に戻る。

(2)確認事項

割込みを用いた場合と用いない場合について、下記の 5 通りの場合について実験を行なった結果をグ

ラフにまとめる。

(ⅰ)押しボタンを 1秒間押した後 10秒間離す操作を10回繰り返した時,加算と減算が切り替え

られた回数

(ⅱ) 〃 2 秒間 〃

(ⅲ) 〃 3 秒間 〃

(ⅳ) 〃 4 秒間 〃

(ⅴ) 〃 5 秒間 〃

(3)考察

(ⅰ)「割込みを用いない方法」の実験結果に基づいて、押しボタンを押す時間を変えたときに加算

と減算が切り替えられる回数が変化する理由について考察せよ。

(ⅱ)「割込みを用いる方法」について、(ⅰ)と同様に変化する理由を考察せよ。

参考文献

[1] 高本孝頼; みんなの Arduino 入門, リックテレコム, 2014.

[2] 神崎康宏; Arduino で計る,測る,量る, CQ 出版, 2013(第 3版).

[3] 山根彰; AVR マイコンリファレンス・ブック, CQ 出版, 2006.

[4] 福田和宏; Arduino ではじめる電子工学超入門, ソーテック社, 2014.

[5] Arduino 日本語リファレンス, http://www.musashinodenpa.com/arduino/ref/