Arduino:Справочник языка Arduino/Функции/Аналоговый ввод/вывод/analogReadResolution()

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Функция 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);
}

См.также

Внешние ссылки