我正在用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,但我得到了相同的输出。
顺便说一句,我试图从仅模拟引脚读取,而不是那些也是数字引脚。
答案 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的强大成分)。