Дополнительные фунции ввода/вывода 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Дополнительные фунции ввода/вывода



 Функция tone()

Генерирует на порту входа/выхода сигнал — прямоугольную "волну" заданной частоты и с 50 % рабочим циклом. Длительность может быть задана параметром, в противном случае сигнал генерируется до тех пор, пока не будет вызвана функ­ция noTone(). К порту входа/выхода может быть подключен пьезо- или иной дина­мик для воспроизведения сигнала.

Воспроизводиться одновременно может только один сигнал. Если сигнал уже вос­производится на одном порту, то вызов tone() с номером другого порта в качестве параметра ни к чему не приведет, если же tone () будет вызвана с тем же номером порта, то будет установлена новая частота сигнала.

Использование функции tone() помешает использовать ШИМ на портах вхо­да/выхода 3 и 11 (кроме платы Arduino Mega).

Синтаксис:

tone(pin, frequency);

tone(pin, frequency, duration);

Параметры:

- pin — номер порта входа/выхода, на котором будет генерироваться сигнал;

- frequency — частота сигнала в герцах;

- duration — длительность сигнала в миллисекундах.

 

Функция noTone()

Останавливает сигнал, генерируемый на порту входа/выхода, вызовом функции tone (). Если сигнал не генерировался, то вызов noTone() ни к чему не приводит.

Если необходимы сигналы на разных портах, то следует сначала остановить один сигнал функцией noTone(), а лишь затем создавать новый сигнал на другом порту функцией Tone().

Синтаксис:

noTone(pin);

Параметр: pin — номер порта входа/выхода, на котором прекращается сигнал.

 

 Функция shiftOut()

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

Такой способ передачи данных называется последовательным протоколом с син­хронизацией. Он часто используется для взаимодействия микроконтроллеров с дат­чиками и сенсорами, а также другими микроконтроллерами. Последовательная передача с синхронизацией позволяет устройствам связываться на максимальной скорости. Смотрите также документацию (на англ. языке) по протоколу последова­тельного периферийного интерфейса (SPI, Serial Peripheral Interface Protocol).

Синтаксис:

shiftOut(dataPin, clockPin, bitOrder, value);

Параметры:

- dataPin — номер порта входа/выхода, на который выводятся биты (int);

- clockPin — номер порта, по которому производится синхронизация (int);

- bitOrder — используемая последовательность вывода битов. msbfirst (Most Significant Bit First) — слева или lsbfirst (Least Significant Bit First) — справа;

-  value — значение (байт) для вывода (byte).

Порт вывода (dataPin) и синхронизирующий порт (clockPin) должны быть предвари­тельно сконфигурированы как порты вывода с помощью функции pinMode ().

Текущая реализация функции shiftOut() может выводить только один байт (8 би­тов) информации, поэтому необходимо произвести несколько действий, чтобы вывести значения больше 255.

Пример вывода:

// Вывод будет MSBFIRST с первого (левого) бита int data = 500;

// выводим старший байт

shiftOut(dataPin, clock, MSBFIRST, (data >> 8));

// выводим младший бит

shiftOut(dataPin, clock, LSBFIRST, data);

// выводим старший бит

shiftOut(dataPin, clock, LSBFIRST, (data >> 8));

 

Пример вывода счетчика от 0 до 255 на сдвиговый регистр с последовательным вводом 74HC595:

// Порт, подключенный к ST_CP 74HC595 int latchPin = 8;

// Порт, подключенный к SH_CP 74HC595 int clockPin = 12;

// Порт, подключенный к DS 74HC595 int dataPin = 11; void setup()

{

// устанавливаем режим порта выхода pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT);

}

void loop()

{

for (int j = 0; j < 256; j++)

{

// устанавливаем LOW на latchPin, пока не окончена передача байта digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, j);

// устанавливаем HIGH на latchPin, чтобы проинформировать регистр, что // передача окончена. digitalWrite(latchPin, HIGH); delay(1000);

}

}

 

Функция pulseIn()

Считывает длину сигнала на заданном порту (high или low). Например, если задано считывание high функцией pulsein(), функция ожидает, пока на заданном порту не появится high. Когда high получен, включается таймер, который будет остановлен, когда на порту входа/выхода будет low. Функция pulsein() возвращает длину сиг­нала в микросекундах. Функция возвращает 0, если в течение заданного времени (тайм-аута) не был зафиксирован сигнал на порту.

Возможны некоторые погрешности в измерении длинных сигналов. Функция мо­жет измерять сигналы длиной от 10 микросекунд до 3 минут.

Синтаксис:

pulseIn(pin, value); pulseIn(pin, value, timeout);

Параметры:

- pin — номер порта входа/выхода, на котором будет ожидаться сигнал;

- value — тип ожидаемого сигнала: high или low;

- timeout время ожидания сигнала (тайм-аут) в секундах (unsigned long).

Возвращаемые значения: длина сигнала в микросекундах или 0, если сигнал не по­лучен до истечения тайм-аута (тип unsigned long).

Пример использования функции:

int pin = 7; unsigned long duration; void setup()

{

pinMode(pin, INPUT);

}

void loop()

{

duration = pulseIn(pin, HIGH);

}

 

Работа со временем

Функция millis()

Возвращает количество миллисекунд с момента начала выполнения текущей про­граммы на плате Arduino. Это количество сбрасывается на ноль вследствие пере­полнения значения приблизительно через 50 дней.

Параметров нет.

Возвращаемое значение — количество миллисекунд с момента начала выполнения программы (тип unsigned long).

Пример использования функции:

unsigned long time; void setup()

{

Serial.begin(9600);

}

void loop()

{

Serial.print("Time: "); time = millis();

// выводит количество миллисекунд с момента начала выполнения программы Serial.println(time);

// ждет секунду перед следующей итерацией цикла. delay(1000);

}

 

Функция micros()

Возвращает количество микросекунд с момента начала выполнения текущей про­граммы на плате Arduino. Значение переполняется и сбрасывается на ноль прибли­зительно через 70 минут. На платах Arduino с 16 МГц (Duemilanove и Nano) функ­ция micros() имеет разрешение 4 секунды (возвращаемое значение всегда крат­но 4). На платах с 8 МГц (Arduino Lilypad) — разрешение функции 8 секунд.

Параметров нет.

Возвращаемое значение — количество микросекунд с момента начала выполнения программы (unsigned long).

Пример использования функции:

unsigned long time; void setup()

{

Serial.begin(9600);

}

void loop()

{

Serial.print(”Time: ”); time = micros();

// выводит количество микросекунд с момента начала выполнения

// программы

Serial.println(time);

// ждет секунду перед следующей итерацией цикла. delay(1000);

}

 


Функция delay()

Останавливает выполнение программы на заданное в параметре количество милли­секунд (1000 миллисекунд в 1 секунде).

Синтаксис:

delay(ms);

Параметр: ms — количество миллисекунд, на которое приостанавливается выпол­нение программы (тип unsigned long).

Пример использования функции:

int ledPin = 13; // светодиод подключен на порт 13

void setup()

{

pinMode(ledPin, OUTPUT); // устанавливается режим порта - выход }

void loop()

{

digitalWrite(ledPin, HIGH); // включаем светодиод

delay(1000); // ожидаем секунду

digitalWrite(ledPin, LOW); // выключаем светодиод delay(1000); // ожидаем секунду

}

Не рекомендуется использовать эту функцию для событий длиннее 10 миллисе­кунд, т. к. во время останова не могут быть произведены манипуляции с портами, не могут быть считаны сенсоры или произведены математические операции. В ка­честве альтернативного подхода возможно контролирование времени выполнения тех или иных функций с помощью millis(). При использовании функции delay() работа прерываний не останавливается, продолжается запись последовательно (serial) передаваемых данных на RX‑порту, ШИМ-сигнал (analogWrite) продолжает генерироваться на портах.

 


Функция delayMicroseconds()

Останавливает выполнение программы на заданное в параметре количество микро­секунд (1 000 000 микросекунд в 1 секунде).

В данной версии Arduino максимальная пауза, воспроизводимая корректно, — 16 383. Возможно, это будет изменено в следующих версиях Arduino. Для останов­ки выполнения программы, более чем на несколько тысяч микросекунд, рекомен­дуется использовать функцию delay().

Синтаксис:

delayMicroseconds(us);

Параметр: us — количество микросекунд, на которое приостанавливается выпол­нение программы (unsigned int).

Пример использования функции:

int outPin = 8; // цифровой порт входа/выхода 8

void setup()

{

pinMode(outPin, OUTPUT); // устанавливается режим порта - выход }

void loop()

{

digitalWrite(outPin, HIGH); // подаем HIGH на выход delay(50); // ожидаем 50 микросекунд

digitalWrite(outPin, LOW); // устанавливаем LOW на выходе delay(50); // ожидаем 50 микросекунд

}

 

Математические функции

В языке представлены следующие математические функции:

- map();

- pow();

- sq();

- sqrt ().

- min();

- max();

- abs();

- constrain();

 

Функция min(x,yx)

Возвращает наименьшее из двух значений.

Параметры:

-  x — первое число, любой тип;

-  y — второе число, любой тип.

Возвращаемое значение — возвращает меньшее из двух сравниваемых значений.

Пример использования функции:

sensVal = min(sensVal, 100);

// проверяем, если sensVal больше 100, то senseVal будет присвоено 100

 

Функция max(x, y)

Возвращает большее из двух значений.

Параметры:

- x — первое число, любой тип;

- y — второе число, любой тип.

Возвращаемое значение — возвращает большее из двух сравниваемых значений.

Пример использования функции:

sensVal = max(sensVal, 20);

// проверяем, если sensVal меньше 20, то senseVal будет присвоено 20

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

Например:

max(a—, 0); // может привести к некорректным результатам

a--;

max(a, 0); // так корректно

 

Функция abs()

Возвращает модуль числа.

Параметр: x — число.

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

-  x — если x больше или равен 0;

-  -x — если x меньше 0.

В силу специфики реализации функции abs() следует избегать использования дру­гих функций в качестве параметров:

- abs (a++); // может привести к некорректным результатам a++;

- abs(a, 0); //  так корректно

 

Функция constrain(x, a, b)

Функция проверяет и, если надо, задает новое значение так, чтобы оно было в об­ласти допустимых значений, заданной параметрами.

Параметры:

-  x — проверяемое значение, любой тип;

-  a — нижняя граница области допустимых значений, любой тип;

-  b — верхняя граница области допустимых значений, любой тип.

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

-  x — если x входит в область допустимых значений [a..b];

-  a — если x меньше a;

-  b — если x больше b.


Пример:

sensVal = constrain(sensVal, 10, 150);

// ограничиваем значения sensVal диапазоном от 10 до 150

 



Поделиться:


Последнее изменение этой страницы: 2021-02-07; просмотров: 235; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.116.8.110 (0.031 с.)