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

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

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

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

Q&A

解決済

3回答

8651閲覧

arduinoを使った出力最大値のリアルタイム処理について

Uka

総合スコア28

C

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

1グッド

0クリップ

投稿2018/08/04 13:14

前提・実現したいこと

arduinoを使ってリアルタイムにアナログ値を取得しながら、一定データ数ごとの最大値を求めるプログラムを作成したい。(下記は100データごとの最大値を求めるプログラム)

発生している問題・エラーメッセージ

コンパイルは通るが、計算結果が表示されない。

該当のソースコード

int sensorpin[100];
const int sensorPin = A5;

void setup() {
Serial.begin(57600);
Serial.println(maxv(sensorpin,100));

}

void loop() {
int sensorValue = analogRead(sensorPin);
sensorpin[100]=sensorValue;
}

int maxv(int data[], int num){
int maxnum = data[0]; //仮の最大値
for(int i=1; i < num; i=i++){
if(maxnum < data[i]) maxnum=data[i];

}
return maxnum;
}

よろしくお願いします。

退会済みユーザー👍を押しています

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

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

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

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

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

episteme

2018/08/04 13:21

"100データごとの最大値を求め"ている箇所が見当たらんのですが。
Uka

2018/08/04 13:26

void setup() { Serial.begin(57600); Serial.println(maxv(sensorpin,100)); までいったら、一番下のブロックのmaxv関数に引数を渡すように設定しているつもりなのですが、、
episteme

2018/08/04 13:28

setup() ってloop() に"先立って一回だけ"呼び出されるんじゃないん?
Uka

2018/08/04 13:34

とりあえず動作確認するにあたって、最初の計算結果だけ確認できればいいかなと思い、setup()のなかに入れています。これだとmaxv関数の計算は行ってくれないのでしょうか?
episteme

2018/08/04 13:36

setup() は loop() が動き出す"前"に呼ばれるんでしょ? ゴミ(意味のない値)が一回出力されるだけじゃない?
Uka

2018/08/04 13:42

たしかにそのとおりですね、だとすると関数の計算はされずに素通りしてしまっているということですね。loop()のなかに入れて再度確認してみます。
guest

回答3

0

void loop() {

int sensorValue = analogRead(sensorPin);
sensorpin[100]=sensorValue;
}

これはなにをやってるんでしょうか

投稿2018/08/04 13:19

y_waiwai

総合スコア87955

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

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

Uka

2018/08/04 13:22

読み込んだ100個の値を要素数100の配列にしています。
y_waiwai

2018/08/04 13:25

これでは100の配列になってません
y_waiwai

2018/08/04 13:29

それでは、 int sensorValue = analogRead(sensorPin); これはなにをしてますか
Uka

2018/08/04 13:29

そもそも配列にする必要があるのか、配列に置き換える方法であればどのように記載すればよいのでしょうか?
y_waiwai

2018/08/04 13:32

あなたはなにをしたいのでしょうか。 まずは、C言語の基礎から学習の必要があると思いますよ
Uka

2018/08/04 13:51

int sensorValue = analogRead(sensorPin); についてですが、これはA5ピンからの入力をsensorPinとして読み込み、sensorValue変数として宣言しています。 C言語は勉強しているところで、初歩的な質問で申し訳ありません。
y_waiwai

2018/08/04 13:57

そして、 sensorpin[100]=sensorValue; というのは、sensorpin配列の101番めにsensorValueを代入してます(配列の範囲外エラー)
guest

0

void loop(){
int MAX_Value=maxv(100);
Serial.println(MAX_Value);
}
です。

投稿2018/09/11 12:12

mappy

総合スコア65

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

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

0

ベストアンサー

配列を使用しないのであれば、maxvの中で
int sensorValue = analogRead(sensorPin);
を行えばよく、
int maxv(int num){
int maxnum = 0;
for(int i=1; i < num; i++){
int sensorValue = analogRead(sensorPin);
if(maxnum < sensorValue) maxnum=sensorValue;
}
return maxnum;
}
で、出来るし配列から最大値を探さないので早いです。

投稿2018/09/10 14:53

mappy

総合スコア65

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

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

Uka

2018/09/11 01:14

回答いただきありがとうございます。 配列を使わなくてもできるんですね、そうするとvoid loop() のなかも int sensorValue = analogRead(sensorPin); だけでよい気がしますね。 確認してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.40%

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

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

質問する

関連した質問