АналоговыйRead() Arduino возвращает мусор, когда я печатаю через последовательный порт
-
06-07-2019 - |
Вопрос
Я делаю часы с помощью Arduino и хочу сделать кнопку для установки времени.Итак, просто для проверки я подключил провод к контакту 0 аналогового входа и написал две строки кода, чтобы прочитать контакт и распечатать его через последовательный порт, но все, что я получаю, — это мусор.
valm = analogRead(0);
Serial.println(valm);
И вот что я получаю от последовательного монитора:? J? D? ± µ? ê? ? Êjrd? ± µ ??? ± µ? É? Jrd? ± µ ???? j? d? ± µ? é? ? ? J? d? ± µ? ò? µ ??? âj? D? ± µ???ªj?d?±µ???Êj?d?±µ???ÂjRd?±µ????j?d?±µ????j?d?±µ?É??jRd? ±µ???Âj?d?±µ?Ò?Êj?d?±µ?É?ªj?d?±µ?É?? jtd? ± µ ??? ? ?? É? ? ± µ ??? êjrd? ± µ? ? ± µ? Ê? ªjdd? ± µ???ÂjRd?±µ???Âj?d?±µ?É?ªjPd?±µ???Êj?d?±µ????j?d?±µ?É??jRd?±µ? ??Êj?d?±µ?É?ªjdd?±µ???ÂjRd?±µ???Âj? D? ± µ? É? ªjdd? ± µ? ªj? D? ± µ? Ê? Âjpd? ± µ ??? J? D? ± µ? é? êJ $ D? ± µ ??? ªjrd? ± µ? ÊJ? D? ± µ ???? Âj? D? ± µ? É? ªjrd? ± µ ???
Почему?
Редактировать:
Я установил цифровой вывод 0 на выход и подумал, что, возможно, проблема в этом, поэтому зашел на сайт Arduino и нашел страницу Аналоговые входные контакты.
Итак, я попытался прочитать контакт 14, который, как говорят, является контактом аналогового входа 0, но получил тот же результат.
Кстати, я пытаюсь читать только с аналоговых контактов, а не с того, который также является цифровым.
Решение
Попробуйте запустить этот пример кода, найденный на веб-сайте 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);
}
Если ваш вывод по-прежнему бессмысленен, значит, что-то не так с вашим последовательным терминалом.
Другие советы
Проблема: аналоговое устройство, которое вы могли подключить, имеет разные потенциалы земли.Пример:Если вы включаете плату Arduino с помощью ПК, а датчик включается от другого источника, но вы пытаетесь прочитать значение из порта Arduino, в этот момент выдается вышеуказанная ошибка.Попробуйте включить питание Arduino и датчика от одного и того же источника питания и попробуйте прочитать данные с помощью последовательного порта через DOcklight, и проблема будет решена.
Вам необходимо установить скорость передачи данных в окне последовательного монитора (правый нижний угол) на то же значение, которое было установлено в вашем коде (например, Serial.begin(9600);
).
Судя по тому, как выглядят ваши выходные данные, вам кажется, что вам нужно преобразовать valm в строку, чтобы вы могли распечатать значение в числовом виде.
Кроме того, провод, который вы подключили к аналогу, плавает?Потому что в этом случае он будет просто действовать как антенна и улавливать случайный шум (хотя он может иметь сильную составляющую 60 Гц).