第24回 変数

タイマーの時間を計測する方法を検討します。

目次

タイマー機能を追加

前回までのスケッチで、スイッチを押すと、LEDを1秒に1回光らせる動作を実現することができました。

でもこれってタイマーではないですよね。スイッチを押すとLEDはずーっと点滅を続けてしまいます。

タイマーというからには、3分とか5分など、時間を計測する必要があります。

そこで、今回からタイマーらしく時間を計測する機能を追加していきます。

時間を計測するには

時間を計測するにはどうすればいいでしょうか。

スイッチを押すとLEDが1秒に1回点滅を開始するので、点滅を開始してから何回点滅したかを数えれば時間計測ができそうです。

LEDは1分間に60回点滅しますので、例えば3分タイマーにしたい場合、60回 × 3 = 180回です。つまり、3分タイマーにするには、LEDの点滅回数を数えて180回になったらストップすればいいわけです。

でも180回を数えるというのは、スケッチではどのように書けばいいのでしょうか。

数を数えるには

皆さんは、数を数える場合どうしてますか?

って聞かれても困りますよね…

例えば5回数えてください、と言われた場合、5回をどのように数えてるんでしょうか。

「どのように数えてるか?」と突然真顔で聞かれても「どのように、って、、、、、数を数えてるんです」としか答えられないですよね。

そこで、例えばLEDの点滅を5回数える場合、頭の中で数を数える様子を分析してみたいと思います。

数の数え方

例えばLEDの点滅を5回数えるという場合、普段当たり前のように5回数えることができていますが、頭の中では次の手段を使って数を数えているわけです。

  1. 今までのLEDの点滅回数を記憶しておく(開始時の点滅回数は0回)
  2. LEDが光ったら点滅回数に1を足す
  3. 点滅回数が5回になるまで を繰り返す

この(1)から(3)の動作をよくみてみると、実は今まで習得した内容が含まれています。

(2)の点滅回数に1を足す、というのは第16回の記事で習得した算術演算子が使えます。1を足す場合、スケッチで「+ 1」のように書けば(2)の動作は実現できそうです。

また、(3)は第22回で習得したwhileが使えそうですwhileは「条件が成立している間、指示を繰り返す」という動作でした。

(3)は「点滅回数が5回になるまでの間、(1)と(2)を繰り返す」という動作ですので、(3)はwhileで実現できそうです。

ここで、一つだけ今までの知識で実現できないことがあります。それは、(1)の「点滅回数を記憶しておく」という方法です

そこで、今回の記事では、「滅回数のような数字を記録しておく」というよう、スケッチ上で数字を覚えておく方法を習得して、LEDの点滅回数を数えるスケッチを作成します

数字を記録するイメージ

この段階で、C++言語で数字を記録する方法を細かく説明すると急に難しくなってしまいます。

そこで、最初にイメージをつかんでおきましょう。

C++言語では、数字を記録しておくためのメモ用紙のようなものがある、とイメージしてください。こんな感じです。

メモ用紙

人間は頭の中で数字を記憶しますが、コンピュータはこのようなメモ用紙に記録するイメージで記憶している、と考えてください。

このメモ用紙は、私たちがよく使うメモ用紙とは性質がちょっと違います。このメモ用紙は以下の性質を持っています。

  1. 何度でも書き直しができる
  2. メモ用紙にはサイズがいくつかあり、それぞれのサイズで書ける数字の範囲が異なる
  3. メモ用紙には必ず「タイトル」が必要
  4. メモ用紙を使いたいときは「メモ用紙を用意してください。サイズは〇〇で、タイトルは□□にしてください」とスケッチに書く
  5. メモ用紙を用意してもらうと、適当な数字が書かれている

それぞれの内容を具体的に説明します。

1. 何度でも書き直しができる

普段使うメモ用紙と同じように、何度でも書き直しができます。

メモ用紙なので当たり前ですが、Arduinoボード内部のメモ用紙はちょっと変わった性質があります。

普通のメモ用紙のように消しゴムで消して白紙にすることはできません。必ず何かの数字を書く必要があります

何だか不思議なメモ用紙ですね。

2. メモ用紙にはサイズがいくつかあり、それぞれのサイズで書ける数字の範囲が異なる

メモ用紙にはたくさんのサイズがあります。「サイズ」というのは具体的にはメモ用紙の大きさ(面積)で、それぞれのサイズで書ける数字の範囲が異なっているんです

例えば一番小さいサイズのメモ用紙は、以下のように0から255までの整数を書くことができます。(「255」ってなんだか中途半端ですよね。255が書けるんだったら256以降も書けそうですが、そうではないところがこのメモ帳の特殊な性質です)

一番小さいサイズのメモ用紙

この範囲の数字では足りないということであれば、大きいサイズのメモ用紙もあります。このメモ用紙は0から4,294,967,295までの整数を書くことができます。

一番大きいサイズのメモ用紙

メモ用紙のサイズは他にもいろいろあります。例えばマイナスの数字が書けるものや、小数をかけるものもあります。

C++言語では、なぜこのようにいくつかのサイズのメモ用紙があるんでしょうか?

たくさんのタイプを用意するのは面倒なので、一番大きいサイズの整数も小数も書けるメモ用紙が1種類あればいいような気もします。

なぜたくさんサイズがあるかについては、このシリーズ記事の後半で明らかにしていきます。

3. メモ用紙にはタイトルが必要

今までの説明では単にメモ用紙に数字を書いていましたが、メモ用紙には必ずタイトルが必要なんです

メモ用紙の名前

というのは、メモ用紙は複数使うことができます

メモ用紙の数字は何度でも書き直しができる、と説明しました。メモ用紙の数字を書き直すとき、どのタイトルのメモ用紙の数字を書き直すかを指定する必要があります。

そこで、メモ用紙を指定するために必ずタイトルが必要になるわけです

なお、タイトルに使用できる文字は大文字、小文字のアルファベット、数字と一部の記号だけです。上の例は、メモ用紙のタイトルが「count」という名称で、「189」という数字が記録してあります。

このメモ用紙を書き直すときは、「countというタイトルのメモ用紙の数字を200に書き換えてください」という感じでスケッチに書きます。

4. メモ用紙を使うとき、「メモ用紙を用意してください。サイズは〇〇で、タイトルは□□にしてください」とスケッチに書く必要がある

メモ用紙を使うときは、前もって「このサイズのメモ用紙を、タイトルは〇〇で用意してください」とスケッチに書く必要があります

スケッチに「0〜255まで書けるメモ用紙を、countというタイトルで用意してください」と書くと、先ほどのようなメモ用紙を用意してくれます。

例えば、countというタイトルのメモ用紙を用意してもらってないのに、「countというタイルのメモ用紙の数字を200に書き換えたください」なんてスケッチに書いたら、例のごとくArduino IDEに怒られますので注意が必要です。

5. メモ用紙を用意してもらうと、適当な数字が書かれている

1番目の項目で「普通のメモ用紙のように消しゴムで消して白紙にすることはできません。必ず何かの数字を書く必要があります」と説明しました。

メモ用紙を使うときは、サイズとタイトルを指定して新しくメモ用紙を用意してもらいますが、用意してもらったメモ用紙にも数字がすでに書かれているんです。

普通の感覚ですと、新しくメモ用紙を用意してもらった場合、書かれている数字は「0」が自然ですよね。でもArduinoボードにメモ用紙を新しく用意してもらうと、適当な数字が書かれているんです。

例えば一番小さいサイズのメモ用紙を用意してもらうと「178」とか適当な数字が書かれています。

新規のメモ用紙に書かれている数字は「0」ではないことに注意する場面もありますので、この点も重要です。


C++言語の数字を記録する方法のイメージはだいたいこんな感じです。この性質をしっかりと頭に入れて、実際のC++言語での書き方を習得していきましょう。

変数の型

C++言語を含めどのプログラミング言語にも、先ほど説明した数字を記録するメモ用紙のようなものがあります。

このメモ用紙のことを「変数」(へんすう)と呼んでいます

メモ用紙は何度でも書き直しができますよね。このように何度でも内容を変えることのできる数、ということで「変数」とイメージするとわかりやすいと思います。(数学でも「変数」が出てきますが、プログラミングでも数学の変数と同じ意味で使用しています)

また、先ほどの説明でメモ用紙にはいくつかサイズがある、と説明しました。

このサイズのことを「型」(かた)と呼んでいます

変数の型によって記録することのできる数字の範囲が異なります。(メモ用紙のサイズによって書くことのできる数字の範囲が異なる、とイメージしてください)

それでは、C++言語の変数にはどのような型があるか確認しましょう。

扱える数字の範囲は小さい順に「char/byte」型、「int」型、「long」型です。

英語なので難しく感じてしまうかもしれませが、要するに「小・中・大」や「S・M・L」というイメージでOKです。

また、同じサイズでも、「unsigned」が付いている型はプラスの整数のみ、「unsigned」が付いていない型はプラスとマイナスの数字を扱うことができます。

「signed」は日本語で「符号付き」という意味があります。
「un」は否定を意味するので、「unsigned」は「符号なしの」という意味で、「プラスマイナスの符号が扱えない」という意味合いになります。

なんだか急にいろいろと難しい単語が出てきました。

さらに、書ける数字の範囲もずいぶんと中途半端ですよね。

このような状況ですので、さすがにこれは覚える必要はありません。「変数の型がある」という理解をしておけば大丈夫です。


ところで、上の表の注意書きになんだか怪しいことが書いてあります。

「※ int型とunsigned int型はArduinoボードによって範囲が異なります」

実は「int型」は、コンピュータの種類によって数字の範囲が「0〜65536」か「0〜4294967295」のどちらかで、コンピュータの構造に依存しています。

詳しくはArduino公式サイトに説明があります。英語なので読みづらいですが、ご興味があれば参考にしてみてください。


ところで、「int型」の数値範囲はArduinoボードによって異なるのでわかりづらいですよね。

そこで、より明確な型も用意されています。スケッチでは次の型の名前も使用できます。

こちらもちょっと覚えづらいかもしれませんが、名前に規則がありますので確認しておきましょう。

最初に「u」が付いている型は符号なしの型です。「unsigned」(符号なしの)の「u」の意味です。

次の「int」は全ての方に共通で「integer」、日本語では「整数」という意味です。

次の数字は「8」「16」「32」がありますが、「小・中・大」や「S・M・L」というようにメモ用紙のサイズを表すイメージです。

最後の「_t」は「type」、日本語では「型(タイプ)」の意味になります。

これらの型の名前は

「符号なしか符号付きか」+「int」+「サイズ」+「_t」

という構成になっていますので、比較的覚えやすいと思います。

この入門シリーズでは、数字の範囲を明確にするためにこの型の名前を使用します。

この入門シリーズでは、変数の型を意識するようにしますが、実際のスケッチでは「とりあえずint型を使う」というケースが多いです。
センサーの値を読み取ったり、何か計算をする場合、「int型」であれば「 − 32,768 〜 32,767 」で十分なケースが多いので、何か変数を使う場合、int型を使っているケースが多くみられます。

変数の名前

メモ用紙を区別するために、タイトルをつける必要があることを説明しました。

このタイトルのことを「変数名」と呼んでいます。

変数名は自由につけることができますが、Arduino IDEでは使用できる文字が限られています。

次の文字を使用することができます。

残念ながら日本語は使えませんので、ローマ字表記または英単語で変数名をつける必要があります。

変数の宣言

変数の型と名前、つまりメモ用紙のサイズとタイトルの付け方がわかったところで、次はArduinoボードにメモ用紙を用意してもらう方法を確認していきます。

キッチンタイマーのスケッチでは、メモ用紙を使用してLEDの点滅回数を数えていきます。数を数える、つまり「カウント」するので、メモ用紙のタイトルは「count」にしようと思います。

キッチンタイマー時間計測のメモ用紙

最初は3分タイマーを作ろうと思います。3分は180秒ですので、変数の型は0〜255まで扱うことのできる「uint8_t」にします。

実際のスケッチでは、以下のような変数を用意することになります。

キッチンタイマー時間計測用の変数

まとめると、キッチンタイマーのスケッチで時間を計測するために、「uint8_t型で変数名がcountの変数」を使用する、ということになります。

変数を使用する場合、あらかじめ「どの型の何という名前の変数を用意してください!」とスケッチに書く必要があるんでしたよね。

このように「変数を用意してもらう」ことを「変数を宣言する」と呼んでいます。(「宣言する」な んてなんだか大げさですよね)

スケッチでは、変数の宣言を次のように書きます。

例えば、「uint8_t」型の「count」という名前の変数を宣言する場合は、スケッチに次のように書きます。

uint8_t count;

これで「0〜255までの数字が書ける『count』というタイトルのメモ用紙」が使えるようになります。この変数宣言を見たとき、頭の中にタイトルが付いたメモ用紙をイメージしていただけるとArduinoボードの動作が理解しやすくなると思います。

このように変数宣言して用意してもらった「countというタイトルのメモ用紙」には、適当な数字(0〜255までのいずれかの数字)が書かれています。使うときは注意が必要です。

次回の記事では、この変数を使って、どのように時間計測をするか考えます。

更新履歴

日付内容
2019.8.25新規投稿
2021.8.24新サイトデザイン対応
2024.12.3変数の性質の説明を追加
説明シート更新
通知の設定
通知タイミング
guest
0 コメント
新しい準
古い順 一番投票が多い
本文中にフィードバック
全てのコメントを見る
目次