Функция tone()
Описание
Генерирует на пине сигнал - прямоугольную волну заданной частоты. Можно указать продолжительность, иначе сигнал продолжается до вызова noTone(). К пину может быть подключен пьезо- или другой динамик для воспроизведения различных тонов.
Одновременно может генерироваться только один сингал. Если сигнал уже воспроизводится на одном пине, то вызов функции для другого пина ни к чему не приведет. Повторный вызов же функции для того же пина изменит частоту сигнала на новую.
При использовании функции tone() невозможно генерировать ШИМ-сигнал на 3 и 11 пинах всех плат, кроме Arduino Mega.
Невозможно генерировать сигнал с частотой ниже 31 Гц.
Синтаксис
tone(pin, frequency)
tone(pin, frequency, duration)
Параметры
pin - пин для генерации звука
frequency - частота тона в герцах
duration - длительность тона в миллисекундах (необязательно)
Возвращаемое значение
нет
Пример
const beepPin = 7;
void setup()
{
// использование с передачей длительности
tone(beepPin, 440, 250);
}
void loop()
{
}
Функция noTone()
Описание
Останавливает генерацию сигнала на пине. Если сигнал не генерируется, то никакого эффекта от вызова функции не будет.
Синтаксис
noTone(pin)
Параметры
pin - пин, на котором прекращается генерация сигнала
Возвращаемое значение
нет
Пример
const beepPin = 7;
void setup()
{
// без передачи длительности с использованием noTone()
tone(7, 820);
delay(300);
noTone(beepPin);
}
void loop()
{
}
Функция shiftIn()
Описание
Сдвигает байт данных по одному биту за один вызов, начиная с самого старшего (т.е. крайнего левого) или младшего (крайнего правого) бита. Для каждого бита тактовый вывод устанавливается на высокий уровень, следующий бит считывается из линии данных, а затем на тактовом выводе устанавливается низкий уровень.
Синтаксис
byte incoming = shiftIn(dataPin, clockPin, bitOrder)
Параметры
dataPin - пин для вывода данных
clockPin - пин для синхронизации
bitOrder - порядок сдвига: MSBFIRST или LSBFIRST (младший бит первым или старший)
Возвращаемое значение
Считанное значение
Пример
Для понимания работы функции, вместо примера приведу ее реализацию:
uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) {
uint8_t value = 0;
uint8_t i;
for (i = 0; i < 8; ++i) {
digitalWrite(clockPin, HIGH);
if (bitOrder == LSBFIRST) {
value |= digitalRead(dataPin) << i;
} else {
value |= digitalRead(dataPin) << (7 - i);
}
digitalWrite(clockPin, LOW);
}
return value;
}
Примечания
Перед передачей не забыть сконфигурировать оба пина на тип работы OUTPUT.
Для более удобного и быстрого использования данного протокола, можно воспользоваться библиотекой SPI. Однако она поддерживает не все пины.
Функция shiftOut()
Описание
Побитово выводит байт информации на пин. Вывод может осуществляться как с первого (левого), так и с последнего (правого) бита. Каждый бит выводится по очереди, после чего на синхронизирующий пин подается сигнал, сигнализирующий о возможности считывать бит.
Данный способ передачи информации называется последовательной передачей с синхронизацией.
Синтаксис
shiftOut(dataPin, clockPin, bitOrder, value)
Параметры
dataPin - пин для вывода данных
clockPin - пин для синхронизации
bitOrder - порядок передачи: MSBFIRST или LSBFIRST (младший бит первым или старший)
value - данные для передачи (байт)
Возвращаемое значение
нет
Пример
Отправка последовательно от 0 до 255:
int dataPin = 7;
int syncPin = 8;
void setup()
{
pinMode(dataPin, OUTPUT);
pinMode(syncPin, OUTPUT);
}
void loop()
{
for (int i = 0; i < 256; i++) {
shiftOut(dataPin, syncPin, LSBFIRST, i);
delay(1000);
}
}
Примечания
Перед передачей не забыть сконфигурировать оба пина на тип работы OUTPUT.
Для более удобного и быстрого использования данного протокола, можно воспользоваться библиотекой SPI.. Однако она поддерживает не все пины.
Функция pulseIn()
Описание
Функция ждет появления импульса (HIGH или LOW) на заданном пине и после его завершения возвращает его длину или 0, если импульса не было на протяжении заданного времени (тайм-аута).
Работает с импульсами от 10 микросекунд до 3 минут.
Синтаксис
pulseIn(pin, value)
pulseIn(pin, value, timeout)
Параметры
pin - номер пина, на которой ожидается импульс
value - тип импульса для чтения: HIGH или LOW
timeout (необязательный параметр) - количество микросекунд ожидания начала импульса, по умолчанию одна секунда
Возвращаемое значение
Длительность импульса (в микросекундах) или 0, если до истечения времени (тайм-аута) не было ни одного импульса
Пример
const int pin = 8;
unsigned long duration;
void setup()
{
Serial.begin(9600);
pinMode(pin, INPUT);
}
void loop()
{
duration = pulseIn(pin, HIGH);
Serial.println(duration);
}