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

Материал из ВикиСправочника
Перейти к: навигация, поиск

{{#setlogo:ArduinoCommunityLogo.png}}

Перевод: Максим Кузьмин (Cubewriter)
Перевел 1784 статей для сайта.

Контакты:

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


Функция 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-битное разрешение (или другое разрешение, превышающее возможности платы) можно использовать как бы заранее. То есть вы можете написать «дальновидный» скетч, который будет автоматически, без лишней работы с кодом, управляться с девайсами, имеющими более высокое АЦП-разрешение, когда такая возможность появится на новых платах.

Пример

  1. void setup() {
  2.   // Запускаем последовательную передачу данных:
  3.   Serial.begin(9600);
  4. }
  5.  
  6. void loop() {
  7.   // Считываем с контакта A0 входящие данные (в дефолтном 10-битном разрешении),
  8.   // а затем отправляем их через последовательное соединение:
  9.   analogReadResolution(10);
  10.   Serial.print("ADC 10-bit (default) : ");  //  "АЦП-данные в 10-битном (дефолтном) разрешении : "
  11.   Serial.print(analogRead(A0));
  12.  
  13.   // меняем разрешение на «12» и снова считываем данные с A0:
  14.   analogReadResolution(12);
  15.   Serial.print(", 12-bit : ");  //  ", в 12-битном разрешении : "
  16.   Serial.print(analogRead(A0));
  17.  
  18.   // меняем разрешение на «16» и снова считываем данные с A0:
  19.   analogReadResolution(16);
  20.   Serial.print(", 16-bit : ");  //  ", в 16-битном разрешении : "
  21.   Serial.print(analogRead(A0));
  22.  
  23.   // меняем разрешение на «8» и снова считываем данные с A0:
  24.   analogReadResolution(8);
  25.   Serial.print(", 8-bit : ");  //  ", в 8-битном разрешении : "
  26.   Serial.println(analogRead(A0));
  27.  
  28.   // небольшая задержка, чтобы не перегружать Serial Monitor:
  29.   delay(100);
  30. }

См.также

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

  1. analogReadResolution()