こんにちは!いしかわです。今回からいよいよプログラミングに挑戦です。トレーニングトレーサーにはサンプルプログラムが付属しています。サンプルプログラムをトレーサーにプログラムし、どうしてこの動作になったのかを考えることで、プログラムの意味を勉強することができます。
プログラミングって何?
そもそもプログラミングって何でしょうか?「プログラミング」とは「プログラミング言語」を用いてコンピューターに命令を与えることを言います。
コンピューターはどう考えるの?
コンピューターは「自分で考える」ということができません。そのため、人間が命令を出して動かす必要があります。この命令を文字で表したものを「プログラム」と言います。
私たちの身近にも「プログラム」という言葉がありますよね。巷のブログではよく運動会で例えられたりしますが、ここで使う「プログラム」とは、運動会がどういう順番で進んでいくかを示したものです。人間はこのプログラム通りに運動会を進めようと動きますので、プログラムは人間にとって運動会を進めるための「命令書」と言えるのではないでしょうか。
コンピューターにとっての「プログラム」もコンピューターがするべき仕事の手順が書いてある「命令書」です。
どうやって「命令」を与えるの?
では、どうやってコンピューターに命令を出すのでしょうか。サンプルプログラムのSTEP1を例に勉強していきましょう。
STEP1 LEDを光らせてみよう
STEP1のサンプルプログラムは以下の通りです。
int LED_Pin= D13; void setup() { ?// put your setup code here, to run once: ?pinMode(LED_Pin,OUTPUT); } void loop() { ?// put your main code here, to run repeatedly: ?digitalWrite(LED_Pin,HIGH); //LEDを点灯 ?delay(1000);? ? ? ? ? ? ? ? //1秒待つ ?digitalWrite(LED_Pin,LOW);? //LEDを消灯 ?delay(1000);? ? ? ? ? ? ? ? //1秒待つ }
このサンプルプログラムは、「トレーニングトレーサーのLEDをチカチカ光らせろ」という命令が書いてあります。日本語では1行で命令が完了しますが、プログラムに表すと何行も書いてありますね。コンピューターはただ「トレーニングトレーサーのLEDをチカチカ光らせろ」と命令しても、どのように動けば良いか理解することができないのです。命令はもっと細分化して行う必要があります。
命令を「細分化」する
ではこのプログラムの中でどのように命令を細分化しているのでしょうか。今回はSTEP1のサンプルプログラムを「命令を細分化する」という部分に着目して見ていきましょう。
今回勉強するのは以下のプログラムです。
void loop() { ?// put your main code here, to run repeatedly: ?digitalWrite(LED_Pin,HIGH); //LEDを点灯 ?delay(1000);? ? ? ? ? ? ? ? //1秒待つ ?digitalWrite(LED_Pin,LOW);? //LEDを消灯 ?delay(1000);? ? ? ? ? ? ? ? //1秒待つ }
まず、void loop() {}という関数です。
「そもそも関数って何?」という説明は置いておいて、ここでは「 {}内のプログラムを繰り返し行え」という意味の定型文だと覚えてください。
ちなみに{}内の「//」の行は「コメント」と呼び「//の後に記入した文字はプログラムとは関係ない」という意味です。プログラミングの世界では記入したプログラムの補足説明でよく使われます。そのため、//の後には英語や日本語の説明が記入されています。
今回は{}内に以下の4つの命令文があります。
??digitalWrite(LED_Pin,HIGH); //LEDを点灯 ??delay(1000);? ? ? ? ? ? ? ? //1秒待つ ??digitalWrite(LED_Pin,LOW);? //LEDを消灯 ?? delay(1000);? ? ? ? ? ? ? ? //1秒待つ
各命令文の//の後に日本語で説明があるので、わかりやすいですね。???までを日本語にすると以下の通りです。
?LEDを点灯 ?1秒待つ ?LEDを消灯 ?1秒待つ
つまり「?から?までの動作を繰り返し行え」と命令することで、LEDをチカチカ点滅させることができるのです。

以上のように、人間同士だと簡単にできることでも、コンピューターを相手にすると一つ一つの動作を細かく考えて命令する必要があります。
プログラミングを知る前の私は「コンピューターは人間より頭が良い」と思っていました。確かに、コンピューターは人間ではできないことがたくさんできますが、「コンピューターに命令を出す」ということは思った以上に地道な作業なのだと実感しました。アールティでは様々なロボットを開発していますが、ロボットのなめらかな動きの裏には途方もない量のプログラムが書かれていて、エンジニアは失敗と修正を何度も繰り返し、試行錯誤しているのだなと思いました。エンジニアの苦労が少し垣間見えた気がします。
次回もお楽しみに!
