АналоговыйRead() Arduino возвращает мусор, когда я печатаю через последовательный порт

StackOverflow https://stackoverflow.com/questions/1013936

  •  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 Гц).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top