pica tower arduinoプログラミングマニュアル プログラミングマニュアル 2 1....

55
Arduino プググ ニア

Upload: buidat

Post on 24-May-2018

223 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

ピ カ ・ タ ワ ー

Arduino プログラミング

マニュアル

Page 2: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

1

このマニュアルは、エレキットの『PICA Tower(ピカ・タワー:AW-864)』の LED 部と Arduino を使用し、

LED のオリジナル点灯パターンの作成やセンサーでの点灯制御を行うプログラム作成を通して、Arduino での

プログラミング方法を学習することを目的としています。

Arduino は ATMEL 社の AVR マイコンを搭載したマイコンボードで、C 言語に似た『Arduino 言語』を用いてプ

ログラミングをすることができます。その開発環境は無償で使用することができ、多くの解説書などが出版さ

れたこともあり、誰もが比較的簡単にマイコンのプログラミングを行え、希望の動作をする電子回路が作成で

きるようになりました。

Arduino にはいろいろな種類があり、目的により使い分けられています。PICA Tower の LED 部は Arduino

UNO にそのまま取り付けることができるようになっていますので、本書では Arduino UNO でオリジナル点灯パ

ターンを作成する方法を解説します。

(※Arduino でプログラミングをするためには、Arduino UNO、パソコン(Windows XP 以降、Mac OSX 以降、

Linux)、USB ケーブルなどが別途必要です。)

・PICA Tower (AW-864)について

PICA Tower は 27 コ、4 色の LED(発光ダイオード)を立体的に配置した電飾オブジェです。

PICA Tower は株式会社イーケイジャパンと福岡県立福岡工業高等学校の共同開発プロジェクトにより、開

発・商品化しました。

お断り

本書の内容は『PICA Tower (AW-864)』を Arudino でプログラミングする際

に必要な最低限の解説のみとなります。また、Arduino の機能もその一部につ

いてのみ解説しており、全てを解説しているものではありません。 更に詳しく Arduino やそのプログラミング方法についてお知りになりたい方

は、専門書等をご参照ください。

また、プログラミングに必要な開発環境はソフトウェアのアップデート等によ

り本書の内容と異なる場合があります。あらかじめご了承ください。

本書で解説している開発環境についてのサポートは当社ではお受けできませ

ん。あらかじめご了承ください。

はじめに

Page 3: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

2

1. 開発環境の準備 4

●用意するもの 4

●Arduino IDE のインストール 5

・Arduino IDE の入手と起動 5

●ドライバーのインストール 6

・Windows の場合 6

・Mac OS X の場合 8

●COM ポートの確認と設定 8

・Windows no 場合 8

・Mac OS X の場合 9

●Arduino 各部の機能 10

・ピン配置図 10

・ピンの機能 10

2. PICA Tower の回路について 11

●PICA Tower の回路 11

●LED が点灯するためには 11

・電流が流れる方向 11

・LED に加える電圧 12

・順方向電流の調整 12

●Arduino のポート 13

3. Arduino 言語の基礎 15

●文法の基礎 15

・コメント 15

・文 15

・ブロック 15

●定数と変数 16

●データ型 16

●演算 17

・代入 17

・算術演算子 17

・インクリメント、デクリメント 18

・比較演算子 18

・論理演算子 19

・シフト演算子 20

・変数計算後に同じ変数に代入する演算子(複合演算子) 20

・演算の順番 21

もくじ

Page 4: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

3

●制御文 22

・if 制御文 22

・switch 制御文 23

・for 制御文 24

・while 制御文 25

●関数 29

・関数の書き方 29

・関数のプロトタイプ宣言 31

・グローバル変数とローカル変数 32

●デジタル入出力 33

●アナログ入出力 33

●時間関数 35

●便利な機能 35

4. Arduino IDE でプログラミング 37

●Arduino と PICA Tower の LED 部の接続 37

●Arduino IDE の画面 37

●Arduino のプログラミング 38

●プログラムの検証と Arduino への書き込み 39

5. オリジナル点灯パターンをつくろう! 40

●LED を点滅させる 41

●LED を回転するように点灯させる 42

●制御文を使用してプログラムを作る 43

●関数を使用する 45

6.明るさセンサーを使おう 48

●アナログ入力で読み取った値 49

●アナログ入力を使ってみよう 49

・シリアルポートモニター 49

・アナログ入力を使ったプログラム 51

Page 5: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

4

●用意するもの

・Arduino UNO (R3)

(R3)は Arduino のバージョンを表します。

Arduino UNO なら、どのバージョンでも使用出来ます

が、このマニュアルでは(R3)を使用します。

※バージョンにより端子数や部品のレイアウトが異なり

ます。

・USB ケーブル

パソコンと Arduino を接続します。

・パソコン

パソコンの OS は、Windows(XP 以降)、Mac(OS X

以降)、Linux が使用できます。

このマニュアルでは Windows を例に説明します。

●いろいろな Arduino

市販されている Arduino には多くの種類があります。Arduino の最も標準的な Arduino UNO に加え

て、ブレッドボード上でのテストに便利な Nano、衣服に縫い付けることを考えられた LilyPad、PC

との通信部分を取り外して安価にした Pro、入出力が強化された Mega などがあります。

これら全ての Arduino は、プログラムを作る仕組みが同じで、同じ Arduino IDE といわれるプログ

ラム開発ソフト(総合開発環境といいます)で作成することができます。

プログラムの書き換えに特別な機器は必要としないので、プログラムの書き込みが手軽ですぐに使い

始められます。

1.開発環境の準備

Arduino の例

Arduino UNO Arduino Nano LilyPad

Arduino Pro Arduino Mega

Page 6: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

5

●Arduino IDE のインストール

Arduino を制御するためには、プログラムを作成し、Arduino 基板へ書き込みを行う必要があります。この

プログラムを作成するエディタとプログラム書き込み機能を持った開発環境のことを、Arduino IDE といい

ます。

・Arduino IDE の入手と起動

まず Arduino のホームページにアクセスします。

http://www.arduino.cc/ (英語のサイトです)

ダウンロード画面から、お使いの OS に対応したソフトを

選択し、適当なフォルダーに保存します。

ダウンロード後、保存したフォルダー内に、arduino-X.X.X-XXX が作成されます。このファイルは圧縮さ

れているので解凍(展開)ソフトなどで解凍してくだい。

※XXX は使用する OS やソフトのバージョンによって異なります。

ファイルを解凍すると、Arduino-1.0.1 のように、バージョン番号が付いたフォルダーが作成されます。

先ほど解凍したフォルダー内にある、arduino のアイコンをダブルクリックすると、arduino IDE が起動

し画面が表示されます。

※画面は変わる可能性があります 画面は 2013 年 10 月現在のものです。

↓フォルダーの中の arduino をクリック IDE 起動画面

Page 7: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

6

●ドライバーのインストール

次に、Arduino 基板とパソコンが通信するために必要なドライバーをインストールします。

Arduino 基板とパソコンを USB ケーブルで接続します。

・WindowsXP の場合

接続後に「新しいハードウェアの検出」画面が表示されますの

で、「いいえ、今回は接続しません。」を選択して次へ進みま

す。

「一覧または特定の場所からインストールする。」を選択して次

へ進みます。

「次の場所を含める。」で、参照のボタンをクリックして、先ほ

ど解凍したフォルダーの中にある「drivers」を選択して、次へ

進みます。

ドライバーのインストールが始まり、自動的に完了します。

完了後に、もう一度ドライバーのインストールを求められる場合は、1 回目と同じように進めて完了させま

す。

Windows の場合

Page 8: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

7

・WindowsVista/7 の場合

「デバイスドライバーソフトウェアをインストールしています。」と表示され、しばらく待つと、パソコン

が自動でドライバーを検索しインストールが完了します。もしも自動でインストールができない場合は次

の手順でインストールしてください。

WindowsVista/7 に手動でドライバーをインストールする

1)『コントロールパネル』→『システムのセキュリテ

ィ』→『デバイスマネージャー』と選んで、デバイ

スマネージャーの画面を開きます。

2)デバイスマネージャー画面の中に、「不明なデバイ

ス」という表示がされていますので、その文字の上

で右クリックして、「ドライバーソフトウェアの更新

…」を選びます。

3)「ドライバーソフトウェアの更新」画面から、「コン

ピューターを参照してドライバーソフトウェアを検

索します。」を選びます。

Page 9: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

8

Mac OS X の場合、ダウンロードが完了すると自動的にドライバーがインストールされますので、表示される

メッセージに従い必要に応じて管理者パスワードの入力や再起動を行ってください。

●COM ポートの確認と設定

次に、Arduino 基板がどのシリアルポート(COM ポート)に接続されたか確認します。

WindowsXP では、マイコンピュータのアイコンを右クリックして「プロパティ」を選択し、「ハードウェア」

のタブの中にある「デバイスマネージャー」をクリックします。

WindowsVista/7 では、「コントロールパネル」→「システムとセキュリティ」→「デバイスマネージャー」

と進みます。

デバイスの一覧が表示されますので、「ポート(COM と LPT)」という項目の下を確認します。

4)「ドライバーソフトウェアの更新」画面から、「コンピューターを参照してドライバーソフトウェアを

検索します。」を選びます。参照のボタンをクリックして、先ほど解凍したフォルダーの中にある

「drivers」を選択して、次へ進みます。

5) しばらく待つと、ドライバーのインストール完了画面が表示されます。

※セキュリティーソフトの設定により警告画面が表示される場合があります。

そのような場合にはインストールを承認するようにしてください。

6) もう一度デバイスマネージャーを表示して、

Arduino 基板が、ポート(COM と LPT)に登録され

ていることを確認してください。

Windows の場合

Mac OS X の場合

Page 10: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

9

Arduino 基板が接続されたポートが表示されます。

図では Arduino 基板が「COM4」に接続されていることが分かり

ます。この COM の番号を覚えておきます。

Arduino IDE を起動し、メニューの『ツール』→『シリアル

ポート』で『COM4』を選択(✓が付いた状態)しておきます。

1.Arduino 基板をパソコンと接続します。

2.Arduino-IDE を起動し、画面の「ツール」メニューか

ら、「マイコンボード」を選択し、パソコンに接続した

Arduino 基板を選択します。

3.次に Arduino-IDE 画面の「ツール」メニューから、

「シリアルポート」を選択し、「/dev/cu.usbmodem-」

または「/dev/tty.usbmodem-」ではじまる項目を選ん

でください。

Mac OS X の場合

Page 11: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

10

●Arduino 各部の機能

・ピン配置図

・ピンの機能

機能 説明 リザーブ 将来の拡張用に予約されているピンで使うことはできません。 IOREF Adruino UNO では Vcc に接続されています。 RESET リセットボタンに接続されています。リセットボタンの追加に使用できます。 3.3V 3.3V の電源として使用できます。 5V 5V の電源として使用できます。 GND

電源のマイナスにつながっています。 GND

Vin DC ジャックから入力された電源につながっています。 (内部でダイオードを経由しますので、電圧は少し低くなります。)

機能 1 機能 2 説明 A0

アナログ入力端子です。入出力に使用する端子は『ポート』とも呼ばれます。 センサーなどの入力など、アナログ信号を入力します。 デジタル入出力ピンとして使うこともできます。

A1 A2 A3 A4 SCL

I2C(Wire)通信を行う時に使用します。 A5 SDA 機能 1 機能 2 説明 SCL (A4)

A4、A5 はここにもつながっています。 SDA (A5) AREF AD 変換器の基準電圧用の端子です。使用するためには特別な命令や配線が必要です。 GND 電源マイナスにつながっています。 13

デジタル入出力端子として使用します。 機能 2 で『PWM』機能が割り当てられている端子は、『PWM 制御』ができる端子です。 PWM 制御については 34 ページ『アナログ入出力』の『analogWrite』で説明します。

12 11 PWM 10 PWM 9 PWM 8 7 6 PWM 5 PWM 4 3 PWM 2 1 TX

USB 経由でパソコンと通信する時に使用します。 0 RX

Arduino UNO(R3)の場合

※Arduino UNO(R3)以外では

ピン数、機能が異なる場合

があります。

Page 12: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

11

マイコンのプログラミングをするためには、LED などがどのようにつながっているかを知っておく必要があ

ります。

ここでは、PICA Tower の回路がどのような構成になっていて、LED を正しく光らせるにはどのようにすれば

よいかを説明します。

●PICA Tower の回路

PICA Tower は、3 段に重なった LED 部分と、マイコンを搭載した部分が分離できるようになっています。

Arduino を使用する場合、LED 部とマイコン部を分離し、マイコン部のかわりに Arduino を取り付けます。

下図は PICA Tower の LED 部とマイコン部の回路図です。

LED 部の各端子名に記載されている( )内の数字等は、Arduino に接続した場合に対応する端子です。

●LED が点灯するためには

左の図は LED 部の回路から LED の回路を 1 つだけ抜き出したものです。

の記号が LED で、この図の上側の端子を『アノード(A と表します)』、下側の端

子を『カソード(K と表します)』といいます。

・電流が流れる方向

LED は電流を流すことで点灯するのですが、電流はアノードからカソードに向かって流れ、その逆には流

れません。ですから、LED を点灯させるためには、電流がアノードからカソードに流れるような回路にし

なければなりません。

2.PICA Tower の回路について

LED 部の回路図 マイコン部の回路図

Page 13: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

12

・LED に加える電圧

電子回路に電流を流すためには電圧を加えなければなりません。電子回路の電流の流れは、よく水の流れ

に例えられます。水は水圧の高い方から低い方へ流れます。これと同じように、電流も電圧の高い方から

低い方に流れますので、LED のアノードからカソードに電流が流れるようにアノードとカソードの間にア

ノードの方の電圧が高くなるように電圧を加える必要があります。

・順方向電流の調整

LED を光らせるためには電流を流さなくてはならないことは説明しましたが、LED には流すことのできる電

流の上限が決められています。それ以上の電流を流すと、LED が壊れたり、寿命がとても短くなったりし

ます。PICA Tower の回路を見ると、LED のアノード側に がつながっています。この部品

は『抵抗』で、電流が流れる量を調整する役割があります。

・実際の回路

では、PICA Tower の LED とマイコン部分の回路はどうなっているのでしょう。

Aduino の 2 番ピンだけのつながりを見てみると、抵抗→LED を通って 11 番ピンへつながっています。

LED のアノードの電圧を高く、カソードを低くすると点灯しますので、

この LED を点灯させるためには、Arduino の 2 番ピンの電圧を高く、

11 番ピンの電圧を低くなるようにプログラムを作ればよいわけです。

アノード(A) カソード(K)

電流の流れ

アノード(A) カソード(K)

電圧を加える

電圧(高) 電圧(低)

逆方向には流れない

Page 14: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

13

●Arduino のポート

Arduino の各ピンの電圧を高くしたり低くしたりするとはどういうことでしょう。

出力に設定したポートは、プログラムにより『電圧がある状態』や『電圧がない状態』に設定することがで

きます。

『電圧がある状態』とは、ポートから電源のプラスと同じ電圧を出力することで『HIGH(ハイ)』、または

『H』や『1』と表します。

『電圧がない状態』とは、ポートから電源のマイナスと同じ電圧を出力することで『LOW(ロー)』、または

『L』や『0』と表します。

Arduino の場合、『HIGH』に設定したポートは『5V』に、『LOW』に設定したポートは『0V』になります。

先ほどの PICA Tower の回路の場合、2 番ピンを『HIGH』に、11 番ピンを『LOW』にすると、LED のアノー

ド側の電圧が高くなり、カソード側の電圧が低くなるため、LED に順方向電流が流れ点灯するのです。

では、LED を消灯するためにはどうすればよいのでしょう。

LED のアノードとカソードの電圧を同じにするか、カソードの方をアノードより高い電圧にすればよいの

で、

・2 番ピン、11 番ピンの両方を『LOW』

・2 番ピン、11 番ピンの両方を『HIGH』

・2 番ピンを『LOW』、11 番ピンを『HIGH』 のいずれかにすれば LED は消灯します。

PICA Tower の LED は全て抵抗とつながっています。それぞれ接続先のポートが違うだけです。

縦の同じ位置にある LED のアノードはそれぞれ 2 番ピン~10 番ピンにつながっています。

また、同じ段にある LED のカソードは 1 段目が 11 番ピン、2 段目のカソードが 12 番ピン、3 段目のカソー

ドが 13 番ピンにつながっています。

例えば、2 段目の 5 番の LED を点灯させるためには、5 番ピンを『HIGH』、12 番ピンを『LOW』にすれば

OK です。

また、2 番ピン~10 番ピンを全て『HIGH』、11 番ピンを『LOW』にして 12 番ピンと 13 番ピンを『HIGH』に

『HIGH』

『LOW』

『LOW』

『LOW』

『LOW』

『HIGH』

電圧が同じ

なので流れ

ない

『HIGH』

『HIGH』

逆向きは 流れない

電圧が同じ

なので流れ

ない

Page 15: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

14

すれば、1 段目の LED を全て点灯させることができますし、この状態で 11 番ピンを『HIGH』、12 番ピンを

『LOW』、13 番ピンを『HIGH』にすると 2 段目だけが点灯、さらに 11 番ピンと 12 番ピンを『HIGH』、13 番

ピンを『LOW』にすると 3 段目だけが光りますので、この 11 番ピン~13 番ピンのポートの状態の切り替えを

順番に行うようにプログラムすると、LED が流れるように点灯させることができるのです。

各 LED のアノード側とカソード側の対応は下表のとおりです。

例えば『6 番ピン』を『HIGH』、『12 番ピン』を『LOW』にすると、左図の『2

段目のオ』に対応する LED が点灯します。

アノード側

2 番 ピン

3 番 ピン

4 番 ピン

5 番 ピン

6 番 ピン

7 番 ピン

8 番 ピン

9 番 ピン

10 番 ピン

11番

1 段目 ア

1 段目

イ 1 段目

ウ 1 段目

エ 1 段目

オ 1 段目

カ 1 段目

キ 1 段目

ク 1 段目

12番

2 段目 ア

2 段目

イ 2 段目

ウ 2 段目

エ 2 段目

オ 2 段目

カ 2 段目

キ 2 段目

ク 2 段目

13番

3 段目 ア

3 段目

イ 3 段目

ウ 3 段目

エ 3 段目

オ 3 段目

カ 3 段目

キ 3 段目

ク 3 段目

上の図のように 1 段目だけを⾒てみましょう。 1 段目の LED のカソードは全て 11 番ピンにつながっています。 例えば、2 番ピンと 6 番ピンを『HIGH』に、11 番ピンを『LOW』にすると、1 段目の 2番と 6 番の LED が点灯する。

HIGH

HIGH

LOW

Page 16: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

15

ここに書いたものが全てではありませんが、Arduino のプログラムでよく使う文法や関数をまとめていま

す。Arduino-IDE のその他の関数や詳細については書籍などで学習を行ってください。

Arduino のプログラムは、次の例のように書きます。

●文法の基本

・コメント

/*~*/で囲まれた部分、及び//から行末までは『コメント』になります。

コメントはプログラムとは直接関係がなく、その内容を補足説明などする場合に記入する文章で、日本

語で書くことも可能です。

コメント部分はプログラム実行時には空白として扱われますので、その内容は無視されます。

ちなみに、改行や TAB で挿入した部分も空白として扱われ、プログラム実行時は無視されます。ただ

し、全角の空白をコメント行以外に書いてしまうとエラーになるので注意してください。

/*~*/ で書いたコメントは /* と */ で囲まれた部分が全てコメントと認識されます。これは複

数行にまたがって記入されていても OK です。

// で書いたコメントは、 // から行末までがコメントとして認識されます。

・文

a = 4; のように書かれた部分は『文』で、途中に (セミコロン)が付けられていますが、これは『そ

の命文はここまでですよ』ということを表しています。

例えば

a = 4

b = c+d;

と、上の行末に;を付け忘れた場合、プログラムは

a = 4 b = c+d;

と認識され、エラーになってしまいます。

これもよくあるミスです。また (ダブルコロン)と間違えやすいので注意しましょう。

・ブロック

{ } (波カッコ)で囲まれた部分を『ブロック』といいます。ブロックは文をまとめるために使用

3.Arduino 言語の基礎

/*Arduino のプログラム 書き方の例です*/ { a = 4; //a に 4 を代入 b = c+d; //c と d を足した結果を b に代入 e = g; //e に g を代入 }

/*~*/ //

Page 17: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

16

し、関数などの処理内容の手順を列記する時に使用します。プログラム中に『始まりの{ 』があれば、

それに対応する『終わりの }』が無くてはなりません。時々{ }の数が合わずにエラーになってしまう

ことがありますので注意しましょう。

●定数と変数

Arduino 言語であつかうデータは大きく『定数』と『変数』の 2 種類に分けられます。

例えば、 a = 5; a = 10; と書かれている場合、『a』は場合によって 5 や 10 になるので『変数』。

5 や 10 は変わらないので『定数』です。

定数は 10 進数のほか、2 進数や 16 進数で書かれることがあります。定数を書いた時、それが何進数かを表

すために、次のような書き方をします。

基数 書き方 例

10 進数 そのまま表記 56

2 進数 最初に『B』を付ける B00111000

16 進数 最初に『0x』を付ける 0x38

あまり使用しませんが、8 進数で書くこともできます。 8 進数・・・070 最初に『0』を付ける。 しかし、10 進数を書くつもりで不用意に最初に 0 を付けてしまい、それ

が元でエラーになってしまった場合など、エラーの原因が見つけにくく

なりますので普段は使わないほうがよいでしょう。

●データ型

変数は、その変数が表す数値の範囲によって『データ型』を選ぶ必要があります。

変数の値の範囲を超えた計算を行うと正しい計算結果が得られない場合があるなど、注意が必要です。

データ型と値の範囲は次のとおりです。

変数を使うときは、あらかじめそのプログラムの中で、『これは変数ですよ!』と宣言します。

変数宣言の書き方は『変数のデータ型』と『変数』、その変数の『初期値』を書く場合などいろいろあり、下

記はその一例です。

データ型 ビット数 値の範囲 データ型 ビット数 値の範囲

boolean 1 true

または fales long 32

-2147483648 ~ 2147483647

char 8 -128 ~ 127 unsigned long 32 0 ~ 4294967295

byte 8 0 ~ 255 float 32 -3.4×1038 ~ 3.4×1038

int 16 -32768 ~ 32767

double 64 0 ~ 1.79×10308

unsigned int 16 0 ~ 65535

char a; //a は char 型のデータ範囲を取り扱う変数だと宣言 int b,c; //『,』で区切って続けて書いても OK。b も c も int 型の変数。 int d=10; //初期値を書いても OK。d は int 型で、初期値に 10 が代入される。

Page 18: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

17

● 演算 定数、変数の足し算や引き算などの計算や、それぞれの比較などを行う時に『演算子』を使用します。

・代入

代入演算子は『=』の右側の項の内容を左側の項に書き込みます

演算子 使用例 意味

=

a = 10; a に 10 を代入するので、a は 10 になります b = 1+2; b に 1+2 の結果を代入するので、b は 3 になります

a = b; a に b の値を代入します

『=』の左右が入れ替わると意味が変わってしまいますので、注意しましょう。

また、次のように書くとエラーになります。これは定数はその値しか取り得ないので、定数に他の値を代

入することができないためです。

・算術演算子

加減乗除などの計算をする演算子です。

演算子の種類と機能、使い方例は下記のとおりです。

演算子 使用例 意味 + a = 1+2 足し算をします。1+2 の結果を a に代入するので、a は 3 になります。 - b = 3-1 引き算をします。3-1 の結果を b に代入するので、b は 2 になります。 * c = 2*2 掛け算をします。2×2 の結果を c に代入するので、c は 4 になります。 / d = 8/4 割り算をします。8÷4 の結果を d に代入するので、d は 2 になります。

% e = 7%2 モジュロ算という計算をします。モジュロ算は割り算をした時の『余

り』を求める計算です。使用例の場合 7÷2 の余りを e に代入するので、

e は 1 になります。

算術演算子は定数どうしだけでなく、定数と変数、変数どうしなどの計算もできます。

a = 10; //a は 10 になります b = 5; //b は 5 になります a = b; //a に b を代入するので、a は b と同じく 5 になります

a = 10; //a は 10 になります b = 5; //b は 5 になります b = a; //b に a を代入するので、b は a と同じく 10 になります

10 = a; //10 は定数なので a は代入できない。エラーになる

a = 1+2; //a は 3 になります。 b = a*2; //b は 3×2 で 6 になります。 c = b-a; //b は 6、a は 3 なので、c は 6-3 で 3 になります。

int 型の変数 d に次の計算をすると、d の値はどうなるでしょう?

d = 10/4

この場合、d は『2』になります。なぜなら int 型の値の範囲は『-32768 ~ 32767 の整数』だから

です。

小数点以下を含んだデータを取り扱うには、データ型を float にしましょう。

Page 19: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

18

・インクリメント、デクリメント

インクリメントは『1 を足す』こと、デクリメントは『1 を引く』ことです。

演算子 使用例 意味 ++ ++a a の値に 1 を足して、その値を a に書き込みます。 -- --b b の値から 1 を引いて、その値を b に書き込みます。

例えば、

インクリメント、デクリメントは『a++』『b--』のように変数の後ろに書くこともできます。しかし、この

場合、前に書いた時と計算をするタイミングが変わります。

・比較演算子

2 つの定数や変数の関係を調べるための演算子です。

調べた結果、その関係が正しければ真、間違っていれば偽といいます。

真は『1』、偽は『0』で表すこともあります。

演算子 使用例 意味 > a > b a が b より大きければ真、小さければ偽になります。 >= a >= b a が b と同じか大きければ真、小さければ偽になります。 < a < b b が a より大きければ真、小さければ偽になります。 <= a <= b b が a と同じか大きければ真、小さければ偽になります。 == a == b a と b が等しければ真、異なれば偽になります。 != a != b a と b が異なれば真、等しければ偽になります。

|| (a>b) || (c<d) 『||』の左右の関係式で、どちらか片方でも真ならば真。どちら

も偽ならば偽になります。例では a>b と c<d のどちらか一方が真

であれば真になります。

&& (a>b) && (c<d) 『&&』の左右の関係式で、どちらも真ならば真。片方でも偽、ま

たは両方とも偽ならば偽になります。例では a>b と c<d の両方が

真の時だけ真になります。

! !(a>b) 『!』の後に書かれた関係式が真ならば偽、偽ならば真になりま

す。つまり、関係式の真偽の逆になります。例では a>b が真なら

ば偽に、偽ならば真になります。

では、次の式の場合はどうなるでしょうか。

上の例のように、式の中に( )がある場合は、( )の中を先に計算します。

この比較演算子は、あとで説明する『制御文』の『繰り返し』や『条件分岐』でよく使用されます。

a = 10; //a は 10 になります。 b = 5; //b は 5 になります。 c = ++a; //a は 1 を足した 11 になり、それを c に代入するので C も 11 になります。 d = --b; // b は 1 を引いた 4 になり、それを d に代入するので d も 4 になります。

a = 10; //a は 10 になります。 b = 5; //b は 5 になります。 c = a++; //先に c に a を代入してから a をインクリメントする。

//c は 10 になり、a は 11 になる。 d = b--; //先に d に b を代入してから b をデクリメントする。

//d は 5 になり、b は 4 になる。

a = 10; //a は 10 b = 5; //b は 5 c = 3; //c は 3 d = 7; //d は 7 e = (a>b); //a は 10、b は 5 なので a>b は真。真は『1』なので、e は 1 になる。 f = (b==c); //b と c は等しくないので b==c は偽。偽は『0』なので、f は 0 になる。 g = ((a>b) && (c<d)) //a は 10、b は 5 なので a>b は真。c は 3、d は 7 なので c<d も真。 //2 つの関係式が両方ともに真なので(a>b) && (c<d)は真。g は『1』になる。

Page 20: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

19

・論理演算子

2 つの定数や変数を論理演算する時に使う演算子です。

演算子 使用例 意味 & a & b a と b を AND で論理演算した値になる。AND は『論理積』とも言う。 | a | b a と b を OR で論理演算した値になる。OR は『論理和』とも言う。 ^ a ^ b a と b を XOR で論理演算した値になる。XOR は『排他的論理和』とも言う。 ~ ~a a の各ビットを反転(NOT)した値になる。

ビットごとの操作はその値を 2 進数に変換して考えるとわかりやすいです。

例えば a と b に入る値を 16 進数で書いてみました。

これを 2 進数で考えてみましょう。

それぞれの変数の値は 2 進数で表すと

a = 0x56 = 0b01010110

b = 0x4A = 0b01001010

となります。

まず 2 つの値を上下に並べて書いてみます。

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 操作内容

a 0 1 0 1 0 1 1 0 b 0 1 0 0 1 0 1 0

a & b (AND)

0 1 0 0 0 0 1 0 各ビットを比較し、両方とも『1』の

ときだけ『1』。その他の場合は

『0』になる。

a | b (OR)

0 1 0 1 1 1 1 0 各ビットを比較し、少なくとも片方が

『1』であれば『1』。両方とも『0』なら『0』になる。

a ^ b (XOR)

0 0 0 1 1 1 0 0 各ビットを比較し、それぞれのビット

の値が異なるときは『1』。 同じ値の場合は『0』になる。

~ a (NOT)

1 0 1 0 1 0 0 1 各ビットの値が『1』なら『0』、

『0』なら『1』になる。

2 進数で考えるととてもわかりやすくなりましたね。

a = 0x56; //a を 2 進数で表すと 0b01010110 b = 0x4A; //b を 2 進数で表すと 0b01001010 c = (a&b); //c は 0x42 になる d = (a|b); //d は 0x5E になる e = (a^b); //e は 0x1C になる。 f = ~a //f は 0xA9 になる。

AND、OR、XOR はどのようなときに使うのでしょう? ・AND 任意のビットを取り出すと

きに使います。 例) a= 01101100 AND 11110000 01100000

取り出したいビットを

『1』そうでないビッ

トを『0』にすると

『1』の部分だけその

まま取り出せる。

・OR 任意のビットを『1』にする

ときに使います。 例) a= 01101101 OR 00111100 01111101

『1』にしたいビットを

『1』そうでないビットを

『0』にすると『1』の部

分は『1』になる。『0』の

部分はそのまま。

・XOR 任意のビットを反転にする

ときに使います。 例) a= 01101101 XOR 00001111 01100010

反転したいビットを

『1』そうでないビット

を『0』にすると『1』の

部分は反転する。『0』の

部分はそのまま。

Page 21: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

20

・シフト演算子

定数や変数の値を指定されたビット数分、左または右にずらす処理をする演算子です。

次のような場合では

この場合も 2 進数で考えましょう。

まず、左シフトの場合は、

次に右シフトの場合は、

・変数計算後に同じ変数に代入する演算子(複合演算子)

例えば a という変数に 10 を足し、その結果を変数 a に代入する式は、

となります。

このような場合に便利な書き方があります。

上記の場合

と書くこともできます。

演算子 使用例 同じ処理の式 説明 += a+=b a=(a+b) a に b を足して、その結果を a に代入する。 -= a-=b a=(a-b) a から b を引いて、その結果を a に代入する。 *= a*=b a=(a*b) a と b をかけて、その結果を a に代入する。 /= a/=b a=(a/b) a を b で割って、その結果を a に代入する。 %= a%=b a=(a%b) a を b で割った余りを a に代入する。 &= a&=b a=(a&b) a と b を AND し、その結果を a に代入する。 |= a|=b a=(a|b) a と b を OR し、その結果を a に代入する。 ^= a^=b a=(a^b) a と b を XOR し、その結果を a に代入する。

演算子 使用例 意味 << a << b a を左に b ビットシフトした値になる。 >> a >> b a を右に b ビットシフトした値になる。

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 操作内容

a 0 1 0 1 0 1 1 0

左シフト 0 1 0 1 1 0 0 0 今回の例では 2 ビット左にずらす。 新たに右側に追加される値は『0』。

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 操作内容

a 0 1 0 1 0 1 1 0

右シフト 0 0 0 1 0 1 0 1

今回の例では 2 ビット右にずらす。 新たに左側に追加される値はその値

のデータ型と最上位ビットの値によ

り変わります。

a = 0x56; // 2 進数で表すと 0b01010110 b = 2; //ずらすビット数は 2 c = (a<<b); //c は 0x58 になる d = (a>>b); //d は 0x15 になる

新たに追加

新たに追加 ※データ型がマイナスを扱える範囲の場合で、最上位ビットが『1』の時、

新たに追加される値は『1』。

a +=10;

a = (a+10);

Page 22: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

21

<<= a<<=b a=(a<<b) a を b ビット分左にシフトして、その結果を a に

代入する。

>>= a>>=b a=(a>>b) a を b ビット分右にシフトして、その結果を a に

代入する。

・演算の順番

算数の計算をする時、同じ式の中にいくつも加減乗除の計算がある場合、足し算や引き算よりも掛け算や

割り算を先に、また( )があればその中を先に計算するという決まりがありますね。

それと同じように、定数や変数の演算にも優先順位が決まっています。

優先順位 演算子

高い 低い

( )

! ~ ++ --

* / %

+ -

<< >>

< <= > >=

== !=

&

^

|

&&

||

= += -= *= /= %= &= ^= |= <<= >>=

,

Page 23: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

22

● 制 御 文

定数や変数の比較をし、その真偽によってプログラムで実行する処理の流れを変えたり、同じ処理を繰り返

し行うなどの制御ができます。

・if 制御文

if を使った制御文は、比較した結果により処理の流れを変える時に使用します。

次の 3 通りの使い方があります。if 文は、その処理の中に if 文を記入する『多段 if 文』を作ることもで

きます。

使い方 説明 使用例 フローチャート

if(条件) {真の場合の処理}

(条件)が真ならば、

{真の場合の処理}を行う。

if(a>=5){ b=10; C=b+2; }

if(条件) {真の場合の処理} else {偽の場合の処理}

(条件)が真ならば、

{真の場合の処理}を行い、そうでなかっ

たら{偽の場合の処

理}を行う。

if(a>=5){ b=10; C=b+2; } else{ b=5; c=b-2; }

if(条件 1) {処理 1} else if(条件 2) {処理 2} else {処理 3}

(条件 1)が真ならば

{処理 1}を行う。 (条件 1)がそうでは

なかったら(条件 2)を調べ、真なら{処理

2}そうでなかったら

{処理 3}を行う。

if(a>=5){ b=10; C=b+2; } else if(a<5){ b=5; c=b-2; } else{ b=1 }

間違えやすいポイント

制御文を書く時に間違えやすいポイントがあります。

・条件を書くときに使う演算子に注意!

a==0 と書かなくてはならないところを a=0 と書いてしまうと a に 0 を代入するという文になってしまい、期待した通

りの処理をされなくなります。条件判断ではその値が 0 の時だけ『偽』、それ以外は全て『真』と判断します。

・『;』を付けるとそこで終わり!

制御文の文字(if や else など)の後には『;』は必要ありません。{ }で囲った処理内の文の後には必ず必要ですが、

if(a==1); {b=0;} と書くと、if 文の処理が {b=0;} の前で終わってしまい、{b=0;} は if の文として実行されませ

ん。if(a==1) {b=0;}; else{b=1;} と書くと、if(a==1) {b=0};で if 文の処理が終わってしまうことになり、その

後の else に対応する if がなくなってしまうことになり、エラーになってしまいます。

『;』は『そこでその文の処理が終わるマーク』とおぼえておくとよいでしょう。

1

2

Page 24: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

23

・switch 制御文

条件の内容により分岐先をいくつも変えるような場合に使用するのが switch 文です。

使い方 説明 使用例

switch(条件) { case 値 1: 値 1 の場合の処理; break; case 値 2: 値 2 の場合の処理; break; case 値 3: 値 3 の場合の処理; break; ・ ・ default: 条件結果がどれにも当て

はまらない場合の処理; }

(条件)の内容が値 1 に等しい場合は、

値 1 の場合の処理を行う。 (条件)の内容が値 2 に等しい場合は、

値 2 の場合の処理を行う。 (条件)の内容が値 3 に等しい場合は、

値 3 の場合の処理を行う。 ・ ・ ・ (条件)の内容が値のどれにも当てはま

らない場合には『default』に書いた処

理を行う。

int a; int b; switch(a) { case 1: //a が 1 の時 b=10; break; case 3: //a が 3 の時 b=20; break; case 4: //a が 4 の時 b=40; break; default: //a がそれ以外の時 b=0; }

フローチャート

switch(条件) { case 値 1: case 値 3: 値 1・3 の場合の処理; break; case 値 2: 値 2 の場合の処理; break; }

条件判断の結果の値が異なる場合でも同じ処理をさせたいときには、

左記のように一つの処理に複数の『case 値:』を書くこともできま

す。

間違えやすいポイント

・ case 値: 文の後ろは『;(セミコロン)』ではなく『:(ダブルコロン)』です。 ・ case 値: のあとの処理文の後には break; が必要!

break; が無いと、条件判断に戻らず、次の行の処理を行うことになりますので、上の例で case 1: に対応する break; が無かったとすると、case 1 の処理後、続けて case 2 の処理をしてしま

います。 ・ case 値: の『値』には変数は使用できません! 定数、または定数の計算式のみ使用できます。

Page 25: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

24

・for 制御文

for を使うと、同じ処理を回数を数えながら繰り返すことができます。

for 文は数を数えながら繰り返すだけではなく、条件が成立するならば繰り返すという使い方もできま

す。

繰り返す処理の途中に if 文と break; を入れると、その if 条件を満たした場合、繰り返すループから抜

けることができます。

使い方 説明 使用例 フローチャート

for(変数の初期値;条件;増減処理) { 繰り返す処理; }

変数の初期値を設定

し、その変数が条件の

真偽を判断する。 条件が真の場合は『繰

り返す処理』を実行し

た後、変数の増減を行

い再度条件判断を行

う。 変数が条件判断が真で

ある限り『繰り返す処

理』を行い、条件判断

が偽になると繰り返し

から抜ける。

int a; int b=10; for(a=0;a<=5;++a) { --b; }

使い方 説明 使用例

for(変数の初期値;条件;変数を変化させる処理) { 繰り返す処理; }

前述の例の『変数の増減』が『変数の変化

処理』に変わった書き方。 処理は同じで『条件』が真である限り『繰

り返す処理』を実行する。 for の後の( )内の『変数の初期化』と

『変数を変化させる処理』は『,』で区切

ることでいくつも書くことができる。

int a,b,; int c=0x01; for(a=0,b=10;a<=b;++a,b-=2) { C<<=1; }

使い方 説明 使用例 フローチャート

for(変数の初期値;条件;増減処理) { 繰り返す処理①; if(中断条件) break; 繰り返す処理②; }

for 文の条件が真の場

合は『繰り返す処理

①』を実行した後、

『中断条件』判断を行

い、真なら繰り返し処

理を即座に中断しま

す。 『中断条件』判断が偽

なら、繰り返す処理②

を実行し、増減処理を

行った後、for 文の条

件判断を行います。

int a; int b=c=10; for(a=0;a<=10;a++) { --b; if(a==5) break; C-=2; }

Page 26: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

25

繰り返す処理の途中に if 文と continue; を入れると、その if 条件を満たした場合、continue 以降の処

理を中断し、変数増減処理に飛ぶことができます。

・while 制御文

while 制御文は、条件が真である限りならば処理を繰り返し実行します。

前述の for 文で条件が成立する限り繰り返す書き方がありましたが動作はそれと同じです。

for 文ではその後の( )内に、条件の他に変数の初期設定と変化処理を書きましたが、while 文では

while 文の前に変数の初期設定を、{ }でくくられた繰り返す処理の中に変数の変化処理を書きます。

使い方 説明 使用例 フローチャート

for(変数の初期値;条件;増減処理) { 繰り返す処理①; if(中断条件) continue; 繰り返す処理②; }

for 文の条件が真の場

合は『繰り返す処理

①』を実行した後、

『中断条件』判断を行

い、真ならそれ以降の

『繰り返す②』は実行

せずに変数の増減処理

に移行し、 for 文の

条件判断を続行しま

す。 『中断条件』判断が偽

なら、繰り返す処理②

を実行し、増減処理を

行った後、for 文の条

件判断を行います。

int a; int b=c=10; for(a=0;a<=10;++a) { --b; if(a==5) continue; C-=2; }

使い方 説明 使用例 フローチャート

変数の初期設定; while(条件) { 繰り返す処理(変数変化処

理を含む); }

まず変数の初期設定。 条件が真の場合は『繰

り返す処理』を実行。 偽なら繰り返し処理か

ら抜ける。 条件判断に使う変数の

値の変化は『繰り返す

処理』の中に含める。

int a=0; int b=10; while(a<=10) { b-=2; ++a; }

Page 27: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

26

while 文では条件判断をした後に繰り返す処理を実行しますが、do-while 文を使用すると、最初に処理を

実行した後、条件判断を行う事ができます。

while 文でも for 文の時と同じように break;や continue;を使用することができます。

使い方 説明 使用例 フローチャート

変数の初期設定; do { 繰り返す処理(変数変化処

理を含む); } while(条件);

まず変数の初期設定。 最初に『繰り返す処

理』を実行。 その後に条件判断を行

い、真なら『繰り返す

処理』にもどり、偽な

らこの繰り返しから抜

ける。

int a=0; int b=10; do { b-=2; ++a; } while(a<=10);

使い方 説明 使用例 フローチャート

変数の初期設定; while(条件) { 繰り返す処理①; if(中断条件) break; 繰り返す処理②; 変数変化処理; }

while 文の条件が真の

場合は『繰り返す処理

①』を実行した後、

『中断条件』判断を行

い、真なら繰り返し処

理を即座に中断しま

す。 『中断条件』判断が偽

なら、繰り返す処理②

を実行し、変数変化処

理を行った後、while文の条件判断を行いま

す。

int a=10; int b=c=0; while(a>=10) { ++b; if(a==0) break; C+=2; a--; }

変数の初期設定; while(条件) { 繰り返す処理①; 変数変化処理; if(中断条件) continue; 繰り返す処理②; }

while 文の条件が真の

場合は『繰り返す処理

①』を実行した後、

『中断条件』判断を行

い、真ならそれ以降の

『繰り返す②』は実行

せずに変数の変数変化

処理に移行し、 while文の条件判断を続行し

ます。 『中断条件』判断が偽

なら、繰り返す処理②

を実行し、変数変化処

理を行った後、while文の条件判断を行いま

す。

int a=10; int b=c=0; while(a>=10) { ++b; a--; if(a==0) continue; C+=2; }

Page 28: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

27

do-while 文でも break;や continue;を使用することができます。

使い方 説明 使用例 フローチャート

変数の初期設定; do { 繰り返す処理①; if(中断条件) break; 繰り返す処理②; 変数変化処理; } while(条件);

まず変数の初期設定。 最初に『繰り返す処理

①』を実行した後、

『中断条件』判断を行

い、真なら繰り返し処

理を即座に中断しま

す。 『中断条件』判断が偽

なら、繰り返す処理②

を実行し、変数変化処

理を行った後、while文の条件判断を行いま

す。 while 文の条件が真な

ら『繰り返す処理①』

にもどり、偽ならこの

ループから抜けます。

int a=10; int b=c=0; do { ++b; if(a==0) break; C+=2; a--; } while(a>=10);

変数の初期設定; do { 繰り返す処理①; 変数変化処理; if(中断条件) continue; 繰り返す処理②; } while(条件);

まず変数の初期設定。 最初に『繰り返す処理

①』を実行した後、

『中断条件』判断を行

い、真なら『繰り返し

処理②』を行わずに

while 文の条件判断を

行います。 『中断条件』判断が偽

なら、『繰り返す処理

②』を実行し、変数変

化処理を行った後、

while 文の条件判断を

行います。 while 文の条件が真な

ら『繰り返す処理①』

にもどり、偽ならこの

ループから抜けます。

int a=10; int b=c=0; do { ++b; a--; if(a==0) continue; C+=2; } while(a>=10);

間違えやすいポイント ・ do-while 文で、do の後に( )はありません。 ・ do-while 文で、while(条件)の後には『;』が必要です。 ・ continue を使った文では、変数変化処理を記述する場所によって『無限ループ』に陥ってしまいます。

例えば、continue;の後に変数変化処理を書くと、中断条件により変数変化処理を行わずに while(条件)の判断になるために条件変数が変化せず、いつまでも『繰り返し処理』を繰り返す事になります。

Page 29: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

28

while 文を使用し、その処理をいつまでも繰り返す『無限ループ』を作ることもできます。

無限ループの繰り返し処理の中に break;文を書くことで、無限ループから抜ける事もできます。

for 文を使用して無限ループを作ることもできます。もちろん break;も使用することができます。

使い方 説明 使用例 フローチャート

while(1) { 繰り返す処理; }

条件が『1』なので常

に真となるため、『繰

り返す処理』をいつま

でも繰り返す。

int a=0; while(1) { ++a; }

使い方 説明 使用例 フローチャート

while(1) { 繰り返す処理; if(中断条件) break; }

条件が『1』なので常

に真となるため、『繰

り返す処理』実行。 『中断条件』判断が偽

なら、『繰り返す処

理』を繰り返し、真な

ら無限ループから抜け

ます。

int a=0; while(1) { ++a; if(a==10) break; }

使い方 説明 使用例

for(;;) { 繰り返す処理; }

for 文の変数初期値や条件文、変数の増減処理

がありませんが、【条件が『0』以外なので常に

真】となるため、『繰り返す処理』をいつまで

も繰り返す。

int a=0; for(;;) { ++a; }

for(;;) { 繰り返す処理; if(中断条件) break; }

条件が『0』以外なので常に真となるため、『繰

り返す処理』実行。 『中断条件』判断が偽なら、『繰り返す処理』

を繰り返し、真なら無限ループから抜けます。

int a=0; for(;;) { ++a; if(a==5) break; }

Page 30: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

29

● 関 数

関数とは、ある処理に対しその手順を記したものです。

・関数の書き方

関数は

このように書きます。

戻り値や引数、仮引数など難しそうな名前が並んでいます。

もっとわかりやすく、関数を図にしてみました。

左のように、上から数字を入れると下から計算結果が出てくる箱があります。

この箱は『func』という名前がついています。

この箱は中で『a+b という計算をしなさい!』という指令書が入っていまし

た。

なので a+b の計算がされ、その答えが『c』とします。a と b は整数だとする

と、答えの c も整数です。整数をあつかうデータの型には char や int などが

ありましたね。ここでは int としましょう。

これを先ほどの関数の書き方に当てはめると

となります。戻り値はその関数の計算結果、仮引数とはその関数で使われる値の入れ物と考えるとわかり

やすいでしょう。また、関数で計算をするときには仮引数に値を入れなくてはいけませんが、仮引数に入

れる値のことを『実引数』といいます。

数学で 『���� = �+y � = 5, y = 2』 のように書きますね。この時の『����』が関数。数式中の『�, y』が仮引数。その値を決める『� = 5, y = 2』が実引数とイメージするとわかりやすいかもしれません。

関数の終わりに return を書くことで、計算結果を関数に『答えはこれですよ!』と伝えることができま

す。

関数によっては『答え』を伝えない場合があります。

例えば、左の関数『func1』の中には『a を c

に、b を d に入れなさい!』という指令書が

入っていたとすると、上から a、b を入れて処

理をした後、その値を関数に伝えなくて良い

場合には return を書く必要はありません。

戻り値の型 関数名(引数の型 仮引数名) {

処理記述; return 戻り値;

}

func

a b

c

int func(int a, int b) { int c; c=a+b; return c; }

int c,d; void func1(int a, int b) { c=a; d=b; }

a b

func1

c d

Page 31: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

30

関数に戻ってくる値がない場合、『戻り値の型』には『void』と書きます。

また、仮引数がない関数もあります。

例えば、左の関数『func2』の中には

『1+6 をして c に入れなさい!』という

指令書が入っていたとすると、上から何

も入れなくても値『7』が入った『c』が

出てくることになります。この c を関数

に伝える場合には return を書いて関数

に返します。

仮引数の値がないので( )の中には『void』と書きます。仮引数がない場合の( )内の void は省略する

ことができます。

戻り値も仮引数も無い関数もあります。

例えば、左の関数『func3』の中にはパソ

コンとの通信を制御する

『Serial.end()』という指令書が入って

います。この命令はパソコンとの通信を

ストップする手順が書かれているだけ

で、戻り値も仮引数もありません。

戻り値も仮引数の値もないので、戻り値の型にも( )の中にも『void』と書きます。仮引数がない場合の

( )内の void は省略することができます。

・Arduino 言語でのメインプログラムの書き方

Arduino 言語では電源を入れた時やリセットされた時に 1 度だけ実行される void setup()と、実際に実

行する void loop()の 2 つの関数を必ず書く決まりになっています。

void setup()は各ピンモードや変数の初期設定などを記入します。

void loop()は実際に実行されるプログラムの命令を記入し、Arduino の電源が ON になっている間はこの

部分を繰り返し実行します。

func2

c

int func2(void) { int c; C=1+6; return C; }

func3

void func3(void) { Serial.end() }

void setup() { //各ピンの初期設定など } void loop() { //実行するプログラム内容 }

Page 32: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

31

・関数のプロトタイプ宣言

loop 関数に他の関数を書き加えてプログラムを書きますが、その他のプログラムをそのまま中に書くと、

とても長くなったり、とてもわかりにくいプログラムになってしまいます。

左の例では loop 関数の中に『func0』『func1』という関数が入っていま

す。この例ではそれぞれの関数はそれほど長くないのですが、実際はも

っと長くなることもあります。

また、 『func0』は 2 回書かれていますので、まとめてスッキリさせた

いですね。

上のように書くと少しスッキリします。複数回使用する関数も 1 つだけ書けば良いので見やすくなります。

しかし! この書き方はちょっと問題があります。それは、func0、func1 の関数の記述が loop 関数より下にあるの

で、loop 関数を実行した時、それぞれの関数がまだ読み込まれておらず、その時点では func0、func1 が何な

のかわからないためエラーになってしまうのです。

loop 関数の上に func0、func1 の記述をすればよいのでしょうが、関数がとても多くなった場合にはとても

大変なことになります。

そこで、loop 関数の前に『このプログラムでは次の関数を使いますよ!』と宣言をする記述をします。

void loop() { int func0 (int a,int b) { return(a+b); } void func1 (char c,char d) { d<<1; e>>1; } int func0 (int a,int b) { return(a+b); } }

void loop() { func0 (3,6); func1 (0x11,0x80); func0 (2,4); } int func0 (int a,int b) { return(a+b); } void func1 (char c,char d) { d<<1; e>>1; }

loop 関数はこの部分だけ loop 関数の外に書かれた関数を呼び出して使う

呼び出す関数はここに書かれている。

Page 33: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

32

それを『関数のプロトタイプ宣言』といいます。

関数のプロトタイプ宣言は

の形で書くことになっています。

・グローバル変数とローカル変数

関数などで一時的に値を入れておく場所を変数と呼ぶことは最初にお話しました。

では、次のようなプログラムの場合、変数はどれになるでしょう?

どちらの書き方も『a、b、c は int 型

の値を取る変数だ』と宣言していますの

で、a、b、c は変数ですね。

しかし、この 2 つは同じ変数の宣言をしているのですが、意味が異なります。

上の左側の場合のように、関数の中で変数を宣言をすると、その変数はその関数の中のみで使える変数に

なります。a、b、c はその関数のみで使える変数になり、このような変数を『ローカル変数』といいま

す。

上の右側の場合は、関数の外で変数の宣言をしています。この場合の a、b、c はメイン関数以外でも使用

することができる変数になり、このような変数を『グローバル変数』といいます。

戻り値の型 関数名(引数の型 仮引数名);

void loop(void) { int a,b,c; a=b+c; }

int a,b,c; void loop(void) { a=b+c; }

関数のプロトタイプ宣言 このプログラムで使う関数を、loop 関数の前に宣言します。

int func0 (int a,int b); void func1 (char c,char d); void loop(void) { func0 (3,6); func1 (0x11,0x80); func0 (2,4); } int func0 (int a,int b) { return(a+b); } void func1 (char c,char d) { d<<1; e>>1; }

Page 34: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

33

● デ ジ タ ル 入 出 力

Arduino のポートをデジタル入力、またはデジタル出力として使用する場合に使用する関数です。

● ア ナ ロ グ 入 出 力

Arduino のポートをアナログ入力、または PWM 出力として使用する場合に使用する関数です。

・ピンの動作を入力または出力または、プルアップ機能を利用した入力に設定します。

書き方 パラメーター

pinMode(pin, mode)

pin:設定したいピンの番号 mode:INPUT

OUTPUT INPUT_PULLUP

使用例 pinMode(9, OUTPUT); //9 番ピンが出力になります。 pinMode(13,INPUT); //13 番ピンが入力になります。 pinMode(A0, INPUT_PULLUP); //A0 番ピンがプルアップされた入力になります。

・指定したピンを、HIGH または LOW にします。HIGH は 5V、LOW は 0V(GND)になります。

書き方 パラメーター

digitalWrite(pin, value) pin:設定したいピンの番号 value:HIGH か LOW(または、1 か 0)

使用例 digitalWrite(9, HIGH); //9 番ピンが HIGH になります。 digitalWrite(2, 0); //2 番ピンが LOW になります。

・指定したピンの状態を調べます。結果は HIGH か LOW になります。

書き方 パラメーター

digitalRead(pin) pin:調べたいピンの番号

使用例 x = digitalRead(9); //x に 9 番ピンの状態が HIGH か LOW で記憶されます。 //例えば 9 番ピンが GND に接続されている場合は LOW になります。

・指定したアナログピンの状態を調べます。結果は 0 から 5V の電圧範囲を 0 から 1023 の範囲に変

換した値になります。Arduino UNO では A0~A5 がアナログピンとして利用できます。

書き方 パラメーター

analogRead(pin) pin:調べたいアナログピンの番号

使用例 x = analogRead(A0); //x に A0 番ピンの状態が 0 から 1023 の整数値で記憶されます。

・指定したピンから PWM 波を出力(アナログ出力)します。 analogWrite の前に pinMode で出力にする必要はありません。 Arduino UNO では3,5,6,9,10,11番ピンがアナログ出力ピンとして利用できます。 analogWrite を実行すると、次に同じピンで analogWrite を実行するまで PWM 波が出力されま

す。

書き方 パラメーター

analogWrite(pin, value) pin:出力に設定するピン番号 value:PWM 出力のデューティ比

(0 から 255 の範囲で設定します。)

使用例 analogWrite(3, 64); //3 番ピンからデューティ比 64 の波形を出力します。 analogWrite(3, 0); //3 番ピンからはデューティ比 0(=0V)が出力されます。 analogWrite(3, 255); //3 番ピンからはデューティ比 255(=5V)が出力されます。

Page 35: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

34

PWM 制御について

analogWrite で出力する『PWM』とはどのようなものでしょう。

PWM は『pulse width modulation』で、日本語では『パルス幅変調』といいます。

digitalWrite で出力を設定した場合、その出力信号は 5V または 0V の電圧が連続して出力されるのに対

し、analogWrite で出力を設定すると、0V と 5V が交互に繰り返す信号が出力されます。

つまり、ON と OFF を繰り返すような信号が出力

されるわけです。このような信号は、LED の明

るさを変化させたり、モーターのスピードを変

えるときなどに使用されます。

PWM 制御の重要なパラメーターに『デューティ比』があります。デューティ比は PWM 信号の 1 周期の 5V

の時間と 0V の時間の比です。

1 周期とは、出力信号が 5V になった後に 0V になり、もう一度 5V になるまでの時間です。

1 周期のうち、5V になっている時間と 0V になっている時

間が全く同じなら、デューティ比は 50%です。

1 周期のうち、5V の時間が占める割合をデューティ比とい

います。

Arduino は 1 周期を 255 個に分割し、その分割した時間

のいくつ分を 5V を出力する時間にするかで設定します。

analogWrite で value を 127 に設定するとデューティ比

が 50%になります。value を 0 にするとデューティ比は

0%で 5V の時間がなくなり、ずっと 0V が出力されたまま

に、value を 255 にするとデューティ比は 100%で 1 周期

の全てを 5V の時間が占め、ずっと 5V が出力されたままに

なります。

例えば、左図のように 3 番ピンに LED 回路が接続され PWM 信号を出力

する場合、デューティ比が高いほど LED は明るく点灯することになりま

す。

Page 36: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

35

● 時 間 関 数

プログラミングでは時間の設定や、どのくらい時間が経ったかなどを計ることがよくあります。

※1 ミリ秒=0.001 秒 1 マイクロ秒=0.001 ミリ秒=0.000001 秒

● 便 利 な 機 能

Arduino 言語でプログラムを作成するときに使うと、プログラムがわかりやすくなるようにできる便利な機

能があります。

・カッコ内で指定された時間待って、次の文の処理へ進みます。

書き方 パラメーター

delay(ms) ms:カッコ内の数値(ミリ秒)を待ちます。

delayMicroseconds(us) us:カッコ内の数値(マイクロ秒)を待ちます。

使用例 digitalWrite(9,HIGH); //9 番ピンを『HIGH』にします。 delay(500); //500 ミリ秒待ちます。 digitalWrite(9,LOW); //9 番ピンを『LOW』にします。

・Arduino がプログラムの実行を開始してから現在までの時間を計ることができます。

書き方 パラメーター

millis() ありません

micros()

使用例 x = millis() //プログラム実行から現在までの時間を『ミリ秒』で計り、x に代入。 x = micros() //プログラム実行から現在までの時間を『マイクロ秒』で計り、x に代入。

millis()は約 50 日でオーバーフローし、最初からのカウントになります。 micros()は約 70 分でオーバーフローし、最初からのカウントになります。 また、Arduino UNO では 4 マイクロ秒単位での測定となり、測定結果は必ず 4 の倍数に

なります。

・検証時(コンパイル時)に自動的に定数名を値に変換します。プログラムを見やすく、間違いを

少なくするために有効です。#を付けることを忘れないようにします。

書き方 パラメーター

#define 定数名 値 定義名:わかりやすい名前を付けましょう。 値:定義名に割り付ける値を記入します。

使用例 #define ledPin 4 digitalWirte(ledPin, HIGH); //ledPin は検証時に自動的に 4 に置き換えられます。

注 #define 文の最後に;(セミコロン)は必要ありません。

・外部に用意されているライブラリをプログラムに取り入れたいときに使います。 ライブラリは Arduino-IDE にあらかじめ用意されているものや、インターネットから入手でき

るものなどがあります。

書き方 パラメーター

#include <ライブラリ名> ライブラリ名:外部ファイルの名前を書きます。

使用例 #include <LiquidCrystal.h> //LCD 表示器のライブラリを使うことができるようになります。

注 #include 文の最後に;(セミコロン)は必要ありません。

Page 37: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

36

ライブラリとは

プログラムを書くときの、決まった手続きや、似たような手続きをまとめて専用の命令としていつ

でも使えるようにしたものを「ライブラリ」と呼んでいます。

1 回だけ動かすのであれば長いプログラムになっても特に気になりませんが、液晶ディスプレイに

文字を表示させる命令などでは、何度も何度も同じような命令を書かなくてはなりません。ここでそ

の「決まった手続き」を一つの命令にまとめたものがあれば、プログラムの作成が便利になり、間違

いも少なくなります。

Arduino には多くのライブラリがあり、あらかじめ Arduino IDE にインストールされている『公

式ライブラリ』と Arduino のユーザーが作成し公開しているライブラリがあります。

新しく使いたい部品やモジュールを動かすためのライブラリが用意されていないか、インターネッ

トなどでチェックしてみると良いでしょう。

Page 38: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

37

Arduino IDE やドライバーのインストールが完了し、LED が点灯・消灯する条件、Arduino 言語の基礎が整

いましたので、実際にプログラムの作成を行いましょう。

● A r du i n o と PIC A To w e r の L E D 部 の 接 続

まず、PICA Tower の LED 部と電池ボックスが取り付けられている

MCU 部を分離します。LED 部と MCU 部はコネクターで接続されていま

すので、引っ張って外すことができます。

Arduino のコネクターに PICA Tower の LED 部を接続します。PICA

Tower LED 部のコネクターで『A5』と印刷してある端子が、Arduino

の『A5』端子に来るように接続します。

向きをまちがえないように注意してください。

LED 部の接続ができたら、Arduino とパソコンを USB ケーブルで接続します。Arduino、および LED 部の電

源は USB ケーブルを通し、パソコンから供給されます。

● A r du i no ID E の 画 面

Aruino IDE を起動すると、下記画面が表示されます。

新規ファイル 保存

検証

開く

プログラム

作成エリア

シリアルモニタ

コンソール

ボード・COM 番号

メッセージエリア

マイコンボード

に書き込む

4.Arduino IDE でプログラミング

こちらが『A5』端子

Page 39: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

38

新規ファイル 新しいプログラム作成エリアを開きます。 開く 保存しているプログラムを開きます。 保存 作成したプログラムを保存します。 検証(コンパイル) 正しい文法でプログラムが作成されているかチェックします。

シリアルモニタ シリアルデータを表示します。

(データに何を表示させるかあらかじめプログラムに書く必要があります。)

マイコンボードに書き込む プログラムを PC に接続している Arduino 基板に書き込みます。 アップロードと表示されている場合もあります。

プログラム作成エリア プログラムを書き込むエリアです。 メッセージエリア 操作に応じてメッセージやエラーが表示されます。 コンソール メッセージやエラーの詳細が表示されます。(※)

ボード・COM 番号 Arduino-IDE で設定している、Arduino 基板の種類と COM ポート番号が表示

されます。

※ここに表示された文字や単語を検索サイトで調べることで、エラー解決に役立つことがあります。

● A r du i n o の プ ロ グ ラ ミ ン グ

Arduino を動かすためのプログラムを作成してみましょう。

Arduino のプログラムは、電源を入れた時やリセットされた時に 1 度だ

け実行される void setup()と、実際に実行する void loop()の 2 つの

関数を必ず書く決まりになっていましたね。

void setup()は各ピンモードや変数の初期設定などを記入。

void loop()は実際に実行されるプログラムの命令を記入し、Arduino

の電源が ON になっている間はこの部分を繰り返し実行しますので、まず

void setup()部分を考えてみましょう。

PICA Tower の LED は縦の同じ位置にある

LED のアノード側はそれぞれ 2 番ピン~10

番ピンに、カソード側は 1 段目が 11 番ピ

ン、2 段目が 12 番ピン、3 段目が 13 番ピ

ンにつながっていて、この端子の出力状態

を『HIGH』または『LOW』に設定すること

で点灯をコントロールしますので、2 番ピ

ン~13 番ピンは全てデジタル出力に設定す

る必要があります。

また、電源投入時に LED を消灯状態にして

おくため、digitalWrite で 11~13 番ピ

ンを『HIGH』に初期化しておきます。

上記のプログラムでは、pinMode 関数で、2 番ピン~13 番ピンをデジタル出力に設定しています。

使用する Arduino 端子の初期設定ができましたので、LED を点灯させるプログラムを作成しましょう。

では、14 ページの表で『1 段目のア』の LED だけ点灯するプログラムを考えてみましょう。

void setup() { //各ピンの初期設定など } void loop() { //実行するプログラム内容 }

void setup() { pinMode(2,OUTPUT); //2~13 番ピンをデジタル出力に pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT); pinMode(8,OUTPUT); pinMode(9,OUTPUT); pinMode(10,OUTPUT); pinMode(11,OUTPUT); pinMode(12,OUTPUT); pinMode(13,OUTPUT); digitalWrite(11,HIGH); //11 番ピンを HIGH に digitalWrite(12,HIGH); //12 番ピンを HIGH に digitalWrite(13,HIGH); //13 番ピンを HIGH に }

Page 40: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

39

左記のプログラムでは LED『ア』のアノー

ド側を HIGH に、カソード側を LOW にする

ことで LED『ア』を点灯させています。

● プ ロ グ ラ ム の 検 証 と A r du i n o へ の 書 き 込 み

では、前述の void setup()と void loop()を Arduino IDE のプログラム作成エリアに記入してください。

記入が終わったら、プログラムが正しく書かれている

か、『検証』ボタンをクリックしてください。

すると、メッセージエリアに結果が表示されます。

『コンパイル終了。』と表示されればプログラムは正し

く書かれています。

もし下記のようにメッセージエリアが赤く表示されたと

きは、記入したプログラムにエラーがあります。

エラー内容の詳細はコンソールに表示されますので、そ

の内容を頼りに修正してください。

『検証』が OK であれば、プログラムを Arduino に書き

込みます。

『マイコンボードに書き込む』ボタンをクリックし、メ

ッセージエリアに『マイコンボードへの書き込みが完了

しました。』と表示されれば、書き込み完了です。

1 段目『ア』の LED だけが点灯するはずです。

もしうまく書き込みができない場合は、COM ポートの設

定などを確認して下さい。

void loop() { digitalWrite(2,HIGH); //2 番ピンを HIGH に digitalWrite(11,LOW); //11 番ピンを LOW に }

Page 41: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

40

では、オリジナル点灯パターンの作成を行いましょう。

前項で、LED を 1 つだけ点灯させましたが、考え方は同じです。点灯させたい LED につながってる出力ポー

トの状態をプログラムして制御します。

5.オリジナル点灯パターンを作ろう

1 段目の LED が全て点灯(2 段目、3 段目は消灯)するプログラムを作成してください。

問題

前項のプログラムの void setup()部分の各端子の初期設定は同じですね。実際の点灯パターンを記述す

る void loop()部分を変更することになります。

各 LED のアノード側は、Arduino の 2 番~10 番ピンに接続されていましたね。(14 ページ参照)なので、2

~10 番ピンを『HIGH』に設定すれば OK です。カソード側は 11~13 番ピンに接続されていますので、こ

の端子を『LOW』にすると、それに対応した段の LED が点灯します。

今回は 1 段目だけを点灯させたいので 11 番ピンだけを『LOW』にすれば OK です。

実際に上記のプログラムを作成し、Arduino に書き込んでチェックしてください。

答え

void setup() { pinMode(2,OUTPUT); //2~13 番ピンをデジタル出力に pinMode(3,OUTPUT); pinMode(4,OUTPUT); pinMode(5,OUTPUT); pinMode(6,OUTPUT); pinMode(7,OUTPUT); pinMode(8,OUTPUT); pinMode(9,OUTPUT); pinMode(10,OUTPUT); pinMode(11,OUTPUT); pinMode(12,OUTPUT); pinMode(13,OUTPUT);

digitalWrite(11,HIGH); //11 番ピンを HIGH に digitalWrite(12,HIGH); //12 番ピンを HIGH に digitalWrite(13,HIGH); //13 番ピンを HIGH に } void loop() { digitalWrite(2,HIGH); //2 番ピンを HIGH に digitalWrite(3,HIGH); //3 番ピンを HIGH に digitalWrite(4,HIGH); //4 番ピンを HIGH に digitalWrite(5,HIGH); //5 番ピンを HIGH に digitalWrite(6,HIGH); //6 番ピンを HIGH に digitalWrite(7,HIGH); //7 番ピンを HIGH に digitalWrite(8,HIGH); //8 番ピンを HIGH に digitalWrite(9,HIGH); //9 番ピンを HIGH に digitalWrite(10,HIGH); //10 番ピンを HIGH に digitalWrite(11,LOW); //11 番ピンを LOW に

}

Page 42: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

41

● L E D を 点 滅 さ せ る

前項までのプログラムでは、LED は点灯したままです。

LED をピカピカと点滅させる方法を考えてみましょう。

点滅動作は、LED が一定時間点灯したあと、一定時間消灯。これを繰り返す動作です。

プログラムでも同様に、LED を点灯させた後にその状態を一定時間保持。その後消灯させたあと、消灯状態

を一定時間保持。これを繰り返すプログラムを作成します。

前問のプログラムを利用し、全体を 0.5 秒間隔で点滅させるプログラムを考えてみましょう。

まず、全体を点灯させるプログラムは前問のとおりです。この状態を 0.5 秒保持するプログラムは 35 ページ

の『時間関数』を使用します。

delay(500);が 0.5 秒(500 ミリ秒)

保持するプログラムです。

その後、11~13 番ピンを『HIGH』

にして全部の LED を消灯し、もう一

度 delay(500);で 0.5 秒消灯を保持

します。

Arduino プログラムの void loop()

部は電源が ON の間、ずっと繰り返し

ますので、全体の LED が 0.5 秒毎に

点滅を繰り返します。

1~3 段目の LED が全て点灯するプログラムを作成してください。

前問のプログラムのカソード側端子を全て『LOW』にすれば OK ですね。

前問のプログラムでカソード側(11~13 番ピン)の修正部分は下記のようになります。

全問で作成したプログラムを修正し、Arduino に書き込んでチェックしてください。

答え

digitalWrite(11,LOW); //11 番ピンを LOW に digitalWrite(12,LOW); //12 番ピンを LOW に digitalWrite(13,LOW); //13 番ピンを LOW に

void loop() { digitalWrite(2,HIGH); //2 番ピンを HIGH に digitalWrite(3,HIGH); //3 番ピンを HIGH に digitalWrite(4,HIGH); //4 番ピンを HIGH に digitalWrite(5,HIGH); //5 番ピンを HIGH に digitalWrite(6,HIGH); //6 番ピンを HIGH に digitalWrite(7,HIGH); //7 番ピンを HIGH に digitalWrite(8,HIGH); //8 番ピンを HIGH に digitalWrite(9,HIGH); //9 番ピンを HIGH に digitalWrite(10,HIGH); //10 番ピンを HIGH に digitalWrite(11,LOW); //11 番ピンを LOW に digitalWrite(12,LOW); //12 番ピンを LOW に digitalWrite(13,LOW); //13 番ピンを LOW に delay(500); //500 ミリ秒=0.5 秒待ちます digitalWrite(11,HIGH); //11 番ピンを HIGH に digitalWrite(12,HIGH); //12 番ピンを HIGH に digitalWrite(13,HIGH); //13 番ピンを HIGH に delay(500); //500 ミリ秒=0.5 秒待ちます

}

問題

Page 43: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

42

● L E D を 回 転 す る よ う に 点 灯 さ せ る

次は、円形に配置された LED をクルクルと回転しているように点灯させてみましょう。回転するように点灯

させるためには、14 ページの表の LED『ア』→『イ』→『ウ』→『エ』→・・・→『ク』→『ア』

→・・・・と、順に点灯する LED を切り替えていけば OK ですね。今回のプログラムでは、まん中の LED

『ケ』は消灯したままにしましょう。

まず最初に、カソード側を『LOW』に

するプログラムを書きます。

全項まではアノード側のプログラム

の後に書いていましたが、それでは

うまく回転するように点灯しない場

合があります。なぜなら、プログラ

ムは上の行から順に実行していくた

め、今回のようにアノード側の状態

を切り替える場合、全項と同じよう

にアノード側のプログラムの後に書

くと、アノード側の処理が終わった

後にカソード側の設定を行う事にな

ります。

プログラムを作成するときは、処理

の順番も考えながら行う必要があり

ます。

アノード側の処理は、LED を点灯さ

せた後、時間関数で一定時間(今回は

0.5 秒)保持した後にその LED を消灯

し、次の LED アノード側の処理を行

います。これを LED『ア』~『ク』

まで行います。

delay(500);の値を変更すると、回

転する速さを変えることができま

す。

void loop() { digitalWrite(11,LOW); //11 番ピンを LOW に digitalWrite(12,LOW); //12 番ピンを LOW に digitalWrite(13,LOW); //13 番ピンを LOW に

digitalWrite(2,HIGH); //2 番ピンを HIGH に delay(500); //500 ミリ秒=0.5 秒待ちます digitalWrite(2,LOW); //2 番ピンを LOW に(消灯) digitalWrite(3,HIGH); //3 番ピンを HIGH に delay(500); //500 ミリ秒=0.5 秒待ちます digitalWrite(3,LOW); //3 番ピンを LOW に(消灯) digitalWrite(4,HIGH); //4 番ピンを HIGH に delay(500); //500 ミリ秒=0.5 秒待ちます digitalWrite(4,LOW); //4 番ピンを LOW に(消灯) digitalWrite(5,HIGH); //5 番ピンを HIGH に delay(500); //500 ミリ秒=0.5 秒待ちます digitalWrite(5,LOW); //5 番ピンを LOW に(消灯) digitalWrite(6,HIGH); //6 番ピンを HIGH に delay(500); //500 ミリ秒=0.5 秒待ちます digitalWrite(6,LOW); //6 番ピンを LOW に(消灯) digitalWrite(7,HIGH); //7 番ピンを HIGH に delay(500); //500 ミリ秒=0.5 秒待ちます digitalWrite(7,LOW); //7 番ピンを LOW に(消灯) digitalWrite(8,HIGH); //8 番ピンを HIGH に delay(500); //500 ミリ秒=0.5 秒待ちます digitalWrite(8,LOW); //8 番ピンを LOW に(消灯) digitalWrite(9,HIGH); //9 番ピンを HIGH に delay(500); //500 ミリ秒=0.5 秒待ちます digitalWrite(9,LOW); //9 番ピンを LOW に(消灯)

}

Page 44: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

43

● 制 御 文 を 使 用 し て プ ロ グ ラ ム を 作 る

前項のプログラムを見ると同じような文が繰り返されていますが、工夫するともっと短いプログラムになり

そうです。LED は 8 個を順に点灯させて 1 周させ、それを繰り返せばよいわけですから、数をかぞえながら

繰り返す『for 文』が使用できそうです。

上記プログラムがその例です。

は、LED が 1 周する 8 回を数える変数 a を初期値 2 で設定し、a が 10 より小さ

ければ{ }で囲った部分を実行します。変数 a の初期値を 2 にしたのは、この変数を digitalWrite で設定

するアノード側のピン番号にも使用するためです。

まず、変数 a は初期値が 2 になります。2 は 10 より小さいので条件判断は『真』ですから for 文の{ }を実

行します。

digitalWrite(a,HIGH);では、変数 a が 2 なので、2 番ピンが『HIGH』になり、2 番ピンに接続された LED『ア』が点灯します。delay(500);で 0.5 秒待った後、digitalWrite(a,LOW);で変数 a の端子(2 番ピン)が『LOW』になり、LED が消灯します。

for 文の{ }内の処理が終わると、変数 a がインクリメント(+1)され、3 になります。

これを a が 9 の場合まで繰り返し、a=10 になったら for 文の処理から抜け、void loop()の最初の行に戻り、

繰り返します。

カソード側を for 文で切り替え、さらにアノード側も for 文で切り替えていく方法を考えてみましょう。

次ページのプログラムがその例で、for 文の中に for 文がある『2 重構造』になっています。

void loop() { digitalWrite(11,LOW); //11 番ピンを LOW に digitalWrite(12,LOW); //12 番ピンを LOW に digitalWrite(13,LOW); //13 番ピンを LOW に for (int a=2;a<10;++a) //1 周を数える変数を a に { digitalWrite(a,HIGH); //変数 a に対応するピンを HIGH に delay(500); //500 ミリ秒=0.5 秒待ちます digitalWrite(a,LOW); //変数 a に対応するピンを LOW に } }

for (int a=2;a<10;++a)

digitalWrite(a,HIGH); delay(500); digitalWrite(a,LOW);

上記のプログラムは縦 3 つの LED が同時に点灯しクルクルと回りますが、これを 1 段目だけの LED が 1 周

回ったら 2 段目だけが 1 周。それが終われば 3 段目だけが 1 周。この動作を繰り返すプログラムを作って

みましょう。

このプログラムは、カソード側も for 文で切り替えていくとよいでしょう。

問題

答え

Page 45: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

44

2 重の for 文は左記のような構造になっていますが、

『for 文 2』を実行する中に『for 文 1』があるので、

『for 文 1』の条件が偽となり『for 文 1』のループを

抜けたあと、『for 文 2』の条件が真で『for 文 2』のル

ープ処理を引き続き実行する場合、再度『for 文 1』の

ループが実行されることになります。

上記のプログラムは、段を制御するカソード側をセットした後にアノード側を 1 周させるように切り替

え、その 1 周が終わったら次の段に切り替えるという手順になっています。

カソード側は 3 段目の処理まで完了したら 1 段目に戻るようになっています。

void loop() { for (int b=11;b<14;++b) //段を切り替える変数を b に { digitalWrite(b,LOW); //変数 b に対応する段のカソードを LOW に for (int a=2;a<10;++a) //1 周を数える変数を a に { digitalWrite(a,HIGH); //変数 a に対応するピンを HIGH に delay(500); //500 ミリ秒=0.5 秒待ちます digitalWrite(a,LOW); //変数 a に対応するピンを LOW に } digitalWrite(b,HIGH); //変数 b に対応する段を HIGH に } }

for (変数 2;条件 2;変数変化 2) { for (変数 1;条件 1;変数変化 1) {

処理プログラム

}

}

for 文 1

for 文 2

Page 46: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

45

● 関 数 を 使 用 す る

前項までは 1 種類の点灯パターンをプログラムしましたが、順番に数種類の異なった点灯パターンを実行す

る方法を考えてみましょう。

プログラムは上の行から順番に実行していきますので、その点灯パターンの通りに順に記述していっても OK

です。

上記のプログラムは、ピカピカと全体を 5 回点滅させた後、1 つずつクルクルと点灯させるプログラムで

す。

たった 2 つの点灯パターンですが、長くてわかりづらいですね。もっと多くの点灯パターンを作る場合、も

っとわかりにくくなりそうです。

そこで、点灯パターンごとに『関数』を作って、それを呼び出して使うプログラムを考えてみましょう。

void loop() { for (int a=0;a<5;a++) //全点滅 5 回繰り返しループ { for(int b=2;b<11;b++) //2~11 番ピンを HIGH に {

digitalWrite(b,HIGH); }

digitalWrite(11,LOW); //11 番ピンを LOW に digitalWrite(12,LOW); //12 番ピンを LOW に digitalWrite(13,LOW); //13 番ピンを LOW に delay(500); //500 ミリ秒=0.5 秒待機 digitalWrite(11,HIGH); //11 番ピンを HIGH に digitalWrite(12,HIGH); //12 番ピンを HIGH に digitalWrite(13,HIGH); //13 番ピンを HIGH に delay(500); //500 ミリ秒=0.5 秒待機 }

for(int c=2;c<11;c++) //2~11 番ピンを LOW に初期化 { digitalWrite(c,LOW); }

for (int d=11;d<14;d++) //段を切り替える変数を d に { digitalWrite(d,LOW); //変数 d に対応する段のカソードを LOW に for (int e=2;e<10;e++) //1 周を数える変数を e に { digitalWrite(e,HIGH); //変数 e に対応するピンを HIGH に delay(500); //500 ミリ秒=0.5 秒待機 digitalWrite(e,LOW); //変数 e に対応するピンを LOW に } digitalWrite(d,HIGH); //変数 d に対応する段を HIGH に } }

Page 47: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

46

//関数のプロトタイプ宣言------------------------ void initial(); //初期設定 void ptn0(); //LED 全消灯(初期化) void ptn1(); //点灯パターン 1 void ptn2(); //点灯パターン 2

//-------------------------------------------- void setup() { initial(); //初期設定関数呼び出し

} void loop() { for (int x=0;x<5;x++) //パターン 1 を 5 回繰り返し { ptn1(); //点灯パターン 1 を呼び出し

} ptn0(); //LED 初期化を呼び出し ptn2(); //点灯パターン 1 を呼び出し ptn0(); // LED 初期化を呼び出し delay(500); //0.5 秒消灯

} //初期設定------------------------------------ void initial(){ for(int a=2;a<14;a++) { pinMode(a,OUTPUT); //変数 a に対応するピンをデジタル出力に

} digitalWrite(11,HIGH); //11 番ピンを HIGH に digitalWrite(12,HIGH); //12 番ピンを HIGH に digitalWrite(13,HIGH); //13 番ピンを HIGH に

} //-------------------------------------------- //全 LED 消灯(初期化)--------------------------- void ptn0(){ for(int b=2;b<11;b++) { digitalWrite(b,LOW); //変数 b に対応するピンを LOW に

} digitalWrite(11,HIGH); //11 番ピンを HIGH に digitalWrite(12,HIGH); //12 番ピンを HIGH に digitalWrite(13,HIGH); //13 番ピンを HIGH に

} //-------------------------------------------- //点灯パターン 1(全 LED 点滅)-------------------- void ptn1(){ for(int c=2;c<11;c++) { digitalWrite(c,HIGH); //変数 c に対応するピンを HIGH に

} digitalWrite(11,LOW); //11 番ピンを LOW に

Page 48: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

47

上記が点灯パターンを関数にしたプログラムです。 最初にこのプログラムで使用する関数のプロトタイプ宣言を行います。このプログラムでは initial()、ptn0()、ptn1()、ptn2()の 4 つの関数を使用しています。 Arduino のプログラムに必須の void setup()と void loop()は赤い破線で囲った部分だけです。その下に

先ほどの 4 つの関数の実行内容が記述されています。(青い破線部分) void setup()で Arduino の初期設定を記述した initial()を呼び出しています。 void loop()では、点灯パターンの関数 ptn0、ptn1、ptn2 を呼び出しています。ptn1 は for 文の中で呼び

出し、5 回繰り返しています。

このように、点灯パターンなどの定型プログラムを関数にしておくことで、プログラムがとても見やすくな

りますし、同じ関数を何度も使用する動作記述(上記例では LED の初期化)を関数にしておくと、関数の記述

を 1 度しておけば何度も呼び出して使用することができ、便利になります。

digitalWrite(12,LOW); //12 番ピンを LOW に digitalWrite(13,LOW); //13 番ピンを LOW に delay(500); //500 ミリ秒=0.5 秒待ちます digitalWrite(11,HIGH); //11 番ピンを HIGH に digitalWrite(12,HIGH); //12 番ピンを HIGH に digitalWrite(13,HIGH); //13 番ピンを HIGH に delay(500); //500 ミリ秒=0.5 秒待ちます

} //-------------------------------------------- //点灯パターン 2(LED1 周点滅 1 段→2 段→3 段)---- void ptn2(){ for (int d=11;d<14;++d) //段を切り替える変数を d に { digitalWrite(d,LOW); //変数 d に対応する段のカソードを LOW に for (int e=2;e<10;++e) //1 周を数える変数を e に { digitalWrite(e,HIGH); //変数 e に対応するピンを HIGH に delay(500); //500 ミリ秒=0.5 秒待ちます digitalWrite(e,LOW); //変数 e に対応するピンを LOW に

}

digitalWrite(d,HIGH); //変数 d に対応する段を HIGH に }

} //--------------------------------------------

Page 49: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

48

PICA Tower には周囲の明るさをキャッチする明るさセンサーが標準で搭載されています。

この明るさセンサーは『CdS(シーディーエス)』という電子部品で、CdS に当たる光が明るくなると CdS の抵

抗値が低くなり、暗くなると高くなるという性質があり、これを利用して周囲の明るさをキャッチします。

左は PICA Tower の CdS 回路部分だけを抜き出したものです。

抵抗と CdS が直列につながり、その両端が電源に、中間が Arduino

の A0 端子につながっています。

A0 端子につながっている端子の電圧は CdS の抵抗値により変化しま

す。これは、電源電圧の 4.5V が固定抵抗 RS と CdS の抵抗値の比に

より分割されるからです。このことを『分圧』といいます。

これはオームの法則で求めることができます。

例えば、CdS の抵抗値を XkΩとすると、全体の合成抵抗は(10+X)kΩ ですね。計算しやすいように kΩ はは

ずして考えましょう。

この合成抵抗に流れる電流は、電流=電圧÷抵抗ですから、

�. ����です。

厳密には Arduino にも電流が流れるのですが、その電流はこの抵抗に流れる電流に比べとても小さいため、

無視して計算することができます。

この時 CdS に加わる電圧は、電圧=電流×抵抗ですから、� �. ��+�� × X = 4.5 � �

�����となり、電源電圧を固定抵

抗と CdS の合成抵抗で割ったものに CdS の抵抗値をかけたもの、つまり CdS と合成抵抗の比になります。

例えば CdS に光があたっている時(周囲が明るい時)の CdS の抵抗値が 1kΩ だった

とすると・・・

CdS に加わる電圧=A0 端子に加わる電圧ですから

A0 端子の電圧= 4.5 � ������ ≒ 0.4

で、約 0.4V です。

また CdS に光があたっていない時(周囲が暗い時)の CdS の抵抗値が 100kΩ だった

とすると・・・

CdS に加わる電圧=A0 端子に加わる電圧ですから

A0 端子の電圧= 4.5 � �����+���� ≒ 4.1

で、約 4.1V になります。

このように、CdS の抵抗の変化を電圧の変化に変換することで、その電圧の値を Arduino で読み取ることが

6.明るさセンサーを使おう

Arduino の

A0 端子

抵抗値:1kΩ

A0 端子

抵抗値:100kΩ

A0 端子

Page 50: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

49

できます。

Arduino では A0~A5 の 6 つの端子の電圧を読み取ることができ、analogRead(pin)で読み取る端子を指定

します。この端子は『アナログ入力端子』といいます。

これにより analogRead で指定した端子の電圧の値に応じて LED の点灯パターンを変えるというプログラム

を作ることができるのです。

・ ア ナ ロ グ 入 力 で 読 み 取 っ た 値

Arduino はアナログ入力に使用できる端子は、前述のように A0~A5 の 6 端子を持っていています。

読み取れる電圧の分解能は 10 ビットです。

『分解能が 10 ビット』とは、基準になる電圧を『2�� = 1024』分割した精度で読み取ることができるという

意味です。

例えば、基準電圧が 5V の場合、5 ÷ 1024 = 0.00488V⋯で、約 4.9mV 刻みで読み取ることができます。

読み取った値が 0V だった時、読み取った電圧の値は 0、5V の時が 1023 となります。

この値を使用し、『analogRead で読み取った値が 512 より小さいときは消灯する』というようなプログラム

を作成することができます。

・ ア ナ ロ グ 入 力 を 使 っ て み よ う

・シリアルポートモニター

では、アナログ入力を使って点灯パターンを作成する前に、明るさセンサーでアナログ入力の値がどのよ

うに変化しているのか見てみましょう。

Arduino はパソコンとデータ通信をすることができます。この機能を利用し、アナログ入力で読み取った

値をパソコンに表示させてみましょう。

上記がパソコンに A0 端子の電圧値を読み取った結果を表示させるプログラムです。

上記を入力したら Arduino にプログラムを書き

込んだ後、メニューバーの『ツール』→『シリ

アルモニタ』を選択してください。

int akarusa; //A0 端子の電圧値を記憶させておく変数を宣言 void setup() { Serial.begin(9600); //パソコンとの通信速度を 9600 に } void loop() { akarusa = analogRead(A0); //A0 端子の値を akarusa に Serial.println(akarusa); //akarusa の内容をパソコンに表示 delay(500); //次の表示まで 0.5 秒待つ }

Page 51: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

50

すると左図のウインドウが開き、0.5 秒ごとに読み取った値が表示

されます。

この時表示がおかしい場合はウインドウ右下の数字(赤で囲った部

分)が 9600bps になっているか確認して下さい。

この数値を Serial.begin で設定した数値と同じにしておかない

と、表示される文字がおかしくなります。

Arduino とパソコンのデータ通信の関数は下記のとおりです。

Serial.print と Serial.println の違いは改行コードが付加されるかどうかだけです。前ページのプロ

グラムの Seril.println を Serial.print に変えてみて実行してみましょう。

Seril.print は改行がありませんので、数値がヨコにつながって表示

されます。

・Arduino とパソコンのデータ通信の速度を設定します。

書き方 パラメーター

Serial.begin(速さ)

速さ:通信速度を記入します。 パソコンと通信する場合、300、1200、2400、4800、9600、14400、19200、28800、38400、57600、115200 の中から選びます。通常は 9600にします。

使用例 Serial.begin(9600); //通信速度を 9600 に設定します。

・パソコンとデータ通信をするためのシリアル端子にデータを出力します。

書き方 パラメーター

Serial.print(データ,変換型)

データ:出力するデータを記入します。 数値だけでなく文字を出力することもできま

す。(ただし日本語は不可) 変換型:出力するデータを何進数で表示するかを設定し

ます。 10 進数のときは DEC 16 進数のときは HEX 2 進数のときは BIN

※変換型は省略する事が可能で、省略したときは

DEC と同じ。

使用例

Serial.print (93); //シリアル端子に 93 が出力される Serial.print (93,HEX); //シリアル端子に 5D が出力される Serial.print (93,BIN); //シリアル端子に 1011101 が出力される Serial.print (”HELLO”); //シリアル端子に HELLO が出力される

//※ 文字を出力するときには『” ”』で文字を囲む

・パソコンとデータ通信をするためのシリアル端子に、データの末尾に改行コードを付けて出力し

ます。

書き方 パラメーター

Serial.println(データ,変換型) データ:Serial.print と同じ 変換型:Serial.print と同じ

使用例 Serial.println (93); //シリアル端子に 93+改行が出力される

Page 52: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

51

先ほどのプログラムに上記の赤で示した 2 行を追加して実行してみてください。

左図のように文字と空白が追加されて表示されます。

『¥t』はエスケープコードといいます。

プログラム上に『タブ』や『改行』など文字で表せない物や、プ

ログラムで使用できない『?』などの文字を書きたいときに使用

します。

例えば

¥と書きたいとき → ¥¥と書きます

?と書きたいとき → ¥?と書きます

『タブ』を書きたいとき → ¥t と書きます

『改行』を書きたいとき → ¥n と書きます

上記のプログラムでは

akarusa= akarusa の値(改行) と表示されます。

・アナログ入力を使ったプログラム

では、LED 部ベース基板にある CdS に手をかざして、明るさの状況を変化させてみましょう。

明るいときは 300 くらいだった値が、800 くらいに変化します。

※ 明るさの状況により、この数字通りにならない場合もありますが、明るい時より暗い時のほうが値が大

きくなります。

この変化を利用し、明るいときは全部の LED が点灯し、暗くなると 1 段ずつ 1 個の LED がクルクル回るプ

ログラムを考えてみましょう。

明るさの状態=A0 端子の電圧値により処理が変わりますので、制御文の『if 文』が使用できそうです。

if 文は『もしも○○○が△△△なら□□□を実行し、そうでないなら☆☆☆を実行する』というものでし

たので、今回のプログラムに当てはめると『もしも A0 端子の値が 600 より小さいなら全 LED の点滅を行

い、そうでない(600 以上)なら 1 段ずつ 1 個の LED がクルクル回る様に点灯させる』ということになりま

す。

プログラム切り替えのしきい値

を 600 としましたが、この値は明るさの状況により変わりますので、シリ

アルモニターで明るい時と暗い時の数値を見ながら決めてください。

int akarusa; //A0 端子の電圧値を記憶させておく変数を宣言 void setup() { Serial.begin(9600); //パソコンとの通信速度を 9600 に } void loop() { akarusa = analogRead(A0); //A0 端子の値を akarusa に Serial.print(”akarusa=”); Serial.print(”¥t”); Serial.println(akarusa); //akarusa の内容をパソコンに表示 delay(500); //次の表示まで 0.5 秒待つ }

タブ

Page 53: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

52

※しきい値

しきい値とは動作が切り替わる境になる「ある決められた値」のことをで、「いき値」とも呼ばれます

以下は、このプログラム例です。

//関数のプロトタイプ宣言------------------------ void initial(); //初期設定 void ptn0(); //LED 全消灯(初期化) void ptn1(); //点灯パターン 1 void ptn2(); //点灯パターン 2

//-------------------------------------------- //変数宣言------------------------------------- int akarusa; //int 型の変数 akarusa を設定(A0 の値代入用) //-------------------------------------------- void setup() { initial(); //初期設定関数呼び出し

} void loop() { ptn0(); //LED 全消灯(初期化) akarusa = analogRead(A0); //A0 端子の電圧値を akarusa に代入 if(akarusa<600) //akarusa が 600 より小さければ { ptn1(); //点灯パターン 1 を実行

} else //そうでなければ(akarusa が 600 以上ならば) { ptn2(); //点灯パターン 2 を実行

} } //初期設定------------------------------------ void initial(){ for(int a=2;a<14;a++) { pinMode(a,OUTPUT); //変数 a に対応するピンをデジタル出力に

} digitalWrite(11,HIGH); //11 番ピンを HIGH に digitalWrite(12,HIGH); //12 番ピンを HIGH に digitalWrite(13,HIGH); //13 番ピンを HIGH に

} //-------------------------------------------- //全 LED 消灯(初期化)--------------------------- void ptn0(){ for(int b=2;b<11;b++) { digitalWrite(b,LOW); //変数 b に対応するピンを LOW に

}

Page 54: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

53

void loop()部分の『if~else~』部分が明るさにより点灯パターンプログラムの切り替えを行っている部

分です。if(akarusa<600)の数値を変更すると点灯パターンが切り替わる周囲の明るさが変わります。

しきい値が 600 未満のときは ptn1()を、600 以上のときは ptn2()を呼び出して実行しています。

digitalWrite(11,HIGH); //11 番ピンを HIGH に digitalWrite(12,HIGH); //12 番ピンを HIGH に digitalWrite(13,HIGH); //13 番ピンを HIGH に

} //-------------------------------------------- //点灯パターン 1(全 LED 点滅)-------------------- void ptn1(){ for(int c=2;c<11;c++) { digitalWrite(c,HIGH); //変数 c に対応するピンを HIGH に

} digitalWrite(11,LOW); //11 番ピンを LOW に digitalWrite(12,LOW); //12 番ピンを LOW に digitalWrite(13,LOW); //13 番ピンを LOW に delay(500); //500 ミリ秒=0.5 秒待ちます digitalWrite(11,HIGH); //11 番ピンを HIGH に digitalWrite(12,HIGH); //12 番ピンを HIGH に digitalWrite(13,HIGH); //13 番ピンを HIGH に delay(500); //500 ミリ秒=0.5 秒待ちます

} //-------------------------------------------- //点灯パターン 2(LED1 周点滅 1 段→2 段→3 段)---- void ptn2(){ for (int d=11;d<14;++d) //段を切り替える変数を d に { digitalWrite(d,LOW); //変数 d に対応する段のカソードを LOW に for (int e=2;e<10;++e) //1 周を数える変数を e に { digitalWrite(e,HIGH); //変数 e に対応するピンを HIGH に delay(500); //500 ミリ秒=0.5 秒待ちます digitalWrite(e,LOW); //変数 e に対応するピンを LOW に

}

digitalWrite(d,HIGH); //変数 d に対応する段を HIGH に }

} //--------------------------------------------

以上で、Arduino による PICA Tower のプログラムの解説はおしまいです。

Arduino にはこの他にも色々な機能があり、LED の点灯だけでなく、色々と便利

な用途に使用することができます。

今回のプログラミングをきっかけに、色々チャレンジしてみてください。

Page 55: PICA Tower Arduinoプログラミングマニュアル プログラミングマニュアル 2 1. 開発環境の準備 4 用意するもの 4 Arduino IDE のインストヸル 5 ヷArduino

Arduino プログラミングマニュアル

54

ご注意 ① ELEKIT は、株式会社イーケイジャパンの登録商標です。

② 本書の内容の一部、または全部を無断転載することはかたくお断りします。

③ 本書の内容等については、将来予告なく変更する場合があります。

④ 本書の内容は教育、ホビー用途を目的に記載されていますので、実際の運用には適さない記述

があります。

⑤ 本書の内容を元に作成されたプログラム等につきまして、弊社では一切の責任を負いかねます

ので、あらかじめご了承ください。

○C (株)イーケイジャパン 2014 2014 年 1 月 15 日 初版発行