• 検索結果がありません。

情報処理 A/B プログラミング入門テキスト ~ PEN を使って基本を学んだ後で 活用してみよう ~ バージョン吉田智子編集 1. はじめにプログラミングを体験することで ハードウェアとソフトウェアから構成されるコンピューターの本質や それが作り出すコンピューター社会に対する認

N/A
N/A
Protected

Academic year: 2021

シェア "情報処理 A/B プログラミング入門テキスト ~ PEN を使って基本を学んだ後で 活用してみよう ~ バージョン吉田智子編集 1. はじめにプログラミングを体験することで ハードウェアとソフトウェアから構成されるコンピューターの本質や それが作り出すコンピューター社会に対する認"

Copied!
23
0
0

読み込み中.... (全文を見る)

全文

(1)

1 2014.9.22 バージョン 吉田智子編集

「情報処理 A/B」プログラミング入門テキスト

PEN を使って基本を学んだ後で、活用してみよう~

1.はじめに

プログラミングを体験することで、ハードウェアとソフトウェアから構成されるコン ピューターの本質や、それが作り出すコンピューター社会に対する認識を深めることが できると言われている。 プログラミング体験のためには、さまざまな言語と環境を使うことができる。今回は、 PEN(Programming Environment for Novices)と呼ばれるプログラミング環境でプ ログラミングの基本を学ぶこととする。そして、この環境を使って絵を描いたり、 「LilyPad Arduino」というハードウェア用のプログラム(ソフトウェアとかアプリ ケーションと呼ばれるもの)を書いて、「計測と制御」も学ぶ予定である。 考えたことをプログラムに書き表すのは容易なことではない上に、書いたプログラム から間違い(バグ)を見つけるのも大変な作業である。しかし、この作業を通じて、コ ンピューターはプログラムに書かれたことを忠実に実行するだけの機械であることを 実感して欲しい。

図1:PEN のプログラミング環境 と LilyPad Arduino Development Board

(2)

2

2.プログラミング入門

2.1 プログラミングの基本

プログラムを書く際に必要となる「アルゴリズム」とは、問題を解くための手順のこ とである。プログラミングとは、まずアルゴリズムを考え、それをいずれかのプログラ ミング言語で記述する作業である。授業で扱った言語でアルゴリズムが記述できるよう になると、別のプログラミング言語の文法を学びさえすれば、プログラムは書けるよう になる。以下に、どのプログラミング言語でも共通する部分として、「変数」と「制御 構造」を説明する。 [1] 変数 アルゴリズムを記述するときに、計算の対象や途中結果などの値を記憶しておく場所 が必要になる。この置き場所として用いるのが「変数」である。変数に値を入れること を、「代入」という。変数は、現実の箱とは少し違った次の性質を持っている。 ・値を参照した後も、箱の中には値は残ったままである。 ・すでに値が入っている箱に、別の値を入れると、元の値は消えてしまう。 ・箱の中に入れる値の種類(整数、実数、文字列など)によって、違う箱を用意する 必要がある。 [2]制御構造 アルゴリズムの記述には、逐次処理、条件分岐、繰り返し処理の3つの基本制御の いずれかを利用する。 1) 逐次処理 … アルゴリズムの記述の上から順に処理される。 2) 条件分岐 … ある条件を満足する場合とそうでない場合で、処理内容を変えた いときに利用する。 3) 繰り返し処理 …ある条件が満たされている限り、いくつかの処理を繰り返したい ときに利用する。

(3)

3

1) 逐 次 処 理 … ア ル ゴ リ ズ ム の 記 述 の 上 か ら 順 に 処 理 さ れ る 。

2) 条件分岐 … ある条件を満足する場合とそうでない場合で、処理内容を

変えたいときに利用する。

3) 繰り返し処理 … ある条件が満たされている限り、いくつかの処理を

繰り返したいときに利用する。

(4)

4

2.2 プログラムの基本の制御構造

以下では、PEN(Programming Environment for Novices)と呼ばれるプログラミ

ング言語を例に、プログラミングの基本を学ぶ。ちなみにPEN は、大学入試センター の「情報関係基礎」で用いられる試験用手順記述言語(DNCL)に準拠している。

(1) 逐次処理

学習のポイント:変数の宣言・代入文・出力文の使い方、前から実行される逐次処理 例題2.1 キーボードから1つの整数を入力し、それを 3 倍した値を出力するプログラ ムを書いてみよう。 プログラム例:(行頭の 1: 2: などは説明のためのものであり、入力は不必要) 1: 整数 a 2: 整数 b 3: 「整数を入力してください:」を表示する 4: a ← input( ) 5: b ← a * 3 6: b を表示する 画面:PEN でのプログラミング環境の実行例

(5)

5 練習問題2.1 キーボードから長方形の二辺の長さを入力し、面積を表示するプログラ ムを書きなさい。 練習問題2.2 キーボードから 2 つの整数を入力し、その積および商を出力するプログ ラムを書きなさい(商の余りは切り捨てる)。 練習問題2.3 ある鉄道の運賃は、乗車距離を a(km)にしたとき、(120+20×a)円であ る。乗車距離を入力して、運賃を求めるプログラムを書きなさい。 練習問題2.4 鉛筆をみんなで分けたい。鉛筆の数と人数を入力し、一人あたり何本も らえるか、また、何本残るかのプログラムを書きなさい。

___________________________________

復習問題

(1)下線の部分を埋めなさい。 プログラムを記述するとき、計算の対象や途中結果などの値を記憶しておくための場 所として用いるのが、 です。これに値を入れることを、 といい、PEN での記号は、 です。 また、PEN において、キーボードから文字列(数字の場合もある)を読み込む命令は、 input() と記述します。たとえば、キードードから入力された数字を変数 a に代入す る式は、 と記述します。 (2)次のプログラムを作成しなさい。 スーパーで、商品を2つ買いました。一つ目の買い物の金額、二つ目の買い物の金額 を画面から入力すると、合計金額が表示されるプログラムを書きなさい。 (3)次のプログラムを作成しなさい(アドバンスト問題)。 スーパーで、それぞれ 100 円以上のものを2つ買いました。その日はお客様感謝デー だったので、100 円以上のものを買った場合はそれぞれの商品につき、20 円ずつ値引き してもらえました。消費税は考えないものとして、一つ目の買い物の金額(100 円以上)、 二つ目の買い物の金額(100 円以上)を画面から入力すると、値引き後の合計金額が表 示されるプログラムを書きなさい

___________________________________

(6)

6

(2)条件分岐

学習のポイント:プログラムの実行順序を変える制御構造の一つ「条件分岐」を学ぶ。 例題2.2 キーボードから入力した数が、3 で割り切れるかどうか調べ、割り切れるな ら「3 の倍数である」と出力するプログラムを書いてみよう。 (ヒント:a が b で割り切れるなら、a % b = 0 と書く。たとえば 7 % 3 = 1 ) プログラム例: 1: 整数 num 2: 「整数を入力:」を表示する 3: num ← input( ) 4: もし num % 3 = 0 ならば 5: | 「3 の倍数である」 を表示する 6: を実行する 例題2.3 キーボードから入力した数が、3 で割り切れるかどうか調べ、割り切れるな ら「3 の倍数である」と出力し、そうでないなら「3 の倍数ではない」と出力するプ ログラムを書いてみよう。 プログラム例: 1: 整数 num 2: 「整数を入力:」を表示する 3: num ← input( ) 4: もし num % 3 = 0 ならば 5: | 「3 の倍数である」 を表示する 6: を実行し,そうでなければ 7: | 「3 の倍数ではない」 を表示する 8: を実行する

(7)

7 例題 2.4 入力された数(点数) が 90 以上なら「秀」、80 以上 90 未満なら「優」、 70 以上 80 未満なら「良」、60 以上 70 未満なら「可」、60 未満なら「不合格」と 出力するプログラムを書きなさい。 プログラム例: 1: 整数 score 2: 「点数は?:」を表示する 3: score← input( ) 4: もし score >= 90 ならば 5: | 「秀」 を表示する 6: を実行し,そうでなくもし score >= 80 ならば 7: | 「優」 を表示する 8: を実行し,そうでなくもし score >= 70 ならば 9: | 「良」 を表示する 10: を実行し,そうでなくもし score >= 60 ならば 11: | 「可」 を表示する 12: を実行し,そうでなければ 13: | 「不合格」 を表示する 14: を実行する 練習問題 2.5 キーボードから点数(x)を入力し、x が 60 以上なら「合格」と表示し、 x が 60 未満なら「不合格」と表示するプログラムを書きなさい。

練習問題 2.6 体格指数(BMI:Body Mass Index)とは、現在の体重と身長を基礎として 一定の計算式から導かれます。

BMI=体重(kg)÷身長(m) ²

bmi ← taiju / ( (shincho/100) * (shincho/100) )

まず、bmi の結果を表示し、その値が 26 以上なら「太っている」、24 以上 26 未満な ら「過体重」、22 以上 24 未満なら「理想体重」、20 以上 22 未満なら「やせ気味」、 20 未満なら「やせすぎ」と出力するプログラムを書きなさい。

なお、利用する3つの変数(bmi, taiju, shincho)は、すべて整数ではなく、実数と

(8)

8

___________________________________

ここまでの復習問題と、

「繰り返し処理」の準備問題

(1) 次のプログラムを作成しなさい(復習問題)。 スーパーで、一つだけ、買い物をしました。その日はお客様感謝デーだったので、100 円以上のものを買った場合は 20 円値引きしてもらえました。消費税は考えないものと して、買い物の金額を画面から入力すると、100 円以上なら 20 円引き、100 円未満なら そのままの金額を出力するプログラムを書きなさい。 (2) 次のプログラムを作成しなさい(準備問題)。 スーパーで、4 つ買い物をしました。その日はお客様感謝デーだったので、100 円以 上のものを買った場合はそれぞれの商品につき、20 円ずつ値引きしてもらえました。 消費税は考えないものとして、一つ目の買い物の金額(100 円以上)、二つ目の買い物 の金額(100 円以上)、三つ目の買い物の金額(100 円以上)、四つ目の買い物の金額(100 円以上)をそれぞれ画面から入力すると、合計金額が表示されるプログラムを書きなさ い。 ヒント:このプログラムを考える前に、購入した品物2 個の合計金額を求めるプログラム を思い出してみると、次の通りである。 1: 整数 a, b 2: 整数 gokei 3: 「一つ目の買い物の金額を入力してね:」を表示する 4: a ← input() 5: 「二つ目の買い物の金額を入力してね:」を表示する 6: b ← input() 7: gokei ← (a - 20) + (b - 20) 8: 「それぞれ 20 円割引した合計金額は」を改行なしで表示する 9: gokei を改行なしで表示する 10: 「円です。」を表示する 購入した品物が4 個の場合は、上のプログラムの 3‐4 行目の命令を 4 回、繰り返して書 けばよい。しかし、購入した品物が多い場合、その方法を使うと行数が増えすぎてしまう。 そのような場合に、「繰り返し処理」を利用すると便利なのである。

(9)

9

(3)繰り返し処理

学習のポイント:プログラムの制御構造の一つ「繰り返し処理」を学ぶ 例題2.5 いちご(単数形)の正しいスペルを入力させるプログラムを書いてみよう。 プログラム例: 1: 整数 a 2: 文字列 word 3: a ← 1 4: 「いちご(単数形)のスペルを入力してね:」 を改行なしで表示する 5: word ← input() 6: word ≠ 「strawberry」 の間, 7: | a ← a + 1 8: | 「スペルが間違っています。もう一度入力してね:」 を表示する 9: | word ← input() 10: を繰り返す 11: 「正解です。いちごのスペルは」 と word と 「です。」 を表示する 12: 「あなたは」 と a と 「回目の挑戦で正解しましたね。」 を表示する このプログラムは、「スペルを入力させ、 合っていれば、正解のスペルと、何度入力 したかを表示してプログラムが終了する。 間違っていれば、再度スペルを入力させ、 正しいスペルが入力できるまで終了できな い」というものである。 変数として、次の二つを利用している。 整数 a … 今が何度目の挑戦かを表す変数 文字列 word … 入力されたスペルが入る 変数 繰り返しが終わるのはstrawberry とい うスペルが正しく入力された時なので、繰 り返しの条件は、変数word ≠「strawberry」 となる。つまり、strawberry というスペル が正しく入力されるまで、繰り返し続ける。 START 入力指示文 表示 再度画面入力 a を 1 増やす スペルは 間違っているか NO YES 変数準備 END 画面入力 何度目の挑戦で 正解したかを 表示 a に 1 を入れる

(10)

10 例題 2.6: スーパーで、20 個、買い物をしました。その日は特別に、100 円以上の 商品を買った場合は、それぞれ20円ずつ値引きしてもらえました。消費税は考えな いものとして、買ったもの(100 円以上)の金額を一つずつ入れていくと、値引き後の 合計金額が表示されるプログラムを書きなさい。 このプログラムを考える前に、購入した品物 2 個の合計金額を求めるプログラムを思 い出してみよう。 1: 整数 a, b 2: 整数 gokei 3: 「一つ目の買い物の金額を入力してね(100 円以上):」を表示する 4: a ← input() 5: 「二つ目の買い物の金額を入力してね(100 円以上):」を表示する 6: b ← input() 7: gokei ← (a - 20) + (b - 20) 8:「それぞれ 20 円割引した合計金額は」を改行なしで表示する 9: gokei を改行なしで表示する 10:「円です。」を表示する 購入した品物が 5 個の場合は、上のプログラムの 3‐4 行目の命令を 5 回、繰り返し て書けばよい。しかし、購入した品物が多い場合、その方法を使うと、行数が増えすぎ てしまう。そこで、3‐4 行目を 20 回処理させるために、「繰り返し」を利用する。 プログラム例: 1: 整数 a 2: 整数 gokei, counter 3: counter ← 1 4: counter ≦ 20 の間, 5: | 「買い物の金額を入力してね(100 円以上):」を表示する 6: | a ← input() 7: | gokei ← gokei + (a - 20) 8: | counter ← counter + 1 9: を繰り返す 10: 「それぞれ 20 円引きした合計金額は」を改行なしで表示する 11: gokei を改行なしで表示する 12: 「円です。」を表示する

(11)

11 練習問題 2.7:購入した品物の数を最初に入力し、その数の商品の合計金額を求めるプ ログラムを書いてみましょう。(今回は、100 円以上でも、20 円引きにはなりません。) 練習問題 2.8:このプログラムに機能追加し、100 円以上の品物を買った場合だけ、20 円引きして、合計金額を求めるプログラムを書いてみましょう。

_________________________________

最後に補足:「繰り返し処理」が使えないなら、どんなに困るかを考えてみる・・ (1)繰り返し処理が使えないなら、3-4 行目を 20 回書く必要がでてきます(大変!)。 整数 a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t 整数 gokei 「一つ目の買い物の金額を入力してね(100 円以上):」を表示する a ← input() 「二つ目の買い物の金額を入力してね(100 円以上):」を表示する b ← input() 「三つ目の買い物の金額を入力してね(100 円以上):」を表示する c ← input() 「四つ目の買い物の金額を入力してね(100 円以上):」を表示する : (28行分、略) : r ← input() 「十九個目の買い物の金額を入力してね(100 円以上):」を表示する s ← input() 「二十個目の買い物の金額を入力してね(100 円以上):」を表示する t ← input() gokei← (a-20)+(b-20)+(c-20)+(d-20)+(e-20)+(f-20)+(g-20)+(h-20)+(i-20)+(j-20)+ (k-20)+(l-20)+(m-20)+(n-20)+(o-20)+(p-20)+(q-20)+(r-20)+(s-20)+(t-20) 「それぞれ 20 円引きした合計金額は」を改行なしで表示する gokei を改行なしで表示する 「円です。」を表示する

(12)

12 (2) 変数 a を何度も利用して、gokei 変数に合計金額に足しこんでいくと、変数を 多く使う必要はなくなるが・・ 整数 a 整数 gokei 「買い物の金額を入力してね(100 円以上):」を表示する a ← input() gokei ← (a-20) 「買い物の金額を入力してね(100 円以上):」を表示する a ← input() gokei ← gokei+(a-20) :(51行分、略) : 「買い物の金額を入力してね(100 円以上):」を表示する a ← input() gokei ← gokei+(a-20) 「それぞれ 20 円引きした合計金額は」を改行なしで表示する gokei を改行なしで表示する 「円です。」を表示する (3) 何度も処理を記述する部分に「繰り返し処理」を使うと、すっきり解決! 整数 a 整数 gokei, counter counter ← 1 counter ≦ 20 の間, | 「買い物の金額を入力してね(100 円以上):」を表示する | a ← input() | gokei ← gokei + (a - 20) | counter ← counter + 1 を繰り返す 「それぞれ 20 円引きした合計金額は」を改行なしで表示する gokei を改行なしで表示する 「円です。」を表示する

___________________________________

(13)

13

___________________________________

PEN による「図形描画」の準備問題

(1) 「図形描画」のために必要な(通常の PEN のプログラム記述に追加する) ステップは次の通りである。 (a)描画ウィンドゥを開く ・・・gOpenWindow(横ピクセル,縦ピクセル) という関数を使う (b) 色を決める ・・・gSet なんとか color(赤値,緑値,青値) という関数を使う (c) 描く図形の種類を選び、どの場所に、どのサイズで描くかを指示する ・・・gFill なんとか()あるいは gDraw なんとか() という関数を使う (2)これらの関数の基本的な説明は、次の通りである。 (a)描画ウィンドゥを開く ・・・gOpenWindow(横ピクセル,縦ピクセル) という関数を使う たとえば、gOpenWindow(400,400) と書くと、横方向に 400 ピクセル、縦方向に 400 ピクセ ルのウィンドゥが開く。 (b) 色を決める ・・・gSet なんとか color(赤値,緑値,青値) という関数を使う 色を決める「(赤値,緑値,青値)」は、光の 3 原色の加法混合で表現するため、それぞれの強 さを 0~255 の範囲で指定する。(0,255,0)は緑、(0,0,0)は黒、(255,255,255)は白となる。 たとえば、gSetFillColor(255,0,0)と書くと、塗りつぶしの色が赤にセットされる。

(14)

14

(c) 描く図形の種類を選び、どの場所に、どのサイズで描くかを指示する

・・・gFill なんとか()あるいは gDraw なんとか() という関数を使う

描く図形の種類の位置を指定するための座標軸(x 座標、y 座標)は、描画ウィンドゥの 左上の地点から、右へが x 座標、下へが y 座標である。

たとえば、gOpenWindow(400,400) gSetFillColor(255,0,0)の後の FillBox (230,300,80,30) なら、次のような場所に次のサイズの長方形が描かれる。

(3)この赤い箱をちょうど真ん中に描画するには、x 座標、y 座標をどう書けばよいだろうか。

(15)

15

3.図形描画

学習のポイント:図形の描画モデルを理解する、図形描画の関数の使い方を学ぶ。

3.1 描画関数の使い方

例題3.1 400×400 の描画ウィンドウを開き、丸と四角と文字列を描いてみよう。 プログラム例: 1: gOpenWindow(400,400) 2: gSetFillColor(255,0,0) 3: gFillCircle(200,200,50) 4: 5: gSetLineWidth(3) 6: gFillBox(230,300,80,30) 7: 8: gSetTextColor(0,255,255) 9: gSetFontSize(24) 10: gDrawText(「ようこそ」, 70,100) 練習問題 3.1: 200×200 の描画ウィンドウを開き、キーボードから縦と横を入力し、 描画ウィンドウの中央に長方形を表示してみよう。

3.2 条件分岐を利用した描画

例題3.2 キーボードから点数を入力し、60 以上なら描画ウィンドウの中央に半径 50 の緑の円を描き、60 未満の場合は半径 50 の赤い円を描いてみよう。 プログラム例: 1: 整数 ten 2: gOpenWindow(200,200) 3: 「点数?:」を改行なしで表示する 4: ten ← input() 5: もし ten ≧ 60 ならば 6: | gSetFillColor(0,255,0) 7: を実行し,そうでなければ 8: | gSetFillColor(255,0,0) 9: を実行する 10: gFillCircle(100,100,50)

(16)

16 練習問題 3.2: キーボードから点数を入力し、80 点以上なら描画ウィンドウの中央に 半径 50 の緑の円を表示し、60 点以上 80 点未満なら黄色の円を表示し、60 点未満なら 赤い正方形を表示するプログラムを作れ。

3.3 繰り返しを利用した描画

例題3.3 400×400 の描画ウィンドウに、半径 25 の赤い円を互いに接するように水 平に配置せよ。 プログラム例: 1: 整数 x 2: gOpenWindow(400,400) 3: gSetLineColor(255,0,0) 4: 5: x ← 25 6: x < 400 の間, 7: | gDrawCircle(x,200,25) 8: | x ← x + 50 9: を繰り返す 半径 25 の赤い円を互いに接するように水平に配置するのに必要な描画命令は、 次の通りである。 gDrawCircle( 25,200,25) gDrawCircle( 75,200,25) gDrawCircle(125,200,25) gDrawCircle(175,200,25) gDrawCircle(225,200,25) gDrawCircle(275,200,25) gDrawCircle(325,200,25) gDrawCircle(375,200,25) 練習問題3.3 400×400 の描画ウィンドウに、半径 25 の赤い円を 15 個、互いに重な り合うように水平に配置せよ。 練習問題3.4 400×400 の描画ウィンドウの真ん中に、半径がそれぞれ 20,40,60,...,200 の同心円を描け。円の色は好きな色でよい。

(17)

17

__________________________________

PEN のプログラムを「LilyPad Arduino」にロードして使うための準備

*Arudino の入出力装置を制御する命令 【アナログ入出力関数】 analogRead(pin) ◾pin 値を読み込むピン番号 ◾戻り値 0 から 1023 までの整数値 ピンに接続されたアナログ機器から値を読み込む命令 読み込まれる値は 0 から 5 ボルトの入力電圧を 0 から 1023 の数値に変換したもの analogWrite(pin, value) ◾pin 値を書き込むピン番号 ◾value 0 〜 255 ピンに接続されたアナログ機器に value を書き込む命令 【デジタル入出力関数】 pinMode(pin, mode) ◾pin 設定したいピン番号

◾mode INPUT(入力)/ OUTPUT(出力)

ピンに接続されたデジタル機器が入力用か出力用なのかを設定する命令 digitalRead(pin) ◾pin 値を読み込むピン番号 ◾戻り値 HIGH ( 1 ) / LOW ( 0 ) ピンに接続されたデジタル機器から値を読み込む命令 digitalWrite(pin, value) ◾pin 値を書き込むピン番号 ◾value HIGH ( 1 ) / LOW ( 0 )

(18)

18

(19)

19

4.

PEN」と「LilyPad Arduino」で「プログラムによる計測と制御」を学ぶ

次に、LilyPad Development Board の「押しボタンスイッチ」、「スライドスイッチ」、 「白色 LED」、「RGB フルカラ― LED」、「明るさセンサー」、「温度センサー」、「ブザー」、 「バイブレータ」などの周辺モジュールを制御するためのプログラムを、PEN で書い てみる。 実際に手元でハードウェアを動かすことのできるプログラムを書くことで、コンピ ューターの簡単な入出力の仕組み、つまり「プログラムによる計測と制御」を理解す ることを目標とする。

4.1 逐次処理とデジタル出力

目的: PEN の環境に慣れること、および、逐次処理について理解する。LED の点灯、 消灯を行うプログラムを作成することにより、逐次処理とデジタル出力について 理解する。 例題 1-1: 白色 LED を 5 秒間点灯させよ。 プログラム例: 1: pinMode(5, "OUTPUT") 2: digitalWrite(5, 1) /* 白の LED を点灯 */ 3: delay(5000) /* 5 秒間待つ */ 4: digitalWrite(5, 0) /* 白の LED を消灯 */ 解説: pinMode() は、指定したピンを出力 (OUTPUT) として扱うのか、あるいは入 力 (INPUT) として扱うかを設定するものである。ここでは、白色 LED が接続さ れている 5 番ピンを出力 (OUTPUT) に設定している。 digitalWrite() は、指定したピンにデジタル出力を行う命令である。出力する 値は 0 または 1 であり、1 を出力すると LED は点灯し、0 を出力すると LED は消 灯する。 delay() は、指定した時間 (ミリ秒単位)、プログラムの実行を休止させる。こ こでは、5 秒間休止させている。

(20)

20 例題 1-2: フルカラー LED で様々な色を光らせよ。 プログラム例: 1: pinMode(9, "OUTPUT") 2: pinMode(10, "OUTPUT") 3: pinMode(11, "OUTPUT") 4: digitalWrite(9, 0) /* 赤色 LED を点灯させる */ 5: delay(1000) /* 1 秒待つ */ 6: digitalWrite(9, 1) /* 赤色 LED を消灯させる */ 7: digitalWrite(10, 0) /* 青色 LED を点灯させる */ 8: delay(1000) /* 1 秒待つ */ 9: digitalWrite(10, 1) /* 青色 LED を消灯させる */ 10: digitalWrite(11, 0) /* 緑色 LED を点灯させる */ 11: delay(1000) /* 1 秒待つ */ 12: digitalWrite(11, 1) /* 青色 LED を消灯させる */ 解説: 赤色,青色、緑色の LED がそれぞれ 9、10、11 番ピンに設定されている。 まず pinMode() で、 9、10、11 番ピンを出力 (OUTPUT) に設定している。その後、 9、10、11 番ピンに digitalWrite() で 0 の値を与えて LED を点灯し、1 の値を与 えて LED を消灯させている。LED はそれぞれ一秒間点滅する。

4.2 アナログ出力

目的: LED の明るさを制御することで、アナログ出力の仕組みについて理解する。 例題 2-1: 白色 LED を暗めに点灯 (明るさ 100) させた後、明るく点灯 (明るさ 255) させ、最後に消灯 (明るさ 0) させるプログラムを作成せよ。 プログラム例: 1: pinMode(2, "OUTPUT") 2: analogWrite(2, 100) /* 暗めに点灯させる */ 3: delay(2000) 4: analogWrite(2, 255) /* 明るく点灯させる */ 5: delay(2000) 6: analogWrite(2, 0) /* 消灯させる

解説: analogWrite(pin, value) は LED の明るさを変える関数である。このプログ ラムでは、2 番のアナログピンに出力している。value の 値 ( 0~255)で LED の明 るさを決める。

(21)

21

4.3 繰り返し、条件分岐、デジタル入力

目的:LilyPad Development Board 上のスイッチを読み取ることによって、デジ タル入力の仕組み、および、繰り返し文についての理解をする。 例題 3-1: 白色 LED の 1 秒間ずつの点灯・消灯を 50 回繰り返せ。 プログラム例: 1: 整数 i 2: pinMode(5, "OUTPUT") 3: i ← 0 4: i < 50 の間, /* 繰り返し文 */ 5: | digitalWrite(5, 1) 6: | delay(1000) 7: | digitalWrite(5, 0) 8: | delay(1000) 9: | i ← i+1 10: を繰り返す 解説: 4~10 行目は繰り返し文である。4 行目の条件で 5~9 行目の処理を繰り返し ている。一回ごとに5番ピンの LED を 1 秒間ずつ点灯と消灯させている。 例題 3-2: スイッチと白色 LED を 連 動 さ せ よ 。 プログラム例: 1: 整数 i 2: pinMode(5, "OUTPUT") 3: pinMode(2, "INPUT") /* スイッチのあるピンを入力設定 */ 4: 1 = 1 の間, 5: |もし digitalRead(2) = 0 ならば /* スイッチを切る */ 6: | | digitalWrite(5, 0) /* LED の消灯 */ 7: |を実行し,そうでなければ /* スイッチを入れる */ 8: | | digitalWrite(5, 1) /* LED の点灯 */ 9: | を実行する 10: を繰り返す

(22)

22 解 説 : 3 行 目 で ス イ ッ チ が あ る 2 番 ピ ン を 入 力 用 に 設 定 す る 。 5 行 目 の digitalRead() は、引数で指定したピン(このプログラムでは 2 番)に電圧がかか っているかをチェックし、0~1023 で返す。4~10 行目は 条件文である。「もし」の 後に書かれた条件式の値が真なら、 6 行目を実行する。 偽なら 8 行目を実行する。

4.4 アナログ入力

目的:明るさセンサーによる、アナログ入力の仕組みを理解する。 例題 4-1: 明るさセンサーと LED を連動させよ。暗ければ点滅速度を速く、 明るければ遅く光らせよ。 プログラム例: 1: 整数 light 2: pinMode(5, "OUTPUT") 3: pinMode(6, "INPUT") 4: 1=1 の間,

5: | light ← analogRead(6) /* light に 6 番ピンの値を代入 */ 6: | digitalWrite(5, 1) 7: | delay(light*3+1) /* light の値に応じて待機時間を変化させる */ 8: | digitalWrite(5, 0) 9: | delay(light*3+1) 10: を繰り返す 解説: 2 行目で LED の出力を 5 番ピンに、3 行目で明るさセンサーが接続されてい る 6 番ピンを入力に設定している。4~10 行目の繰り返しの処理で、 delay() の 引数に analogRead() で読み込んだ、6 番ピンの値を 3 倍して 1 を加えた値を与 えることで、点灯と消灯の間隔を変化させて いる。

4.5 総合演習

目的:アナログ入力の値に応じてデジタル出力結果を変化させるなどの総合演習 によって、デジタル入出力とアナログ入出力の仕組みを復習する。 例題 4-2:明るさセンサーの値が 200 以下ならフルカラー LED を赤く点灯させ て、200 より大きければ、白色 LED を点灯させよ。

(23)

23 プログラム例: 1: 整数 light 2: pinMode(5, "OUTPUT") 3: pinMode(9, "OUTPUT") 4: pinMode(6, "INPUT") 5: 1 = 1 の間,

6: | light ← analogRead(6) /*light に 6 番ピンの値を代入 */ 7: |もし light <= 200 ならば 8: | | digitalWrite(9, 0 ) /* 赤色 LED の点灯 */ 9: | | delay(1000) 10: | | digitalWrite(9, 1) /* 赤色 LED の消灯 */ 11: |を実行し,そうでなければ 12: | | digitalWrite(5, 1) /* 白色 LED の点灯 */ 13: | | delay(1000) 14: | | digitalWrite(5, 0) /* 白色 LED の消灯 */ 15: | を実行する 16: を繰り返す 解説: 6 行目で明るさセンサーの値を light という変数に取り込み、その値に応じて、 赤色 LED を点灯させるか、白色 LED を点灯させるかを決めている。 参考文献: ・山口 直希, 中村 亮太, 松浦 敏雄, 吉田 智子:“「プログラムによる計測・制御」 を学ぶための学習環境の開発”,大阪市立大学大学院 創造都市研究科都市情報学専攻電 子紀要「情報学」, 11 巻, 1 号, pp.27-34 (2014). ・LilyPad 研究会のページ(http://lilypad.pen.jp/) このテキストで紹介した例題や練習問題には、一部、PEN の開発元である大阪市立大学 松浦研究室で作成されたテキストや、上記の論文や LilyPad 研究会のページに含まれる ものを使っています。

参照

関連したドキュメント

2021] .さらに対応するプログラミング言語も作

最後に要望ですが、A 会員と B 会員は基本的にニーズが違うと思います。特に B 会 員は学童クラブと言われているところだと思うので、時間は

それゆえ、この条件下では光学的性質はもっぱら媒質の誘電率で決まる。ここではこのよ

つの表が報告されているが︑その表題を示すと次のとおりである︒ 森秀雄 ︵北海道大学 ・当時︶によって発表されている ︒そこでは ︑五

編﹁新しき命﹂の最後の一節である︒この作品は弥生子が次男︵茂吉

手動のレバーを押して津波がどのようにして起きるかを観察 することができます。シミュレーターの前には、 「地図で見る日本

荒天の際に係留する場合は、1つのビットに 2 本(可能であれば 3

Google マップ上で誰もがその情報を閲覧することが可能となる。Google マイマップは、Google マップの情報を基に作成されるため、Google