Arduino

технологии

Аналоговый ввод/вывод

Функция analogRead()

Описание

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

На большинстве плат содержится многоканальный 10-битный аналого-цифровой преобразователь, поэтому результатом будет значение в приделах от 0 до 1023. На платах Arduino Due и Arduino Zero преобразователь 12-битный, но результат по-умолчанию все равно отдается в 10 битах для совместимости с другими платами. Чтобы использовать 12 бит, нужно явно указать это через вызов analogReadResolution(), тогда результат будет в пределах 0-4095.

Синтаксис

analogRead(pin)

Параметры

pin - номера аналогового пина. Для большинства плат - значение от A0 до A5, для Arduino Mini и Nano - от A0 до A7, для arduino mega - от A0 до A15

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

Целое значение в приделах от 0 до 1023 или от 0 до 4095 для плат Arduino Duo и Arduino Zero (нужна настройка)

Пример
void setup()
{
  Serial.begin(9600);
  int val = analogRead(A0);
  Serial.println(val);
}

void loop()
{
}
Примечания

Аналоговые пины работают не так, как цифровые, и для работы с ними не нужно устанавливать режим работы. Вызывать для них pinMode() нужно только если вы хотите использовать их в качестве цифровых.

Функция analogReference()

Описание

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

Синтаксис

analogReference(type)

Параметры

type - используемое опорное напряжение (DEFAULT, INTERNAL, EXTERNAL)

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

нет

Пример
void setup()
{
  analogReference(EXTERNAL);
}
Примечания

Значения параметра для Arduino AVR плат (Uno, Mega и др.):

  • DEFAULT - стандартное опорное напряжение 5 В (на платформах с напряжением 5 В) или 3.3 В (на платформах с напряжением 3.3 В);
  • INTERNAL - встроенное опорное напряжение 1.1 В на микроконтроллерах ATmega168 и ATmega328 и 2.56 В на ATmega8 (не доступно на Arduino Mega);
  • EXTERNAL - внешний источник опорного напряжение, подключенный к выводу AREF (возможно от 0 В до 5 В);
  • INTERNAL1V1 - напряжение в 1.1 В (только для Arduino Mega);
  • INTERNAL2V56 - напряжение в 2.56 В (только для Arduino Mega);

Значения параметра для Arduino SAMD плат (Zero и тд.):

  • AR_DEFAULT - стандартное опорное напряжение 3.3 В;
  • AR_INTERNAL - встроенное опорное напряжение 2.23 В;
  • AR_INTERNAL1V0 - встроенное опорное напряжение 1.0 В;
  • AR_INTERNAL1V65 - встроенное опорное напряжение 1.65 В;
  • AR_INTERNAL2V23 - встроенное опорное напряжение 2.23 В;
  • AR_EXTERNAL - внешний источник опорного напряжение, подключенный к выводу AREF.

Значения параметра для Arduino SAM плат (Duo):

  • AR_DEFAULT - стандартное опорное напряжение 3.3 В. Для Arduino Duo доступно только это значение.

Функция analogWrite()

Описание

Функция выдает на пин аналоговую величину (ШИМ-сигнала или ШИМ-волну). Это может быть полезно например для управления яркостью светодиода или для задания скорости вращения мотора.

Могут использоваться только пины, помеченные символом "~". На Arduino Uno и на других платах на микроконтроллерах ATmega168 и ATmega328P это пины 3, 5, 6, 9, 10 и 11. На пинах 5 и 6 частота ШИМ-сигнала составляет около 980 Гц, а на остальных пинах - примерно 490 Гц. На плате Arduino Mega можно использовать пины 2–13 и 44–46. На Arduino DUE - пины 2–13, а также контакты DAC0 и DAC1. Причем DAC0 и DAC1 являются цифро-аналоговыми преобразователями и действуют как настоящие аналоговые выходы.

Перед использованием не требует вызова функции pinMode().

Синтаксис

analogWrite(pin, value)

Параметры

pin - номер пина, на который следует подать ШИМ-сигнал

value - период рабочего цикла от 0 (сигнал всегда выключен) до 255 (сигнал подан постоянно)

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

нет

Пример

Плавное мигание светодиодом:

const int ledPin = 3;
const int delayTime = 10;

void setup()
{
}

void loop()
{
  for (int i = 0; i <= 255; i++) {
    analogWrite(ledPin, i);
    delay(delayTime);
  }
  for (int i = 255; i >= 0; i--) {
    analogWrite(ledPin, i);
    delay(delayTime);
  }
}