当我通过串行打印时,Arduino analogRead()返回垃圾

时间:2009-06-18 17:05:58

标签: arduino

我正在用Arduino制作一个时钟,我想制作一个按钮来设置时间。 所以,为了测试,我在模拟输入引脚0中插入了一根导线并写了两行代码来读取引脚并通过串行打印,但我得到的只是垃圾。

  valm = analogRead(0);
  Serial.println(valm);

我从串口监视器得到的是这样的:     【J?d?±μ?Ê?? JDD?±μ???ºjRd?±μ???ºj?d?±μ?Ê?? J·d?±μ?É?ªjRd?±μ?? ?ÊjRd?±μ??? AJ?d?±μ???? J〜d?±μ?É??Ĵ     路?±μ???? J〜d?±μ???ºj?d?±μ?É?? JRD?±μ???? J〜d?±μ?Ê?ÊjDd?±μ?? ?AJ?d?±μ???? J〜d?±μ?É?? JRD?±μ???? J〜d     ?±μ?É?ÂjRd?±μ??? EJ?d?±μ???ªj?d?±μ?Ê?EJ $ d?±μ???ÂjRd?±μ???? J〜 d?±μ???? JDD?±μ???? JRD?±μ??? AJ?d?±     μ?É?ÊjRd?±μ???? J〜d?±μ2 O 3 EJ?d?±μ?É?ÂjRd?±μ???? J〜d?±μ???? J〜 d?±μ?É?? JRD?±μ??? AJ?d?±μ??? EJ?d?±μ?     ??ªj?d?±μ??? EJ?d?±μ???ÂjRd?±μ???? J〜d?±μ???? J〜d?±μ?É?? JRD? ±μ??? AJ?d?±μ2 O 3 EJ?d?±μ?É?ªj?d?±μ?É?     ?JTD?±μ??? AJ?d?±μ???? J〜d?±μ?É?? JRD?±μ???? J〜d?±μ?É?ÂjRd?±μ? ?? EJ?d?±μ?É?ªjRd?±μ??? EJ?d?±μ???ºj     ?d?±μ?È?? JTD?±μ???? JRD?±μ???ªj?d?±μ?È?ÂjTd?±μ?É?ÊjRd?±μ???ªj?d ?±μ??? EJ?d?±μ???ºj?d?±μ?É?? JRD     ?±μ??? EJ?d?±μ???ªj?d?±μ?É?ÂjPd?±μ??? EJ?d?±μ???ªj?d?±μ·A·EJ ?d?±μ?É?ºjRd?±μ???? J〜d?±μ?É?? JRD?±     μ???ªj?d?±μ?Ê?AJ?d?±μ???ÊjRd?±μ???ªj?d?±μ2 O 3 EJ?d?±μ???ºjRd?± μ???? J〜d?±μ??? EJ?d?±μ?Ê?ªjdd?±μ?     ??ÂjRd?±μ??? AJ?d?±μ?É?ªjPd?±μ??? EJ?d?±μ???? J〜d?±μ?É?? JRD?±μ? ?? EJ?d?±μ?É?ªjdd?±μ???ÂjRd?±μ???     AJ?d?±μ?É?ªjDd?±μ??? EJ?d?±μ?Ê?? J·d?±μ?É?? JRD?±μ???ÊjRd?±μ??? ªj?d?±μ?Ê?ÂjPd?±μ??? AJ?d?±μ???ªj     ?d?±μ?É?Êjdd?±μ?É?? JRD?±μ???? J〜d?±μ?É?EJ $ d?±μ???ªjRd?±μ??? AJ ?d?±μ·A·ÂjTd?±μ???ªj?d?±μ??? EJ?d     ?±μ???? JRD?±μ???? J〜d?±μ?É?ÊjTd?±μ???ªjRd?±μ??? AJ?d?±μ??? AJ?d ?±μ?É?ªjRd?±μ???ÊjRd?±μ3 O 10 JTD?±     μ???? J〜d?±μ??? EJ

为什么?


编辑:

我已将数字引脚0设置为输出,我想也许这就是问题所以我去了Arduino网站并找到了页面 Analog Input Pins

所以我试图从引脚14读取它们所说的模拟输入引脚0,但我得到了相同的输出。

顺便说一句,我试图从仅模拟引脚读取,而不是那些也是数字引脚。

4 个答案:

答案 0 :(得分:2)

尝试运行Arduino网站上的示例代码。您不需要转换变量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);
}

如果您的输出仍然是胡言乱语,那么您的串行终端有问题。

答案 1 :(得分:0)

问题这里是您可能连接的模拟设备不是@相同的接地电位。 示例:如果使用PC和传感器为Arduino板供电,则使用其他来源打开电源,但是您试图从Arduino端口读取值,此时它会出现上述错误。尝试使用来自同一电源的arduino和传感器上的电源并尝试使用串行端口通过DOcklight读取数据,您将得到问题解决。

答案 2 :(得分:0)

您需要将串行监视器窗口(右下角)中的波特率设置为代码中设置的相同值(例如Serial.begin(9600);)。

答案 3 :(得分:-1)

从您的输出看起来,您似乎需要将valm转换为字符串,以便您可以以数字方式打印该值。

另外,你插入模拟的电线是浮动的吗?因为如果是这样的话,它就会像天线一样攫取随机噪音(尽管可能有60Hz的强大成分)。