第10回 最初のスケッチ(1)

タイトル画像

今回からいよいよスケッチの作成に入ります。

目次

最初のスケッチ内容

それでは、これから初めてのスケッチ(プログラム)を作っていきます。まずはゴールの確認です。

ゴールは、前回までの記事で製作したArduino Microの回路で「12番端子に接続したLEDを1秒ごとにつけたり消したりする」というスケッチを作り、実際に動作させる、という内容です。

LEDの制御

なんだか簡単なゴールにみえますが、実際に動作させるまでたくさん覚えることが出てきます。ぜひ用意したノートに自分なりにまとめてみてください。

Arduino IDEの起動

前回の記事でダウンロードしたArduino IDEを起動します。起動すると、以下のような画面になります。バージョン2系列ではウィンドウの下の方の黒い部分は表示されていませんが問題ありません。

Arduino IDE起動画面

このウインドウはテキストエディタのようになっていて、表示されているウィンドウは新規作成されたスケッチです。これからここにスケッチを作成していきます。

ん???

すぐに気づいたと思いますが、新規作成したはずなのに、すでに何か文字が勝手に書かれていますよね。

普通のアプリ、例えばテキストエディタやオフィスアプリでは、新規ファイルを作成すると何も書かれていません。でもArduino IDEの新規ファイル(新規スケッチ)は、最初から何やら勝手に書かれています。

これから、この書かれている内容を解明して、スケッチを作成していきましょう!

といきたいところですが、その前に、、、

新規スケッチの保存

Arduino IDEを初めて起動したときに表示されるウインドウは、新規に作成されたスケッチのファイルです。

この状態ではファイルはまだ保存されていません。そこで、最初にこのスケッチに名前をつけて保存しておきましょう。

スケッチの名前は、、、そうですね、、、LEDを点滅するスケッチなので「LED_blink」という名前にします。

「blink」とは日本語で「まばたきをする」とか「点滅する」という意味です。わかりづらかったら「LED_tenmetsu」など、自分でわかる名前にしても構いません。

使用するアルファベットは大文字でも小文字でも構いませんが、日本語は使えませんので注意してください。使用できる文字は、半角のアルファベット、数字、「-」(ハイフン)、「.」(ドット)、「_」(アンダースコア)で、長さは最大63文字です。

それでは保存します。「ファイル」メニューから「保存」を選択します。バージョン2系列の場合は、「ファイル」メニューから「Save」を選択します。

なお、今後はWindowsとmacOSで画面が共通の場合はどちらか片方のOSのみのスクリーンショットで説明します。

保存メニュー

以下のような保存ダイアログが表示されます。

スケッチ保存ダイアログ

このダアログでスケッチの保存名を指定します。Windowsの場合は「ファイル名」欄に「LED_blink」、macOSの場合は「Save as」欄に「LED_blink」と入力して「Save」ボタンをクリックします。

これで保存ができましたが、実際にどのように保存されているのか確認しておきます。

保存フォルダの場所は、Windowsの場合は「ドキュメント」→「Arduino」フォルダ、macOSの場合は「書類」→「Arduino」フォルダです。それでは「Arduino」フォルダの中身を見てみましょう。

Arduinoフォルダの中身

Arduinoフォルダの中には「LED_blink」というフォルダと、「libraries」というフォルダがあります。

「libraries」フォルダは作った覚えがないですよね。このフォルダは前回の記事でArduino IDEを起動した時に自動的に作成されたもので、Arduino IDEが使用します。この「libraries」フォルダの役割はこのシリーズの基礎編パート2で解説します。

「LED_blink」フォルダは先ほどの保存操作で作成されたものです。

ところで、スケッチの「ファイル」を保存したので、「LED_blink」という「ファイル」が保存されると思っていませんでしたか?

でも実際には「LED_blink」という「フォルダ」が作成されています。

それではさらに「LED_blink」フォルダの中を見てみましょう。「LED_blink.ino」というファイルがありますよね。

LED_blinkフォルダ

このファイルが先ほど保存したスケッチのファイルです。

Arduino IDEで作成したスケッチのファイルは拡張子が「ino」のファイルになります。「ino」は「Arduino」の最後の3文字から取られています。

Arduinoスケッチファイルの拡張子は「ino」ですが、中身はテキストですので普通のテキストエディタで開いて編集することができます。

それにしてもちょっと疑問ですよね。

というのは、保存したスケッチのファイルは「LED_blink.ino」という1個のファイルなのに、なんでわざわざ1個のファイルをフォルダの中に入れておくのか、という疑問です。

スケッチファイルが1個であれば、「Arduino」フォルダの中に「LED_blink.ino」ファイルを保存しておけば十分な気もします。

このようにスケッチをフォルダに入れておく、というのはプログラミングと深い関係があります。この理由については残念ながら今の知識では理解することは困難です。基礎編パート1の後半でこの理由を明らかにします。

それでは、もう少しスケッチのことを知っておきましょう。

Arduino IDEを終了して、再度「LED_blink」のスケッチを開きたいときにどのようにすればよいか確認しておきます。いつくか方法がありますので、それらを説明します。

ひとつは、先ほど保存した「LED_blink.ino」ファイルをダブルクリックする方法です。エクスプローラ(Windows)やFinder(macOS)でLED_blink.inoを探してダブルクリックすると開きます。

また、他の方法としてArduino IDEの「ファイル」メニューから「開く…」を選択して、保存した「LED_blink.ino」を指定して開く方法があります。

さらにもう少し簡単な方法があります。ファイルメニューに「スケッチブック」というメニューがあります。このメニューを選択すると、以下のように保存したスケッチがリストされますので、開きたいスケッチを選択します。

スケッチブックメニュー

それでは、スケッチ(プログラム)を作成していきましょう!

スケッチの決まり 〜setupとloop〜

これから、12番端子に接続したLEDを1秒ごとにつけたり消したりするスケッチを作成します。

新規にスケッチを作成すると、最初から何やら文字が書かれていましたよね。

void setup() {
// put your setup code here, to run once:


}

void loop() {
// put your main code here, to run repeatedly:


}

書かれている内容は英語ですし、意味もさっぱりわからない、って感じです。

ここに書かれている内容を正確に理解するには、基礎編の後半で説明するプログラミングの詳しい理解が必要です。かといってずっと先で説明することを今ここで説明されても、プログラミングの知識がない状態ではその説明が理解できないよ…..ということになってしまいます。

実はこれがプログラミングを習得するときの難しさのひとつの原因です。

一番簡単なプログラミングでも、プログラミング後半で習得する知識が必要になる、というケースがあり、習得する順序に矛盾(むじゅん)が出てしまうわけです。

そこでこれから習得する上で、ずっと先の記事に出てくる、詳しい知識がないと理解できない部分は「まずはそういうものだ」ということにして頭に入れておいてください。

いったん「そういうものだ」と片付けてしまったものは、このシリーズの後半で詳しく説明したあと、元のところに戻ってきて正確に理解できるようにします。

また、「そういうものだ」というものについても、その説明をする時は、なるべく頭に入りやすい形で説明していきます。

それでは理解の仕方を確認したところで、まずは最初に書かれている内容をみていきましょう。

第3回の記事「プログラミングとは」の中で、「スケッチ」(プログラム)は、Arduinoがどのように動作するか、というArduinoに対する指示書であることは説明しました。

この指示は、以下のように「setup」というところと「loop」というところに書きます。具体的には「setup」と「loop」の後に出てくる「{」(開き中括弧)と「}」(閉じ中括弧)の間に書いていきます。

ベースのスケッチ

両方ともArduinoに対する指示ですが、何が違うのでしょうか。

Arduinoは以下のようにこれらの指示を実行します。

スケッチのsetupとloop

なんのこっちゃ、って感じです。

「電源投入直後に1回だけ実行する指示」「電源が入っている間ずっと繰り返し実行する指示」。なんでこんなふうに分けて指示を出す必要があるんですかね…

Arduinoにやってもらいたいのは「LEDを1秒ごとにつけたり消したりする」という動作だけなんですが…

これからArduinoに対する指示の書き方を説明しますが、なぜこのようなふうに分けて書く必要があるのか、だんだん明らかになってきます。

Arduinoの端子の機能を設定する指示

Arduinoのプログラミングについて説明した時に、Arduinoの内部は以下のようにスケッチで制御できるスイッチが入っている、と説明しました。

Arduino内部スイッチ

すみません、今までウソをついていました。実はこの図、間違ってはいないのですが正しくもありません。

Arduinoの端子は、上の図のようにスイッチを制御してLEDをつけたり消したりすることができるのですが、他にも機能があるんです。その機能とは、端子の電圧を電圧計で読み取る、というものです。

Arduino内部の電圧計

当然ながら針のついた電圧計が入っているわけではないのですが、電子的に電圧を計る機能が入っています。

ここで重要なポイントがあります。

これら2つの機能は別々の機能です。1つの端子に2つの機能を同時に接続することはできません。

Arduino内部の2つの機能

そこで、Arduinoの端子をどちらの機能で使うのか、Arduinoに指示する必要があります。Arduinoの中には、どちらの機能を使うか、選択するスイッチが入っています。

Arduino内部の2つの機能の切り替えスイッチ

Arduinoの端子を使用する時、このスイッチをあらかじめ設定しておく必要があります。このスイッチは1度設定すると設定を変更しない限りそのままの状態を保ちます。

それでは、スケッチではこのスイッチをどのように指示するのか、みていきましょう。

この内部機能を選択するスイッチは、スケッチで以下のように書きます。

pinMode

わからない言葉がいろいろ出てきましたよね。ひとつひとつ確認していきましょう。

「pinMode」という指示は「内部の機能を選択するスイッチを操作してください」という意味の指示になります。

ただ、機能を選択するスイッチを操作するには、Arduinoに対して「何番の端子をどの機能にするか」と指示する必要があります。この情報がないと、Arduinoは何をどうしてよいかわかりません。

そこで、「pinMode」という指示で、これらの情報をカッコでくくって、上のように端子番号と機能を書きます。さらに、指示の終わりは必ず「;」(セミコロン)をつけます。

例えば、12番端子をスイッチ制御する場合、スケッチに以下のように書きます。

pinMode(12, OUTPUT);

Arduinoがこの指示を受けると、12番端子の内部の機能を選択するスイッチを以下のように変更します。

pinMode-OUTPUT

Arduinoの内部の機能を選択する指示を「pinMode」と書きますが、この言葉の意味も確認しておきましょう。

「pinMode」は「pin」(ピン)の「Mode」(モード)という言葉に分解できます。

「pin」は日本語で「端子」という意味です。「モード」はほとんど日本語ですよね。「勉強モードに切り替えないと」とかいうモードのことです。つまり「pinMode」とは「端子のモード」という意味になります。

それでは、スケッチに以下のように書いた場合はArduino内部はどのようになるかわかりますか?

pinMode(12, INPUT);

先ほどのpinModeの説明を見ると、「機能」のところで「INPUT」と書くと電圧計の機能にするということがわかります。スケッチにこのように書くとArduino内部は以下のように機能が切り替わります。

pinMode-INPUT

次に「OUTPUT」「INPUT」の意味について説明します。

「OUTPUT」「INPUT」は日本語でそれぞれ「出力」「入力」という意味です。

端子をスイッチで制御することは、Arduinoの端子から制御信号を出す(=出力する)、という意味合いで「OUTPUT」という言葉が使われています。

また、端子の電圧を電圧計で読み取ることは、Arduinoの端子から電圧の信号を入れる(=入力する)、という意味合いで「INPUT」という言葉が使われています。

なお、pinModeの「機能」のところにもう一つ選択できるものがあります。「INPUT_PULLUP」という機能ですが、これについては基礎編パート1のスイッチを追加するところで詳しく説明します。

さて、この「pinMode」という指示について今後必要になる用語を覚えましょう。

今までArduinoに対する「指示」と呼んできましたが、pinModeのような指示のことを「命令」または「関数」と呼びます。

「命令」は「指示」と似たような意味合いなので理解しやすいと思いますが、「関数」といってもピンときませんよね。「関数」という呼び名は基礎編パート1の後半で詳しく説明します。

また、pinMode命令では「どの端子を、どの機能にするか」という内容をカッコで囲んで指定しました。この具体的な内容のことを「パラメータ」または「引数」(ひきすう)と呼びます。

「引数」なんて日常会話では出てきませんのでなんだか違和感があるかもしれません。これは「命令がき連れている」って感じで覚えていただければと思います。

パラメータ

命令の書き方も注意点があります。

「pinMode」という命令を「PinMode」や「pinmode」など大文字/小文字も含めて1文字でも違うとArduinoは命令を理解してくれません

またパラメータの「OUTPUT」も1文字でも間違ってもArduinoは理解してくれません。間違うとどのような目にあうか、このあと確認してみます。

なお、「pinMode(端子番号, 機能);」という命令は「pinMode」「(」「端子番号」「,」「機能」「)」「;」から構成されていますが、それぞれの間にスペースを入れても問題ありません。

pinMode(   12,   OUTPUT   );

と書いてもArduinoは命令をきちんと理解してくれます。1文字でも間違えるとダメなのに、スペースは入ってても問題ない、というのは、きちんとしてるんだか、ルーズなんだか、ちょっと捉えどころのない性格の人みたいですよね。

どのぐらいまでは許してくれるのか、最初は感覚がわからないと思いますが、スケッチの書き方ルールについては、ある「考え方」があるので、今後の記事で説明していきます。

それではスケッチ作成に戻りましょう。

最初のスケッチは「12番端子に接続したLEDを1秒ずつつけたり消したりする」というものです。そのために12番端子をスイッチにする必要があります。

この場合、スケッチにどのように書けばよいか、もうわかりますよね。

pinMode(12, OUTPUT);

と書けばOKです。

ところで、どこに書けばよいか、わかりますか?

Arduinoのスケッチでは、setupかloopのどちらかに書くことは説明しました。

今回作成するスケッチは、LEDをつけたり消したりするので、Arduino内部の機能切り替えスイッチ(pinMode)は1回指示すれば大丈夫です。またpinModeはLEDをつけたり消したりする前に指示する必要がありますよね。

つまり、pinModeの設定は、Arduinoの電源を入れたあとすぐに1回だけ指示すればOKです。

ということで、

pinMode(12, OUTPUT);

はsetupのところに書くことになります。

ここまで理解したことを元に、12番端子をスイッチにする命令をスケッチに書いてみましょう。スケッチに書くときはコピペせずに、必ず自分で入力してください。

setupのスケッチ

スケッチに書けましたか?

書いたスケッチを見ると、「pinMode」はオレンジ色、「OUTPUT」は緑色になっていますよね。pinModeであれば、最後の「e」を入力した瞬間にオレンジ色になりましたよね。

Arduino IDEでは、命令が正しく入力できているとオレンジ色、パラメータが正しく入力できていると緑色に色付けしてくれます。なお、パラメータは数字については特に色付けしてくれません。

入力した命令が正しいかどうかは色で判断することができますが、その他にもスケッチが問題ないか一通り確認してくれる機能があります。

スケッチウィンドウの左上の方にチェックマークのボタンがあります。

Arduino IDEバージョン2系列の場合は、ここで、「ツール」メニューから「ボード」→「Arduino AVR Boards」→「Arduino Micro」を選択してください。

検証ボタン

このボタンは、スケッチに問題がないか確認する「検証ボタン」です。それでは検証ボタンをクリックして検証してみてください。

検証が終わるとウィンドウの下の方に結果が表示されます。以下のように「コンパイルが完了しました」と表示されればOKです。

ビルドOK

それでは、スケッチを変更して間違いがあるようにしてみます。例えば「pinMode」を「pinmode」のように1文字間違えるように書き直してみてください。

間違いがあるようにスケッチを直したら「検証ボタン」をクリックします。クリックすると先ほどとは違う感じ、何か大変なことが起こった、という結果になりましたよね。

ビルドNG

検証結果のところ見ると、先ほど問題ないケースでは日本語で「コンパイルが完了しました」と出たのに、今回は英語で何か言ってますね。さらに、たった一文字間違えたところをオレンジ色にして、ここがおかしい、と言っています。

正しい時は日本語で丁寧に「コンパイルが完了しました」と言っていたのに、1文字でも間違えると怒り爆発って感じて、急に母国語の英語で喋り出して、間違えたところをこれ見よがしにオレンジ色にする、というところから見ると、Arduino IDEは紳士(しんし)なビジネスパーソンというよりは、ちょっと頑固で短気なところがある職人気質ということがわかります。

今回の説明はここまでですが、なんだかまだ気持ち悪いところがありますよね。setupとloopの中に書かれている「// put your setup code here, to run once:」とかのグレー色の文字というか文章です。

1文字でも間違えたらArduino IDEに怒られるのに、なんだか結構自由に英語を書いているような気もします。よく怒られませんね。

習得したこと

今回習得したことをリストします。忘れていることはないか、理解不足のところはないか確認してから次の記事に進んでください。

  • スケッチの保存方法
  • スケッチを開く方法
  • setupとloopの違い
  • 命令・関数
  • パラメータ・引数
  • pinMode命令
  • スケッチの検証
  • Arduino IDEは頑固で短気なこと

更新履歴

日付 内容
2019.7.15 新規投稿
2021.8.21 新サイトデザイン対応
2022.2.8 新デザイン対応
2022.9.19 Arduino IDE Version2系の情報を追記
通知の設定
通知タイミング
guest
0 コメント
本文中にフィードバック
全てのコメントを見る
jh3gpn
jh3gpn
4 年 前

すみません、少し先回りしているかも知れませんが
void setup よりも前の行に int ledPin = 13;と言う書き方もあるようですが、void setupのあとに書くpinMode(13,OUTPUT);と言う書き方の違いが良く理解できません。

管理者
管理者
返信  jh3gpn
4 年 前

かなり先の内容になってしまいますが、以下の理由と思われます。

int ledPin=13;をsetup、loop外に書くのは、グローバル変数として端子番号を定義するためです。setupとloop内の関数で、そのグローバル変数を使用して端子番号を指定するためだと思われます。

目次