Keyboardライブラリの使い方を深掘りして、「オブジェクトとメソッド」という新しい考え方を習得します。
構造体みたいな関数みたいなもの
前回の記事で、ちょっと不便な、というか正直なところ、まったく使い物にならないキーボードを製作してしまいました。失礼いたしました。
ただ、キーボードの基本機能である「PCに接続したときにUSBキーボードとして認識してもらう」機能と「PCに文字データを送る」機能を実現することができました。
「作った意味はあったんだ」、とご納得いただければと思います。
このシリーズでは、これからキーボードとしての実用的な機能を製作していきます。(実用的かどうかは疑問の余地がありますが…)
そのとき、次の2つの機能を利用していくのですが、このスケッチは構造体みたいな関数みたいな書き方でちょっと謎ですよね。
Keyboard.begin(); // キーボードとして認識してもらう
Keyboard.print("A"); // 文字データをPCに送る
今回は、このような書き方に詳しく説明します。
オブジェクトとメソッド
上の2つの関数のようなものは、次の特徴を持っています。
このように、Keyboard
という、一見すると変数に見える部分と begin()
または print()
という関数に見える部分があります。さらにそれらの間には「 . 」があります。
これらはまったく新しい概念なので、なかなかわかりやすい説明が難しいので、最初に用語を説明してしまい、あとからその考え方を説明します。
「オブジェクト」と「メソッド」
これらは次のように「 . 」の前の部分を「オブジェクト」、後の部分を「メソッド」と呼びます。
突然よくわからない言葉が出てきました…
最初はとっつきづらい考え方なので、このシリーズを通して一緒に理解を深めていきましょう!
今回の記事で、オブジェクトとメソッドについて説明しますが、読み終わっても分かったような、わからなかったような…?、という感じになると思います。
でも心配はいりません!
次回以降の記事では実際にいろいろな使い方をして理解を深めていきますので、今回の記事を読んでよく分からなくても、徐々に理解していけば大丈夫です!
オブジェクトとは?
まず「オブジェクト」とはどのようなものなのか理解していきます。
スケッチでは「変数」をよく使いますが、この「変数」と比較しながら「オブジェクト」の特徴を確認していきます。
最初に「変数」の復習です。例えば次のようにスケッチに書いたとします。
uint8_t count;
この場合は次のように、 count
という名前のuint8_t
型(0〜255)の数字が書けるメモ用紙が用意されるイメージでしたよね。
「変数」でできることは、「書いてある数字を読み取る」「数字を書き込む」という程度です。
また、変数型によって使い方が変わることはなく、変数であれば同じ扱い方をします。
一方で、「オブジェクト」と呼ばれる種類のKeyboard
は、キーボードそのものなんです。
「なんのこっちゃ?」って感じですよね。
この「オブジェクト」であるKeyboard
についてもう少し深掘りします。
スケッチに登場するKeyboard
は、先ほどの「変数(=ただのメモ用紙)」とはまったく異なり、Keyboard
自身が、実世界のキーボードとしての振る舞い方を知っている「物」なんです。
このKeyboard
は、「PCに接続したときにPCとデータをやり取りしてキーボードとして認識してもらう方法」や「キーボードとしてPCに文字データを送る方法」を知っているんです。
次の「メソッド」の説明につながるのですが、このKeyboard
にそれらの処理をしてもらいた場合、Keyboard
のあとに.
を書いて、そのあとにやってもらいたい処理を書きます。
Keyboard
は「変数」とは異なり、いろいろな処理を知っているものです。
このKeyboard
というものを一般的になんと呼んだら良いか難しいですよね。
これは「物」としか言いようがないですよね。
このようにスケッチに出てくるKeyboard
は変数とは異なり、実際のキーボード同じように振る舞いを知っている「物」なんです。
「物」は英語で「Object」(オブジェクト)です。
そのため、スケッチに出てくるKeyboard
のことを「オブジェクト」と呼んでいます。
なんだかわかったようなわからないような、という感じですよね。
そのような中で申し訳ないのですが、このオブジェクトに処理をしてもらうための「メソッド」についても理解していきましょう!
メソッドとは?
ここまでの説明で、オブジェクトは自身の振る舞いを知っている、ということを説明しました。
次に、そのオブジェクトに対して、実世界と同じように振る舞ってもらう方法を確認します。
オブジェクトに対して、処理(振る舞い)を指示するのが「メソッド」です。
メソッド(method)は日本語では「やり方」「方法」などという意味です。
「メソッド」はオブジェクト名のあとに.
をつけて、その後ろに関数と同じ書き方で振る舞いを指示します。
例えば、Keyboardというオブジェクトは、PCと接続を確立するためのbegin()
(引数なし)というメソッドがあります。
キーボードオブジェクトに対して、begin()
メソッドを指示する場合は、前回作成したスケッチのように次のように書きます。
Keyboard.begin();
これは、Keyboard
オブジェクトに対して、begin()
メソッドを指示する、つまり接続処理を指示する、というイメージです。
注意点としては、メソッドはArduino Microに対する指示ですので、最後に;
をつける必要があります。
また、メソッドは普通の関数と同じように引数を取ることもあります。
PCに文字データを送る命令は以下のように書いていましたよね。
Keyboard.print("A");
print()
はPCに文字データを送るメソッドですが、送る文字データは引数に書きます。
これまで、Keyboard
オブジェクのメソッドとしてbegin()
とprint()
の2つのメソッドを見てきました。
実はKeyboard
オブジェクトには他にもいろいろなメソッドがあります。
そこで、最後にKeyboardオブジェクトのメソッドにはどのようなものがあるか、一通り確認しておきましょう。
Keyboardライブラリのメソッド一覧
Keyboard
オブジェクトは実世界のキーボードの振る舞いをしますので、物理的なUSBキーポードが持つ機能を実現するメソッドを一通り持っています。
メソッドを一通りまとめますが、これはあくまで参考です。
すべて理解したり覚えたりする必要はありません。
これだけのメソッドがあれば、実世界のキーボードのように振る舞えるな、と思っていただければ十分です。
メソッド | 動作 |
begin() | PCがUSBキーボードとして認識するようにデータ通信を行う (引数なし) |
end() | USBキーボードの動作を終了して、PCとのキーボード接続を解除する(引数なし) |
print() | 引数で指定した文字データをPCに送信する |
println() | 引数で指定した文字データをPCに送信後、改行コード(=リターンキー)を送る |
write() | 引数で指定した文字データをPCに送信する。引数は1文字のみ |
press() | 引数で指定したキーが押されている状態にする 例) Keyboard.press(KEY_LEFT_CTRL); 左側のコントロールキーを押し続ける状態にする |
release() | 引数で指定したキーを離す 例) Keyboard.release(KEY_LEFT_CTRL); 左側のコントロールキーを離す |
releaseAll() | 現在押され続けている全てのキーを離す(引数なし) |
例えば、コピぺするときに、Windowsの場合は「Ctrl + C」、macOSの場合は「command + C」を押しますよね。
これと同じことをスケッチで実現するには、press
メソッドでコントロールキーまたはコマンドキーを押した状態にして、print
メソッドで「C」の文字を送ると、「Ctrl + C」または「command + C」を押した状態になります。
そのあと、release
メソッドでコントロールキーまたはコマンドキーを離した状態にすれば完了です。
更新履歴
日付 | 内容 |
---|---|
2021.7.23 | 新規投稿 |
2025.2.2 | 説明内容一部補足 |