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

PICA Tower Arduinoプログラミングマニュアル.docx

N/A
N/A
Protected

Academic year: 2021

シェア "PICA Tower Arduinoプログラミングマニュアル.docx"

Copied!
55
0
0

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

全文

(1)

Arduino

プログラミング

(2)

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

やそのプログラミング方法についてお知りになりたい方

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

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

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

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

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

はじめに

(3)

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

もくじ

(4)

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

(5)

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

(6)

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をクリック

(7)

6

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

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

WindowsXP

の場合

接続後に「新しいハードウェアの検出」画面が表示されますの で、「いいえ、今回は接続しません。」を選択して次へ進みま す。 「一覧または特定の場所からインストールする。」を選択して次 へ進みます。 「次の場所を含める。」で、参照のボタンをクリックして、先ほ ど解凍したフォルダーの中にある「drivers」を選択して、次へ 進みます。 ドライバーのインストールが始まり、自動的に完了します。 完了後に、もう一度ドライバーのインストールを求められる場合は、1回目と同じように進めて完了させま す。 Windowsの場合

(8)

7

WindowsVista/7

の場合

「デバイスドライバーソフトウェアをインストールしています。」と表示され、しばらく待つと、パソコン が自動でドライバーを検索しインストールが完了します。もしも自動でインストールができない場合は次 の手順でインストールしてください。

WindowsVista/7

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

1)『コントロールパネル』→『システムのセキュリテ ィ』→『デバイスマネージャー』と選んで、デバイ スマネージャーの画面を開きます。 2)デバイスマネージャー画面の中に、「不明なデバイ ス」という表示がされていますので、その文字の上 で右クリックして、「ドライバーソフトウェアの更新 …」を選びます。 3)「ドライバーソフトウェアの更新」画面から、「コン ピューターを参照してドライバーソフトウェアを検 索します。」を選びます。

(9)

8 Mac OS Xの場合、ダウンロードが完了すると自動的にドライバーがインストールされますので、表示される メッセージに従い必要に応じて管理者パスワードの入力や再起動を行ってください。

COM

ポートの確認と設定

次に、Arduino基板がどのシリアルポート(COMポート)に接続されたか確認します。 WindowsXPでは、マイコンピュータのアイコンを右クリックして「プロパティ」を選択し、「ハードウェア」 のタブの中にある「デバイスマネージャー」をクリックします。 WindowsVista/7では、「コントロールパネル」→「システムとセキュリティ」→「デバイスマネージャー」 と進みます。 デバイスの一覧が表示されますので、「ポート(COMとLPT)」という項目の下を確認します。 4)「ドライバーソフトウェアの更新」画面から、「コンピューターを参照してドライバーソフトウェアを 検索します。」を選びます。参照のボタンをクリックして、先ほど解凍したフォルダーの中にある 「drivers」を選択して、次へ進みます。 5) しばらく待つと、ドライバーのインストール完了画面が表示されます。 ※セキュリティーソフトの設定により警告画面が表示される場合があります。 そのような場合にはインストールを承認するようにしてください。 6) もう一度デバイスマネージャーを表示して、 Arduino基板が、ポート(COMとLPT)に登録され ていることを確認してください。 Windowsの場合 Mac OS Xの場合

(10)

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の場合

(11)

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)以外では ピン数、機能が異なる場合 があります。

(12)

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部の回路図 マイコン部の回路図

(13)

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) 電圧を加える 電圧(高) 電圧(低) 逆方向には流れない

(14)

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』 逆向きは 流れない 電圧が同じ なので流れ ない

(15)

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

(16)

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を代入 } /*~*/ //

(17)

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が代入される。

(18)

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にしましょう。

(19)

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も真。

(20)

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』の 部分はそのまま。

(21)

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);

(22)

21 <<= a<<=b a=(a<<b) aをbビット分左にシフトして、その結果をaに 代入する。 >>= a>>=b a=(a>>b) aをbビット分右にシフトして、その結果をaに 代入する。

・演算の順番

算数の計算をする時、同じ式の中にいくつも加減乗除の計算がある場合、足し算や引き算よりも掛け算や 割り算を先に、また( )があればその中を先に計算するという決まりがありますね。 それと同じように、定数や変数の演算にも優先順位が決まっています。 優先順位 演算子 高い 低い ( ) ! ~ ++ -- * / % + - << >> < <= > >= == != & ^ | && || = += -= *= /= %= &= ^= |= <<= >>= ,

(23)

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

(24)

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の処理をしてしま います。

(25)

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; }

(26)

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; }

(27)

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; }

(28)

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(条件) の判断になるために条件変数が変化せず、いつまでも『繰り返し処理』を繰り返す事になります。

(29)

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; }

(30)

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

(31)

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() { //実行するプログラム内容 }

(32)

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関数の外に書かれた関数を呼び出して使う 呼び出す関数はここに書かれている。

(33)

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; }

(34)

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にします。HIGH5VLOW0V(GND)になります。

書き方 パラメーター

digitalWrite(pin, value) pin:設定したいピンの番号

value:HIGHかLOW(または、1か0) 使用例

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

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

書き方 パラメーター

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

x = digitalRead(9); //xに9番ピンの状態がHIGHかLOWで記憶されます。 //例えば9番ピンがGNDに接続されている場合はLOWになります。 ・指定したアナログピンの状態を調べます。結果は0から5Vの電圧範囲を0から1023の範囲に変 換した値になります。Arduino UNOではA0A5がアナログピンとして利用できます。 書き方 パラメーター 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)が出力されます。

(35)

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は明るく点灯することになりま す。

(36)

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文の最後に;(セミコロン)は必要ありません。

(37)

36

ライブラリとは

プログラムを書くときの、決まった手続きや、似たような手続きをまとめて専用の命令としていつ でも使えるようにしたものを「ライブラリ」と呼んでいます。 1回だけ動かすのであれば長いプログラムになっても特に気になりませんが、液晶ディスプレイに 文字を表示させる命令などでは、何度も何度も同じような命令を書かなくてはなりません。ここでそ の「決まった手続き」を一つの命令にまとめたものがあれば、プログラムの作成が便利になり、間違 いも少なくなります。

Arduinoには多くのライブラリがあり、あらかじめArduino IDEにインストールされている『公 式ライブラリ』とArduinoのユーザーが作成し公開しているライブラリがあります。

新しく使いたい部品やモジュールを動かすためのライブラリが用意されていないか、インターネッ トなどでチェックしてみると良いでしょう。

(38)

37

Arduino IDEやドライバーのインストールが完了し、LEDが点灯・消灯する条件、Arduino言語の基礎が整 いましたので、実際にプログラムの作成を行いましょう。

A r d u i n o

P I C A T o 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 d u i n o I D E

Aruino IDEを起動すると、下記画面が表示されます。 新規ファイル 保存 検証 開く プログラム 作成エリア シリアルモニタ コンソール ボード・COM番号 メッセージエリア マイコンボード に書き込む

4

Arduino IDE

でプログラミング

こちらが『A5』端子

(39)

38 新規ファイル 新しいプログラム作成エリアを開きます。 開く 保存しているプログラムを開きます。 保存 作成したプログラムを保存します。 検証(コンパイル) 正しい文法でプログラムが作成されているかチェックします。 シリアルモニタ シリアルデータを表示します。 (データに何を表示させるかあらかじめプログラムに書く必要があります。) マイコンボードに書き込む プログラムをPCに接続しているArduino基板に書き込みます。 アップロードと表示されている場合もあります。 プログラム作成エリア プログラムを書き込むエリアです。 メッセージエリア 操作に応じてメッセージやエラーが表示されます。 コンソール メッセージやエラーの詳細が表示されます。(※) ボード・COM番号

Arduino-IDEで設定している、Arduino基板の種類とCOMポート番号が表示 されます。

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

A r d u 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に }

参照

関連したドキュメント

旅行者様は、 STAYNAVI クーポン発行のために、 STAYNAVI

えて リア 会を設 したのです そして、 リア で 会を開 して、そこに 者を 込 ような仕 けをしました そして 会を必 開 して、オブザーバーにも必 の けをし ます

AC100Vの供給開始/供給停止を行います。 動作の緊急停止を行います。

ウェブサイトは、常に新しくて魅力的な情報を発信する必要があります。今回制作した「maru 

QRされた .ino ファイルを Arduino に‚き1む ことで、 GUI |}した ƒ+どおりに Arduino を/‡((スタンドアローン})させるこ とができます。. 1)

You agree to indemnify, defend and hold harmless onsemi, its directors, officers, employees, representatives, agents, subsidiaries, affiliates, distributors, and assigns, against

You agree to indemnify, defend and hold harmless onsemi, its directors, officers, employees, representatives, agents, subsidiaries, affiliates, distributors, and assigns, against

Any technical, applications or design information or advice, quality characterization, reliability data or other services provided by onsemi shall not constitute any representation