Arduinoではじめてのスケッチ

Arduino
Arduino基板上のLED点滅

Arduino ではプログラムのことを『スケッチ』と呼びます。今回はごく簡単なスケッチを作成し、動作させてみましょう。

最初のテストスケッチ Blink

新規スケッチを作成する

Arduino IDE を起動すると、自動的に前回起動時に編集していたスケッチが読み込まれます。前回の続きの作業をする場合はそのままでもいいですが、新たなスケッチを作成する場合はメニューから『ファイル』→『新規スケッチ』を選択(またはキーボードで CtrlN を同時に押下)します。

※『Arduino IDEインストール』の項から続けて作業している場合は、新規スケッチを作成せずそのまスケッチの編集を初めても構いません。

別ウィンドウで新たに Arduino IDE のウィンドウが表示されます。ソースコード編集エリアにはスケッチのひな形が表示されています。必要が無ければ、最初のウィンドウは閉じてしまっても構いません。

コードの入力

ソースコード編集エリアに、以下のソースコードを入力して下さい。『void setup(){』や『void loop(){』など、最初から入力されている部分もありますので、足りない行だけ追加で入力して下さい。

※英字の大文字・小文字も区別されますので注意して正確に入力して下さい
※ソースコードを見慣れていない人は『l(小文字のエル)』と『1(数字のいち)』、『;(セミコロン)』と『:(コロン)』など似た形の文字を間違えがちです

C++
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(1000);                     
  digitalWrite(LED_BUILTIN, LOW);  
  delay(1000);                     
}

スケッチに名前をつけて保存

入力が終わったら、スケッチを保存しましょう。

Arduino IDE メニューから『ファイル』→『名前をつけて保存』を選択(またはキーボードの CtrlShiftS を同時に押下)すると、スケッチの保存場所および名前を入力する画面が表示されます。

この例では、『 D:\Arduino 』というディレクトリを作り、そこに『 Blink 』という名前でスケッチを保存しようとしています。スケッチはフォルダとして保存されるため、この画面では拡張子は不要です。

アップロードと実行

入力が終わったら、『 』(アップロード)ボタンをクリックして Arduino にプログラムをアップロードしましょう。

問題がなければ、基板上の『 L 』と書かれたLEDが、ゆっくり(1秒ごとに)点灯→消灯→点灯…と点滅を繰り返すはずです。

エラーが発生した場合

プログラムに間違いがあると、コンパイル中にエラーメッセージが表示されて(画面下部の赤字の部分)アップロードが行われません。エラーメッセージをよく読んで間違いを探し、修正する必要があります。

エラー例1

以下のソースをコンパイルしたところ、エラーが発生しました。

C++
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalwrite(LED_BUILTIN, HIGH);
  delay(1000);                     
  digitalWrite(LED_BUILTIN, LOW);  
  delay(1000);      
}

エラーメッセージは以下の通りです。

D:\Arduino\Blink\Blink.ino: In function 'void loop()':
D:\Arduino\Blink\Blink.ino:6:3: error: 'digitalwrite' was not declared in this scope
digitalwrite(LED_BUILTIN, HIGH);
^~~~
D:\Arduino\Blink\Blink.ino:6:3: note: suggested alternative: 'digitalWrite'
digitalwrite(LED_BUILTIN, HIGH);
^~~~
digitalWrite

exit status 1

Compilation error: 'digitalwrite' was not declared in this scope

この例では、3つのエラーメッセージが表示されています。

D:\Arduino\Blink\Blink.ino: In function 'void loop()':
D:\Arduino\Blink\Blink.ino:6:3: error: 'digitalwrite' was not declared in this scope
digitalwrite(LED_BUILTIN, HIGH);
^~~~
D:\Arduino\Blink\Blink.ino:6:3: note: suggested alternative: 'digitalWrite'
digitalwrite(LED_BUILTIN, HIGH);
^~~~
digitalWrite

それぞれのエラーの先頭に表示されている『 D:\Arduino\Blink\Blink.ino: 』は、エラーが発生したソースファイル名を表しています。これを除くと、エラーメッセージは以下の3つです。

1つ目のエラーメッセージ
In function 'void loop()':

まず最初のエラー『 In function ‘void loop()’: 』は、エラーが発生したのが void loop() という関数の内部であることを表しています。

2つ目のエラーメッセージ
6:3: error: 'digitalwrite' was not declared in this scope
digitalwrite(LED_BUILTIN, HIGH);
^~~~

2つ目のエラーの最初にある『 6:3 』とは、エラーの発生箇所がソースコードの『6行目の3文字目』(から始まる単語)であることを表しています。このソースの場合、行頭に2文字の空白が挿入されていますので、その行の最初の単語を表しています。

digitalwrite(LED_BUILTIN, HIGH);
^~~~

の部分は、『6行目の3文字目』を補足しています。『 ^ 』は矢印『 』の代わりと思えばいいでしょう。指し示されている文字が6行目の3文字目です。

error: ‘digitalwrite’ was not declared in this scope 』はエラーの内容です。『‘digitalwrite’という単語が、このコードの範囲(関数、ブロック内)で定義されていない』≒『そんな名前の命令は知らない』ということです。

3つ目のエラーメッセージ
6:3: note: suggested alternative: 'digitalWrite'
digitalwrite(LED_BUILTIN, HIGH);
^~~~
digitalWrite

3つ目のエラーの最初の『 6:3 』は、2つ目のエラート同じく『 6行目の3文字目 』を表します。

note: suggested alternative: ‘digitalWrite’』はエラーというよりサジェスト(提案)で、『正しくは digitalWrite(wが大文字)ではないか』ということです。つまり、digitalWrite関数のWを小文字のwにしてしまったというミスだったということが判ります。

エラー例2

もう1つエラーの例を見てみましょう。

以下のソースをコンパイルしたところ、エラーが発生しました。

C++
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH)
  delay(1000);                     
  digitalWrite(LED_BUILTIN, LOW);  
  delay(1000);      
}

エラーメッセージは以下の通りです。

D:\Arduino\Blink\Blink.ino: In function 'void loop()':
D:\Arduino\Blink\Blink.ino:7:3: error: expected ';' before 'delay'
delay(1000);
^~~~~

exit status 1

Compilation error: expected ';' before 'delay'

今度は2つのエラーメッセージが表示されています。

1つめの『 In function ‘void loop()’: 』は先ほどと同じです。

2つめの『 7:3: error: expected ‘;’ before ‘delay’ 』は、7行目の3文字目でエラーが発生していますが、内容をよく見ると『 ‘delay’という単語の前に’;’(セミコロン)が必要です 』と書かれています。Arduino の開発に使う言語はほぼC/C++に準拠しており、各命令の最後には『 ; 』をつけるというルールになっています。つまりエラーの発生した9行目ではなく、8行目の行末に『 ; 』が必要なのに、それがないのがエラーの原因です。

このように、エラーメッセージで指摘された箇所よりも前にエラーの原因がある場合もありますので、エラーメッセージの内容をよく読んで判断する必要があります。残念ながら Arduino IDE を日本語化してもエラーメッセージは英語のままなのですが、それほど難しい単語は出てきませんので、出てくるたびに憶えていくようにしましょう。

スケッチの改造

次に、ちょっとスケッチの内容を改造してみます。
スケッチ中に2箇所ある『 delay(1000) 』の部分を、両方とも『 delay(500) 』に変更して下さい。

C++
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(500);                     
  digitalWrite(LED_BUILTIN, LOW);  
  delay(500);                     
}

今度は、基板上の『 L 』と書かれたLEDが、先ほどより短い間隔(0.5秒ごと)で点灯→消灯→点灯…と点滅を繰り返すはずです。

最初のうちは、このようにサンプルプログラム内のパラメータなどを変えてみて、動作がどのように変化するか試してみるのも、勉強のとっかかりとしてはよいと思います。

スケッチの上書き保存

一度『名前をつけて保存』したスケッチを、同じ名前で上書き保存するには、メニューから『ファイル』→『保存』と選択(または CtrlS を同時に押下)します。入力途中でも、コンパイルでエラーが発生している状態でも保存できます。ある程度大きなプログラムを作成しているときには、停電など不慮の事故に備えて小まめに保存することをオススメします(キーボードの CtrlS

まとめ

  • Arduino のプログラムのことを『スケッチ』という
  • プログラムの文法はC/C++に準拠している
  • 文法的な間違いがあった場合、間違いの内容が行や文字数とともに表示される
  • プログラム入力中でも、キーボードで ctrls と入力することで上書き保存できる

コメント

タイトルとURLをコピーしました