analogRead()

Описание

Считывает значение с указанного аналогового входного пина.

Arduino UNO, например, содержит многоканальный 10-битный аналого-цифровой преобразователь (АЦП). Это означает, что он преобразует входные напряжения от 0 до рабочего напряжения (+5 В) в целочисленные значения от 0 до 1023. Это даёт разрешение между измерениями: 5 вольт / 1024 единицы, или 0,0049 вольта (4,9 мВ) на единицу.

Диапазон входного напряжения можно изменить с помощью analogReference(). Разрешение analogRead() по умолчанию на платах Arduino установлено в 10 бит для совместимости. Для изменения на более высокое разрешение используйте analogReadResolution().

Синтаксис

Используйте следующую функцию для получения значения аналогового входа:

analogRead(pin)

Параметры

Функция принимает следующий параметр:

  • pin: имя аналогового входного пина, с которого нужно считать значение.

Возвращаемое значение

Функция возвращает аналоговое значение на пине. Хотя оно ограничено разрешением аналого-цифрового преобразователя (0-1023 для 10 бит, 0-4095 для 12 бит и т.д.). Тип данных: int.

Пример кода

Код считывает аналоговое значение с пина analogPin и выводит его.

int analogPin = A3; // средний вывод потенциометра подключён к аналоговому пину 3
                    // крайние выводы — к земле и VCC
int val = 0;  // переменная для хранения считанного значения

void setup() {
  Serial.begin(9600);           // инициализация Serial
}

void loop() {
  val = analogRead(analogPin);  // считываем входной пин
  Serial.println(val);          // выводим значение
  delay(200);
}

Вы можете преобразовать необработанное аналоговое значение в напряжение следующим способом:

// Константы
const float V_REF = 5.0;     // Опорное аналоговое напряжение (напр., 5 В или 3.3 В)
const float R_BITS = 10.0;   // Разрешение АЦП (бит)
const float ADC_STEPS = (1 << int(R_BITS)) - 1; // Количество шагов (2^R_BITS - 1)

const int potentiometerPin = A3; // Средний вывод потенциометра подключён к A3

void setup() {
  Serial.begin(9600); // Инициализация последовательного соединения
  Serial.println(ADC_STEPS);
}

void loop() {
  int rawValue = analogRead(potentiometerPin); // Считываем аналоговый вход
  float voltage = (rawValue / ADC_STEPS) * V_REF; // Преобразуем в напряжение

  Serial.print("Voltage: ");
  Serial.print(voltage, 3); // Выводим напряжение с 3 знаками после запятой
  Serial.println(" V");

  delay(200); // Небольшая задержка, чтобы не перегружать монитор порта
}

Примечания и предупреждения

Предупреждение

Если аналоговый входной пин ни к чему не подключён, значение, возвращаемое analogRead(), будет колебаться в зависимости от ряда факторов (например, значений других аналоговых входов, близости руки к плате и т.д.).

См. также