🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

1回答

2540閲覧

Arduinoの文法がわからない

Rk_kita

総合スコア4

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2019/11/28 02:21

編集2019/12/04 00:24

https://www.vstone.co.jp/robotshop/index.php?main_page=product_info&cPath=270_367&products_id=4612
こちらのキットを使ってArduinoの使い方を学んでいるところなのですが、サンプルスケッチの記述によくわからない部分があります。
https://www.instructables.com/id/Getting-Started-of-Arduino-Kit-Absolute-Beginner/
サンプルは全てこちらのリンク先の「Download Code~」からダウンロードできます。

Arduinoに関して分からない点はたくさんあるのですが、特に知りたいのは2点です。

#include <boarddefs.h> #include <IRremote.h> #include <IRremoteInt.h> #include <ir_Lego_PF_BitStreamEncoder.h> #define DEBUG /* Part9 USE IRreceive and IR remote Displayed on the segment code */ #include <IRremote.h>//load IRremote library #include "TM1637.h"//load Segment display library #define CLK 4//pins definitions clk for TM1637 #define DIO 5//pins definitions dio for TM1637 TM1637 tm1637(CLK,DIO);//get Segment display controler IRrecv ir(A0);//an instance of the IR receiver object,A0 is IRreceive pin; decode_results result; // container for received IR codes long codes[10]= // this array is used to store infrared codes {0xFD708F,0xFD08F7,0xFD8877,0xFD48B7,0xFD28D7,0xFDA857, //0 1 2 3 4 5 0xFD6897,0xFD18E7, 0xFD9867,0xFD58A7}; // 6 7 8 9 void setup(){ tm1637.init(); tm1637.set(BRIGHT_TYPICAL); ir.enableIRIn();} void loop(){ if(ir.decode(&result)){ delay(100); int i=-1; while(!(i>9||result.value==codes[++i])); ir.resume(); // resume receiver if(i<10){ tm1637.clearDisplay(); tm1637.display(3,i);//IRremote value }}}

これはサンプルの「Part9」で、リモコンで押したボタンの数字をセグメント式のディスプレイに表示させるものです。

質問1
「tm1637.init」や「ir.resume」のような関数?の表記はどういう意味ですか?
「Serial.begin」のようにドットを使った関数が使えることはわかるのですが、上記のような関数は検索してもでてきません。
どこで定義してある、どのような働きをする関数なのでしょうか。
「tm1637.~」についてはヘッダファイル?がインクルードされているようですし、そのことなのかなと思っています。
しかし「ir.~」に関してはどこを探しても見つからないのでわかりません。

質問2
loop関数中の動きが知りたいです。
関数外で定義されている「codes」の中にそれぞれのリモコンからの信号が入っているのはわかりましたが、数字を表示するためのデータがどこに入っていて、どのようにしてそれを引き出しているかがわかりません。
このプログラムを書き換えてリモコンの他のボタンでも数字が表示できたり、数字を増やしたりしてみたいと思っています。
C言語を使って少しPICを動かしたことがあるので、比較的簡単にできると思っていたのですが…

分かりやすく教えていただけると助かります。

追記

TM1637 tm1637(CLK,DIO);//get Segment display controler IRrecv ir(A0);//an instance of the IR receiver object,A0 is IRreceive pin;

この(CLK,DIO)や(A0)は何を意味しているのでしょうか?
なにかの引数ですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

「tm1637.init」や「ir.resume」のような関数?の表記はどういう意味ですか?

TM1637クラスのインスタンスtm1637のメンバ関数initを呼び出す
IRrecvクラスのインスタンスirのメンバ関数resumeを呼び出す
です。

どこで定義してある、どのような働きをする関数なのでしょうか。

プログラミングにおいて「定義」と「宣言」という言葉があってそれぞれ意味が違うのでその辺を知らないと正確な話はできませんが、とりあえずこういう関数があります、というのが「宣言」、関数の内容はこんなになっています、というのが定義。で、関数を呼び出すのに必要なのは宣言で、#includeしているヘッダのうちのどこかに記述されているはずです。そもそも#includeというのは、記述されたファイル名のファイルを内部的にその場に展開する、という命令ですから、プログラムのそこまでのどこかに記述されているはず、という言い方でもいいかも知れません。
どのファイルに...と聞かれたら、インクルードしているファイル全てをそれぞれ調べるしかありませんが、IRRecvというクラス名からするとIRemote.hかなぁ、と想像します。
さらに定義については、.cppファイルか.inoファイルのどこかにある、としか言えません。プログラマ用のエディタだと、ソースファイル群を解析して定義場所に操作一発で飛んでくれるようなものもありますが、ArduinoIDEはそうではないので、まずはファイル名と機能名をたよりにライブラリのファイルを漁ってみることになると思います。

数字を表示するためのデータがどこに入っていて、どのようにしてそれを引き出しているか

みたところTM1637クラスのメンバ関数display (TM1637::displayという書き方をするでしょう)の仕事のようです。ライブラリの説明にその関数の使い方が書いてあることを期待して探すか、見つからなければヘッダにコメントで説明が書いてないか、それでもなければソースコードを読み下して動きを調べるか、そんなことになるでしょう。

C言語を使って

ArduinoはC++ベースです。C++としてあまり凝った使い方はしないことが多いですが、今回のクラスのような基本的な話はそれなりに使いますので、C++の入門書も手元に置いておいたほうがよろしいかと思います。

投稿2019/11/30 02:55

thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Rk_kita

2019/12/04 00:25

丁寧な回答をありがとうございます。 定義と宣言について理解していたつもりですが、使い方があやふやだったようです。 やはりArduinoでは定義場所に飛ぶことはできないのですね。 地道に探していこうと思います。 ヘッダのコメントで数字に関する説明はありませんでした… やはりソースコードを調べるしかないのですね。 C++について、Cがちょっと変わっただけくらいに思っていたので、そちらの方もしっかり調べてみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問