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(), будет колебаться в зависимости от ряда факторов (например, значений других аналоговых входов, близости руки к плате и т.д.).