ここから本文です

arduinoのピンの定義仕方についての質問なのですが、void setup()より前の行にpin...

アバター

ID非公開さん

2017/10/1414:52:56

arduinoのピンの定義仕方についての質問なのですが、void setup()より前の行にpinの関数?を定義する事はできるのでしょうか?

例えば、pin1とpin2をOUTPUTにしたい場合、void setupの後に書きますが、もしvoid setupの前に書くとしたらどの様に書くのか疑問に思いました。
くだらない質問ですがどうかよろしくお願い致します。

閲覧数:
91
回答数:
2

違反報告

ベストアンサーに選ばれた回答

kou********さん

2017/10/1415:35:10

setup() は初めの一回しか呼ばれません、loop() は繰り返し実行されます
setup() で ピンモード設定関数 として呼び出せば可能です



void pin_ini(void){
pinMode( pin1,OUTPUT );
pinMode( pin1,OUTPUT );
}

void setup(){
pin_ini();
}

  • アバター

    質問者

    ID非公開さん

    2017/10/1415:38:23

    わかりやすい解答どうもありがとうございます。
    あの、pin_ini(void)ではダメなのでしょうか?
    なぜはじめにvoid pin_ini(void)のようにvoidをつけるのですか?
    どうかよろしくお願いします。

  • その他の返信(4件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

qui********さん

2017/10/1417:59:52

プログラムの実行順序の話でなくて、「記述」だけの話ですか?

C/C++(それをベースにしたArduino言語)では、コンパイラが元々知っているいくつかの「予約語」以外は、どこかでそれがコンパイラに教えられている必要があります。Arduino言語では、プログラム中に記述しなくても結構多くの情報があらかじめ提示されているですが、それはともかく。

関数の呼び出しは、関数の中からしか出来ません。ですからpinMode関数の呼び出しは何かの関数に含むようにする必要がありますが、それを含む関数は、そういう関数があるよ、とコンパイラに教えてやる(使う前に定義を書いてやる)ようにすればいいのです。

例えば
//init()関数を定義する
void init(){ //C++では、戻り値の型は省略出来ないので、戻り値がないときはvoidを記述する。一方、仮引数リストのvoidは省略できる。
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
}

void setup(){
init(); //先に定義したinit関数を呼び出す
//その他の処理
}

などという記述は可能です。
なお、先にvoid init()という関数が何処かにあると教えてやれば、init()関数の定義はどこかあとの方にあってもかまわないので、

void init(); //「プロトタイプ宣言」によってinit()関数の存在、その形式をコンパイラに教えてやる

void setup(){
init(); //定義がどこかにあることを信じて呼び出し処理を記述する
//その他の処理
}

void loop(){
//諸々の処理
}

void init(){ //後ろの方で関数の内容を定義してやる
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
}

ということも出来ます。

このように、定義を先に記述するか後に記述するかというのは言ってしまえば「どうにでもなる」ことです。

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる