Arduino:Справочник языка Arduino/Функции/Аналоговый ввод/вывод/analogReadResolution()
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Функция analogReadResolution()[1]
Описание
Эта функция — расширение Analog API для Arduino Due и Zero.
Она задает размер (в битах) значения, возвращаемого функцией analogRead(). По умолчанию оно равно 10 битам (возвращает значения в диапазоне 0-1023) — для обратной совместимости с платами на базе AVR.
Платы Due и Zero способны осуществлять 12-битное аналогово-цифровое преобразование, доступ к которому можно получить, поменяв разрешение на «12». В результате значения от analogRead() будут варьироваться в диапазоне 0-4095.
Синтаксис
analogReadResolution(bits)
Параметры
bits — разрешение (в битах) значения, возвращаемого функцией analogRead(). Может варьироваться от 1 до 32. Впрочем, если выставить в этом значении больше 12, то возвращенное значение будет не точным, а приблизительным. Более подробно об этом читайте в приложении ниже.
Что возвращает
Ничего.
Примечание
Если задать в analogReadResolution() значение, превышающее возможности платы, Arduino в ответ отправит значение, где «лишние» биты будут заполнены нулями.
Например, если вы пользуетесь Due или Zero, а в функции analogReadResolution() решили указать «16», то в итоге получите 16-битное число, в котором первые 12 бит будут содержать реальную информацию об аналогово-цифровом преобразовании, а 4 оставшихся бита будут содержать нули.
А если в analogReadResolution() задать значение, которое будет ниже возможностей платы, то недостающие биты будут просто удалены.
Впрочем, 16-битное разрешение (или другое разрешение, превышающее возможности платы) можно использовать как бы заранее. То есть вы можете написать «дальновидный» скетч, который будет автоматически, без лишней работы с кодом, управляться с девайсами, имеющими более высокое АЦП-разрешение, когда такая возможность появится на новых платах.
Пример
void setup() {
// Запускаем последовательную передачу данных:
Serial.begin(9600);
}
void loop() {
// Считываем с контакта A0 входящие данные (в дефолтном 10-битном разрешении),
// а затем отправляем их через последовательное соединение:
analogReadResolution(10);
Serial.print("ADC 10-bit (default) : "); // "АЦП-данные в 10-битном (дефолтном) разрешении : "
Serial.print(analogRead(A0));
// меняем разрешение на «12» и снова считываем данные с A0:
analogReadResolution(12);
Serial.print(", 12-bit : "); // ", в 12-битном разрешении : "
Serial.print(analogRead(A0));
// меняем разрешение на «16» и снова считываем данные с A0:
analogReadResolution(16);
Serial.print(", 16-bit : "); // ", в 16-битном разрешении : "
Serial.print(analogRead(A0));
// меняем разрешение на «8» и снова считываем данные с A0:
analogReadResolution(8);
Serial.print(", 8-bit : "); // ", в 8-битном разрешении : "
Serial.println(analogRead(A0));
// небольшая задержка, чтобы не перегружать Serial Monitor:
delay(100);
}