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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Arduino

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

Q&A

解決済

3回答

5180閲覧

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

bobby2128

総合スコア42

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Arduino

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

0グッド

1クリップ

投稿2017/03/09 09:55

編集2017/03/10 01:05

###前提・実現したいこと
以下のソースコードに示すように、本文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

###該当のソースコード

c

1void loop() { 2 i++; 3 delay(1000); 4 Serial.println(i); 5 if(i>10){ 6 sendData(); 7 i=0; 8 } 9} 10 11void sendData(){ 12 実行文;//(120行くらい) 13} 14

###補足情報(言語/FW/ツール等のバージョンなど)
Arduino IDE 1.8.0
Arduino M0 Pro

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

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

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

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

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

can110

2017/03/09 10:14

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

2017/03/09 10:17

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

2017/03/10 01:08

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

回答3

0

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

---以下追記

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

投稿2017/03/09 10:03

編集2017/03/09 10:16
moonphase

総合スコア6621

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

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

bobby2128

2017/03/09 10:12

moonphase様 誤解を招き申し訳ございません。 コードを確認したところ、質問の方が入力ミスでした。 従いまして質問の内容を私のコードの現状通り修正させていただきました。 ご指摘いただきありがとうございました、
bobby2128

2017/03/10 00:57

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

0

ベストアンサー

こんにちは。

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

投稿2017/03/09 14:01

Chironian

総合スコア23272

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

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

bobby2128

2017/03/10 01:00

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

0

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

voidSendData(){

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

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

投稿2017/03/09 10:08

manzyun

総合スコア2244

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

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

bobby2128

2017/03/09 10:15

manzyun様 こんにちはご回答いただきありがとうございました。 大変申し訳ございませんが、質問投稿する際に、入力を誤りました。 コードを確認するとスペースがあいておりました。 従いまして質問の内容を訂正させていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問