質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

88.92%

Arduino, C言語, 関数を読んでも実行されない。

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,506

bobby2128

score 42

前提・実現したいこと

以下のソースコードに示すように、本文loop()の中でカウントが11になってから関数sendData()を呼び、関数sendData()の中を実行したいです。(関数sendData()の中にもシリアルモニタに出力する内容の文が書かれています)
(※関数sendData()の実行中は、本文loop()の実行を止めたい。というより通常止まっているはずだという認識です。)

ところが、以下のシリアルモニタ上の表示結果に示すように、本文loop()の内容をずっと繰り返し、関数sendData()の内容を一向に実行しないので、これを以下のように直したいです。

「関数sendData()が呼ばれると、関数sendData()の中身を実行し、本文loop()の実行は関数の実行文が完了するまで止まる。」

イメージと実際の挙動が大きく異なるため、何かアイデアや解決案などございましたらご教授お願いいたします。

シリアルモニタ上の表示

1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11

該当のソースコード

void loop() { 
  i++;
  delay(1000);
  Serial.println(i);
  if(i>10){
    sendData();
    i=0;
  }
}

void sendData(){
  実行文;//(120行くらい)
}

補足情報(言語/FW/ツール等のバージョンなど)

Arduino IDE 1.8.0
Arduino M0 Pro

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • can110

    2017/03/09 19:14

    誤字やloop()末尾の「}」が抜けていたりしています。長すぎない程度に「そのまま」のソースを提示ください。

    キャンセル

  • can110

    2017/03/09 19:17

    質問文中にいくつも現れる「関数」はどの関数を指しているのか(loop?sendData?)、「本文」とはどの部分化を明示ください。

    キャンセル

  • bobby2128

    2017/03/10 10:08

    ご指摘いただきありがとうございました。ご指摘いただきました箇所につきまして可能な限り修正したしました。関数の中を記載すると冗長になるため、現在修正中のもので不具合が続くようであれば追って縮小した形で記載させていただきます。お手数おかけいたしまして申し訳ございません。

    キャンセル

回答 3

+3

呼んでいるのは"sendData()"なので、
質問に掲載している"SendData()"ではなく、別のところに定義してある"sendData()"が呼ばれているということではないでしょうか?
大文字小文字は区別されます。

---以下追記

呼ばれた関数の冒頭で文字列"@"とかを表示してみては如何でしょうか。
それでもし表示されるなら、呼ばれているけどその部分の条件判定等で呼ばれていないと勘違いしているだけかもしれません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/09 19:12

    moonphase様
    誤解を招き申し訳ございません。
    コードを確認したところ、質問の方が入力ミスでした。

    従いまして質問の内容を私のコードの現状通り修正させていただきました。
    ご指摘いただきありがとうございました、

    キャンセル

  • 2017/03/10 09:57

    moonphase様
    おはようございます。コメントいただきありがとうございます。
    シリアルプリントの実行文がいくつかの条件式の中にあるので、挙動をみるために条件の前に出力させたり、
    条件の変更や各条件文に確認用のシリアルプリントを出力させてみます。

    ありがとうございます。

    キャンセル

checkベストアンサー

+2

こんにちは。

loop()以外の場所で変数iの値を変更していない限り、sendData()は呼ばれている筈です。
sendData()関数内の処理が分からないのでなんとも言えませんが、sendData()の中でシリアル・データを出力していることは間違いないですか?
試しにsendData()の先頭でSerial.println(123);のようなことをやってみるとどうなりますか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/10 10:00

    Chironian様
    いつもお世話になります。コメントいただき誠にありがとうございます。
    sendData()の中でいくつかの条件式があり、困っていましたが、まずはご提案の通り関数の中のsendData()の先頭で出力させて、関数に飛んでいることを確認し、次に各条件分岐の中に確認用のシリアルプリントを記載し挙動を確認してみます。ありがとうございます。

    キャンセル

+1

おそらくそんなことは(原文のソースコードはそんなことは)無いとは思いつつも、気づいた点として、

voidSendData(){

void と SendData()の間にスペースが無いために、関数として認識されていないのではと勝手に思ったりします。

Cは疎いので、
「そんなもの、普通コンパイル時にエラーが出るわ!」
という叱責は承ります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/09 19:15

    manzyun様
    こんにちはご回答いただきありがとうございました。
    大変申し訳ございませんが、質問投稿する際に、入力を誤りました。

    コードを確認するとスペースがあいておりました。
    従いまして質問の内容を訂正させていただきました。

    キャンセル

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

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る