Arduino — дополнительные функции входа/выхода

Ранее описанные функции для аналого-цифровых входов и выходов не исчерпывают всех возможностей пакета Arduino IDE. Ниже приводим дополнительные функции входа/выхода.

Функция tone()

Функция tone() генерирует прямоугольную форму волны с заполнением 50%. Диапазон возможных частот составляет от 31 до 65535 Гц. Генерация формы сигнала менее 31 Гц невозможна. Синтаксис функции следующий:

tone(pin, частота);
tone(pin, частота, время);

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

Если необходимо генерировать сигнал разных частот на разных контактах, необходимо сперва выключить генерацию сигнала на текущем выводе, прежде включить генерацию на другом выводе. Невозможно одновременно создавать разные формы сигналов на разных контактах.
Примеры использования функции tone():

tone(3,1000);
delay(1500);
noTone(3);
----------------------------------
tone(4,1000,1500);

Первая часть кода генерирует частоту 1000 Гц длительностью 1500 мс. Вторая часть кода выполняет ту же задачу. Разница между примерами в том, что в первом случае мы используем отдельные функции для измерения времени и отключения генерации сигнала, во втором случае все задается в одной функции tone().

Функция noTone()

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

noTone(pin-код);

Выключение генерации сигнала для вывода, на котором форма волны не генерировалась, не вызывает никакого результата.

Функция shiftOut()

Функция shiftOut() выводит байт информации на порт вход/выход последовательно (побитно). Это позволяет легко управлять внешними последовательно-параллельными регистрами или создавать несколько программируемых последовательных портов.

Функция shiftIn()

С помощью функции shiftIn() возможно последовательное считывание значений с указанного контакта. Это обеспечивает поддержку работы с внешними параллельными и последовательными регистрами.

Функция pulseIn()

Функция pulseIn () позволяет измерять длительность импульса, указанного для определенного вывода. Можно измерить как время высокого состояния, так и время низкого состояния - в зависимости от указанного параметра. Синтаксис вызова функции следующий:

pulseIn (pin, state);

pulseIn (pin, состояние, время);
  • pin – номер контакта с которого считывается состояние;
  • состояние - одно из значений HIGH или LOW;
  • время - параметр определяет, как долго функция ожидает событие (по умолчанию - одна секунда).

Использование параметра «время» позволяет прекратить ожидание, когда событие не произошло. Пример использования pulseIn() показан ниже:

#define pin 7
unsigned long time;
void setup()
{
pinMode(pin, INPUT);
Serial.begin(9600);
}
void loop()
{
время = pulseIn(pin, HIGH);
Serial.println(time);
delay(1000);
}

В этом примере каждую секунду считывается длительность высокого состояния на выводе 7. Время передается через последовательный порт на компьютер.

редактор

Добавить комментарий

Ваш электронный адрес не будет опубликован.

*