複数の出力をシリアルモニタに列ごとに個別に正しく表示したい
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
int val[] = {0,0,0,0};
long vt[] = {0,0,0,0};
long sp[] = {0,0,0,0};
void setup() {
// put your setup code here, to run once:
Serial.begin(57600);
}
void loop() {
// put your main code here, to run repeatedly:
val[0] = analogRead(A0);
val[1] = analogRead(A1);
val[2] = analogRead(A2);
val[3] = analogRead(A3);
for (int i = 0; i < 4; i++ ){
vt[i] = map(val[i],0,1023,0,5000);
sp[i] = map(vt[i],1500,3300,-45,-39);
}
Serial.print(sp[0]); //Arduinoのシリアルモニタでの音圧の確認用 Serial.print(" "); Serial.print(sp[1]); Serial.print(" "); Serial.print(sp[2]); Serial.print(" "); Serial.print(sp[3]); /*Serial.write(sp[i]); //テキストファイルに出力用*/ delay(100); }
}
試したこと
単一のマイクでも試しましたがうまくいきませんでした。
補足情報(FW/ツールのバージョンなど)
Arduino UNO
使用マイク ADMP401 http://www.analog.com/ADMP401
どういうふうに表示されるんでしょうか
どうなったら「うまくいった」ことになるのですか
シリアルモニタの表示画面を追加しました。画像のとおり何も表示されませんでした
「このif文はシリアルモニタの入力欄に何かを入力すると走り出す」
とありますが、入力は与えていますか?
入力を忘れておりました。入力した結果の表示を上に表示しました。
マイクが4つあるのでそれぞれの出力結果4つ各々を縦の列ごとに表示させたいです。
今のプログラムがどのように表示されるはずのものかはちゃんと理解していますか?
ああ、ちゃんと表示されてますね
あまりわかっていないのですが、このままだと出力がマイク1,
マイク2,マイク3,マイク4の順に出力されるだけになってしまうのかなと思います。質問の趣旨からは外れてしまいますが、それぞれ別の列に値を表示させるための方法を教えてくださればと思います。
※上記のシリアルモニタの表示はfor文を使ってsp[i]が0~3のみならず、それ以降のsp[4]などが出力されてしまったこと?による誤った表示
質問のプログラムではsp[4]などが出力されることはなさそうに思いますが...?
質問と実際でプログラムが違ったということですか?
sprintfを使って、1行分の文字列を作ればいいです。
がんばってください
上記のプログラムにはfor文を使ったものは載せていませんでした。上のプログラムでは正しく表示されます
ご指摘ありがとうございました!
超能力者ではないので、どんなに頑張っても書かれていないプログラムの間違いはわかりません...
申し訳ございません、修正前後のプログラムは以下になります
修正前
for (int i =0 ; i < 4 ; i ++){
Serial.print(sp[i]); //Arduinoのシリアルモニタでの音圧の確認用
Serial.print(" ");
Serial.print(sp[i+1]);
Serial.print(" ");
Serial.print(sp[i+2]);
Serial.print(" ");
Serial.print(sp[i+3]);
}
修正後
Serial.print(sp[0]); //Arduinoのシリアルモニタでの音圧の確認用
Serial.print(" ");
Serial.print(sp[1]);
Serial.print(" ");
Serial.print(sp[2]);
Serial.print(" ");
Serial.print(sp[3]);
回答2件
あなたの回答
tips
プレビュー
