Arduino analogRead()はシリアル経由で印刷するとジャンクを返します
-
06-07-2019 - |
質問
Arduinoで時計を作っています。時間を設定するボタンを作りたいです。 そのため、テストするために、アナログ入力ピン0にワイヤを接続し、2行のコードを書いてピンを読み取ってシリアル経由で印刷しましたが、得られるのはすべてジャンクです。
valm = analogRead(0);
Serial.println(valm);
シリアルモニターから得られるものは次のとおりです。 ?j?d?±µ?Ê ?? jDd?±µ ???º jRd?±µ ??? º j?d?±µ?Ê ?? j?d?±µ?É?ª jRd?&#177 ;µ ???Ê jRd?±µ ??? j?d?±µ ???? j?d?& #177;µ?É ?? j Rd?±µ ???? j?d?±µ ???º j?d?±µ?É ?? jRd?±µ ???? j?d?±µ?Ê?Ê jDd?±µ ?? ? j?d?±µ ???? j?d?±µ?É ?? jRd?±µ ???? j?d ?±µ?É? jRd?±µ ???Ê j?d?±µ ?? ?ª j?d?±µ?Ê?Ê j $ d?±µ ??? jRd?&# 177;µ ???? j?d?±µ ???? jdd?±µ ???? jRd?±µ ??? j?d?± µ?É?Ê jRd?±µ ???? j?d?±µ?Ò?Ê j?d?±µ?É? jRd?±µ ???? j?d?±µ ?? ?? j?d?±µ?É ?? jRd?±µ ??? j?d?±µ ???Ê j?d?±&#181 ;? ??ª j?d?±µ ???Ê j?d?±µ ??? jRd?± µ ???? j?d?±µ ???? j?d?±µ?É ?? jRd?±& #181; ??? j?d?±µ?Ò?Ê j?d?±µ?&#201 ;? ª j?d?±µ?&#201 ;? ?jTd?±µ ??? j?d?±µ ???? j?d?±µ?&#201 ; ?? jRd?±µ ???? j?d?±µ?É? jRd?±&#181 ;? ??Ê j?d?±µ?É?ª jRd?±µ ???Ê j?d?& #177;µ ???º j ?d?±µ?È ?? jTd?±µ ???? jRd?±µ ???ª j ?d?±µ?È? jTd?±µ?É?Ê jRd?±&#181 ; ???ª j?d?±µ ???Ê j?d?±µ ???º j?d? ±µ?É ?? jRd ?±µ ???Ê j?d?±µ ???ª j?d?±µ?&# 201;? jPd?±µ ???Ê j?d?±µ ???ª j?d?&#177 ;µ?Â?Ê j?d?±µ?É?º jRd?±µ ??? ?j?d?±µ?É ?? jRd?± µ ???ª j?d?±µ?Ê? j?d?±µ ???&# 202; jRd?±µ ???ª j?d?±µ?Ò?Ê j?d?±& #181; ???º jRd?±µ ???? j?d?±µ ???Ê j?d?&#177 ;µ?Ê?ª jdd?±&#181 ;? ?? jRd?±µ ??? j?d?±µ?É?ª jPd?&#177 ;µ ???Ê j?d?±µ ???? j?d?±µ?É ?? jRd?& #177;µ ???Ê j?d?±µ?É?ª jdd?±µ ???& #194; jRd?±µ ???  j?d?±µ?É?ª jDd?±µ ???Ê j?d?&#177 ;µ?Ê ?? j?d?±µ?É ?? jRd?±µ ???Ê jRd? ±µ ???ª j?d?±µ?Ê? jPd?±µ ???  j?d?±µ ???ª j ?d?±µ?É?Ê jdd?±µ?É ?? jRd?±µ ?? ?? j?d?±µ?É?Ê j $ d?±µ ???ª jRd?±& #181; ??? j?d?±µ?Â? jTd?±µ ???ª j ?d?±µ ???Ê j?d ?±µ ???? jRd?±µ ???? j?d?±µ?É?Ê jTd ?±µ ???ª jRd?±µ ??? j?d?±µ ???&# 194; j?d?±µ?É?ª jRd?±µ ???Ê jRd?±&#181 ;?Ò ?? jTd?± µ ???? j?d?±µ ???Ê j
なぜ?
編集:
デジタルピン0を出力に設定しましたが、おそらくそれが問題だと思ったので、ArduinoのWebサイトにアクセスして アナログ入力ピン 。
だから私は彼らが言うアナログ入力ピン0であるピン14から読み込もうとしましたが、同じ出力を得ました。
ところで、私はアナログのみのピンから読み込もうとしています。
解決
Arduino Webサイトにあるこのサンプルコードを実行してみてください。変数 valm
などを変換する必要はありません。
/*
Analog input
Reads an analog input on analog in 0, and prints the value out.
Created 24 March 2006
by Tom Igoe
*/
int analogValue = 0; // Variable to hold the analog value.
void setup() {
// open the serial port at 9600 bit/s:
Serial.begin(9600);
}
void loop() {
// Read the analog input on pin 0:
analogValue = analogRead(0);
// Print it out in many formats:
Serial.println(analogValue); // print as an ASCII-encoded decimal
Serial.println(analogValue, DEC); // print as an ASCII-encoded decimal
Serial.println(analogValue, HEX); // print as an ASCII-encoded hexadecimal
Serial.println(analogValue, OCT); // print as an ASCII-encoded octal
Serial.println(analogValue, BIN); // print as an ASCII-encoded binary
Serial.println(analogValue, BYTE); // print as a raw byte value
// Delay 10 milliseconds before the next reading:
delay(10);
}
出力がまだぎこちない場合、シリアル端末に何か問題があります。
他のヒント
問題ここに接続するアナログデバイスは、同じ接地電位ではありません。 例:PCとセンサーを使用してArduinoボードの電源をオンにすると、他のソースを使用して電源がオンになりますが、Arduinoポートから値を読み取ろうとすると、この瞬間に上記のエラーが発生します。同じ電源からarduinoとセンサーでこの電源を試し、DOcklightを介してシリアルポートを使用してデータを読み取ろうとすると、問題が解決します。
シリアルモニターウィンドウ(右下隅)のボーレートを、コードで設定されている値と同じ値に設定する必要があります(例: Serial.begin(9600);
)。
出力がどのように見えるかから、valmを文字列に変換する必要があるようです。そのため、数値を数値で出力できます。
また、アナログに差し込んだワイヤはフローティングですか?そうである場合、アンテナのように振る舞い、ランダムノイズを取得するだけです(ただし、強い60Hz成分が含まれる可能性があります)。