Arduino.Функции
https://t.me/HotCheatSheetЦифровой ввод/вывод
pinMode() — конфигурирует режим работы указанного вывода: как вход либо как выход.
Синтаксис:
pinMode(pin, mode)
Параметры:
pin: номер вывода, режим работы которого будет конфигурироваться.
mode: принимает значения INPUT, OUTPUT или INPUT_PULLUP (см. страницу цифровые выводы для подробного описания их функциональности).
Возвращаемые значения:
Нет
Пример:
int ledPin = 13; // Светодиод подсоединен к цифровому выводу 13
void setup()
{
pinMode(ledPin, OUTPUT); // устанавливаем режим работы вывода, как "выход"
}
void loop()
{
digitalWrite(ledPin, HIGH); // включаем светодиод
delay(1000); // ждем 1 секунду
digitalWrite(ledPin, LOW); // выключаем светодиод
delay(1000); // ждем 1 секунду
}
digitalWrite() — отправляет на цифровой вывод значение HIGH или LOW.
Синтаксис:
digitalWrite(pin, value)
Параметры:
pin: номер вывода
value: значение HIGH или LOW
Возвращаемые значения:
нет
Пример:
int ledPin = 13; // светодиод подключен к выводу 13
void setup()
{
pinMode(ledPin, OUTPUT); // переключаем цифровой вывод в режим выхода
}
void loop()
{
digitalWrite(ledPin, HIGH); // включаем светодиод
delay(1000); // ждем 1 секунду
digitalWrite(ledPin, LOW); // выключаем светодиод
delay(1000); // ждем 1 секунду
}
digitalRead() — cчитывает уровень сигнала HIGH или LOW с указанного цифрового вывода.
Синтаксис:
digitalRead(pin)
Параметры:
pin: номер цифрового вывода, с которого необходимо считать значение (int)
Возвращаемые значения:
HIGH или LOW
Пример:
int ledPin = 13; // светодиод подсоединен к цифровому выводу 13
int inPin = 7; // кнопка подсоединена к цифровому выводу 7
int val = 0; // переменная для хранения считанного значения
void setup()
{
pinMode(ledPin, OUTPUT); // конфигурируем цифровой вывод 13 как выход
pinMode(inPin, INPUT); // конфигурируем цифровой вывод 13 как вход
}
void loop()
{
val = digitalRead(inPin); // считываем значение со входа
digitalWrite(ledPin, val); // выводим на светодиод уровень сигнала на кнопке
}
Аналоговый ввод/вывод
analogReference() — устанавливает источник опорного напряжения, использующийся при считывании аналогового сигнала (другими словами, задает максимальное значение входного диапазона).
Параметры:
type: тип источника опорного напряжения (DEFAULT, INTERNAL, INTERNAL1V1, INTERNAL2V56 или EXTERNAL).
Возвращаемые значения:
Нет.
analogRead() — считывает величину напряжения с указанного аналогового вывода.
Синтаксис:
analogRead(pin)
Параметры:
pin: номер вывода, с которого будет считываться напряжение (0 - 5 для большинства плат, 0 - 7 для Mini и Nano, 0 - 15 для Mega)
Возвращаемые значения:
целое число int (от 0 до 1023)
Пример:
int analogPin = 3; // ползунок потенциометра (средний вывод) подключен к аналоговому выводу 3
// крайние выводы соединены с землей и +5В
int val = 0; // переменная для хранения считанного значения
void setup()
{
Serial.begin(9600); // настройка последовательного соединения
}
void loop()
{
val = analogRead(analogPin); // считываем напряжение с аналогового входа
Serial.println(val); // наблюдаем считанное значение
}
analogWrite() — формирует заданное аналоговое напряжение на выводе в виде ШИМ-сигнала.
Синтаксис:
analogWrite(pin, value)
Параметры:
pin: вывод, на котором будет формироваться напряжение.
value: коэффициент заполнения – лежит в пределах от 0 (всегда выключен) до 255 (всегда включен).
Возвращаемые значения:
нет
Пример:
int ledPin = 9; // светодиод подключен к цифровому выводу 9
int analogPin = 3; // потенциометр подключен к аналоговому выводу 3
int val = 0; // переменная для хранения считанного значения
void setup()
{
pinMode(ledPin, OUTPUT); // переключение вывода в режим «выход»
}
void loop()
{
val = analogRead(analogPin); // считываем входное напряжение
analogWrite(ledPin, val / 4); /* значения, возвращаемые analogRead лежат в пределах от 0 до 1023,
а задаваемый коэффициент analogWrite – от 0 to 255*/
}
Расширенный ввод/вывод
tone() — генерирует на выводе прямоугольный сигнал заданной частоты (с коэффициентом заполнения 50%). Функция также позволяет задавать длительность сигнала.
Синтаксис:
tone(pin, frequency)
tone(pin, frequency, duration)
Параметры:
pin: вывод, на котором будет генерироваться сигнал
frequency: частота сигнала в Герцах - unsigned int
duration: длительность сигнала в миллисекундах (опционально) - unsigned long
Возвращаемые значения:
нет
noTone() — прекращает генерирование прямоугольного сигнала после использования функции tone().
Синтаксис:
noTone(pin)
Параметры:
pin: вывод, на котором следует прекратить генерирование сигнала
Возвращаемые значения:
нет
shiftOut() — осуществляет побитовый сдвиг и вывод байта данных, начиная с самого старшего (левого) или младшего (правого) значащего бита.
Синтаксис:
shiftOut(dataPin, clockPin, bitOrder, value)
Параметры:
dataPin: вывод, которому будет отправляться каждый бит из сдвигаемого байта данных (int)
clockPin: тактовый вывод, который будет переключаться каждый раз, когда на выводе dataPin устанавливается корректное значение (int)
bitOrder: характеризует порядок, в котором будут сдвигаться и выводиться биты; может принимать значения MSBFIRST или LSBFIRST. (Most Significant Bit First - старший значащий бит первым, или Least Significant Bit - младший значащий бит первым)
value: сдвигаемый байт данных (byte)
Возвращаемые значения:
нет
shiftIn() — осуществляет побитовый сдвиг и считывание байта данных, начиная с самого старшего (левого) или младшего (правого) значащего бита.
Синтаксис:
byte incoming = shiftIn(dataPin, clockPin, bitOrder)
Параметры:
dataPin: вывод, с которого будет считываться каждый бит (int)
clockPin: тактовый вывод, который будет переключаться при считывании с dataPin
bitOrder: порядок, в котором будут сдвигаться и считываться биты; может принимать значения MSBFIRST или LSBFIRST. (Most Significant Bit First - старший значащий бит первым, или Least Significant Bit - младший значащий бит первым)
Возвращаемые значения:
считанное значение (byte)
pulseIn() — считывает длительность импульса (любого - HIGH или LOW) на выводе.
Синтаксис:
pulseIn(pin, value)
pulseIn(pin, value, timeout)
Параметры:
pin: номер вывода, с которого необходимо считыть импульс (int)
value: тип считываемого импульса: HIGH или LOW (int)
timeout (опционально): время ожидания импульса в микросекундах; значение по умолчанию - одна секунда (unsigned long)
Возвращаемые значения:
длительность импульса (в микросекундах) либо 0 в случае отсутствия импульса в течение таймаута (unsigned long)
Время
millis() — возвращает количество миллисекунд, прошедших с момента старта программы. Возвращаемое число переполнится (сбросится в 0) спустя приблизительно 50 дней.
Параметры:
Нет
Возвращаемые значения:
Количество миллисекунд, прошедших с момента старта программы (unsigned long)
Пример:
unsigned long time;
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("Time: ");
time = millis();
//выводим время с момента старта программы
Serial.println(time);
// ждем 1 секунду, чтобы не отправлять большой массив данных
delay(1000);
}
micros() — возвращает количество микросекунд, прошедших с момента начала выполнения программы Arduino.
Параметры:
Нет
Возвращаемые значения:
Количество микросекунд, прошедших с момента старта программы (unsigned long)
Пример:
unsigned long time;
void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("Time: ");
time = micros();
//выводим время с момента старта программы
Serial.println(time);
// ждем 1 секунду, чтобы не отправлять большой массив данных
delay(1000);
}
delay() — приостанавливает выполнение программы на указанный промежуток времени (в миллисекундах). (В 1 секунде - 1000 миллисекунд.)
Синтаксис:
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); // ждем секунду
}
delayMicroseconds() — приостанавливает выполнение программы на указанный промежуток времени (в микросекундах).
Синтаксис:
delayMicroseconds(us)
Параметры:
us: количество микросекунд, на которые необходимо приостановить программу (unsigned int)
Возвращаемые значения:
нет
Пример:
int outPin = 8; // цифровой вывод 8
void setup()
{
pinMode(outPin, OUTPUT); // конфигурируем цифровой вывод как выход
}
void loop()
{
digitalWrite(outPin, HIGH); // включаем вывод
delayMicroseconds(50); // задержка в 50 микросекунд
digitalWrite(outPin, LOW); // выключаем вывод
delayMicroseconds(50); // задержка в 50 микросекунд
}
Математические вычисления
min() — вычисляет минимальное значение из двух чисел.
Параметры:
x: первое число, любой тип данных
y: второе число, любой тип данных
Возвращаемые значения:
Меньшее из двух чисел.
Пример:
sensVal = min(sensVal, 100); // присваивает sensVal меньшее из чисел sensVal и 100
// позволяя убедиться, что значение sensVal никогда не превысит 100
max() — вычисляет максимальное значение из двух чисел.
Параметры:
x: первое число, любой тип данных
y: второе число, любой тип данных
Возвращаемые значения:
Большее из двух указанных чисел.
Пример:
sensVal = max(senVal, 20); // присваивает sensVal большее из двух чисел sensVal и 20
// позволяя убедиться, что значение sensVal будет не меньше 20
abs() — вычисляет абсолютную величину (модуль) числа.
Параметры:
x: число
Возвращаемые значения:
x: если x больше или равен 0.
-x: если x меньше 0.
constrain() — ограничивает значение переменной заданными пределами.
Параметры:
x: переменная, значение которой необходимо ограничить, любой тип данных
a: нижний предел, любой тип данных
b: верхний предел, любой тип данных
Возвращаемые значения:
x: если x лежит в пределах между a и b.
a: если x меньше a.
b: если x больше b.
Пример:
sensVal = constrain(sensVal, 10, 150); // числовые показания датчика ограничены диапазоном от 10 до 150
map() — преобразовывает значение переменной из одного диапазона в другой. Т.е. значение переменной value, равное fromLow, будет преобразовано в число toLow, а значение fromHigh - в toHigh.
Параметры:
value: переменная, значение которой необходимо преобразовать
fromLow: нижний предел текущего диапазона переменной value
fromHigh: верхний предел текущего диапазона переменной value
toLow: нижний предел нового диапазона переменной value
toHigh: верхний предел нового диапазона переменной value
Возвращаемые значения:
Преобразованное значение.
Пример:
/* Преобразование аналогового значения в 8-битное число (от 0 до 255) */
void setup() {}
void loop()
{
int val = analogRead(0);
val = map(val, 0, 1023, 0, 255);
analogWrite(9, val);
}
pow() — вычисляет значение числа, возведенного в степень. Функция pow() может использоваться для возведения числа в дробную степень, что может быть полезно для экспоненциального представления чисел или кривых.
Параметры:
base: число (float)
exponent: показатель степени, в которую необходимо возвести число (float)
Возвращаемые значения:
Результат возведения в степень (double)
sqrt() — вычисляет квадратный корень числа.
Параметры:
x: число, любой тип данных
Возвращаемые значения:
double, квадратный корень числа.
sq() — вычисляет квадрат числа: число, умноженное само на себя.
Параметры:
x: число, любой тип данных
Возвращаемые значения:
квадрат числа
Тригонометрия
sin() — вычисляет синус угла (в радианах). Результат лежит в пределах от -1 до 1.
Параметры:
rad: угол в радианах (float)
Возвращаемые значения:
синус угла (double)
cos() — вычисляет косинус угла (в радианах). Результат лежит в пределах от -1 до 1.
Параметры:
rad: угол в радианах (float)
Возвращаемые значения:
косинус угла ("double")
tan() — вычисляет тангенс угла (в радианах). Результат лежит в пределах от минус бесконечности до бесконечности.
Параметры:
rad: угол в радианах (float)
Возвращаемые значения:
тангенс угла (double)
Случайные числа
randomSeed() — инициализирует генератор псевдо-случайных чисел, запуская его с произвольной точки последовательности случайных чисел.
Параметры:
long, int - число для генерирования начального значения.
Возвращаемые значения:
нет
Пример:
long randNumber;
void setup(){
Serial.begin(9600);
randomSeed(analogRead(0));
}
void loop(){
randNumber = random(300);
Serial.println(randNumber);
delay(50);
random() — функция random() генерирует псевдо-случайные числа.
Синтаксис:
random(max)
random(min, max)
Параметры:
min - нижняя граница случайной величины, включительно (необязательный параметр).
max - верхняя граница случайной величины, не включительно.
Возвращаемые значения:
случайное число в диапазоне от min до max-1 (long)
Пример:
long randNumber;
void setup(){
Serial.begin(9600);
// если аналоговый вход 0 ни к чему не подсоединен, то произвольный аналоговый
// шум на нем обеспечит разные исходные числа, передаваемые функции randomSeed()
// при каждом запуске программы. Впоследствии это позволит функции random
// генерировать разные значения.
randomSeed(analogRead(0));
}
void loop() {
// выводим случайное число в диапазоне от 0 до 299
randNumber = random(300);
Serial.println(randNumber);
// выводим случайное число в диапазоне от 10 до 19
randNumber = random(10, 20);
Serial.println(randNumber);
delay(50);
}
Биты и байты
lowByte() — извлекает младший (крайний правый) байт переменной (например, типа word).
Синтаксис:
lowByte(x)
Параметры:
x: значение любого типа
Возвращаемые значения:
byte
highByte() — извлекает старший (крайний левый) байт переменной типа word (либо второй младший байт переменной, если ее тип занимает больше двух байт).
Синтаксис:
highByte(x)
Параметры:
x: значение любого типа
Возвращаемые значения:
byte
bitRead() — считывает состояние указанного бита числа.
Синтаксис:
bitRead(x, n)
Параметры:
x: число, у которого необходимо считать бит
n: номер бита, состояние которого необходимо считать. Нумерация начинается с младшего значащего бита (крайнего правого) с номером 0
Возвращаемые значения:
Состояние бита (0 или 1)
bitWrite() — изменяет состояние указанного бита переменной.
Синтаксис:
bitWrite(x, n, b)
Параметры:
x: числовая переменная, у которой необходимо изменить бит
n: номер бита, состояние которого необходимо изменить. Нумерация начинается с младшего значащего бита (крайнего правого) с номером 0
b: новое значение бита (0 или 1)
Возвращаемые значения:
Нет
bitSet() — устанавливает указанный бит (записывает 1) числовой переменной.
Синтаксис:
bitSet(x, n)
Параметры:
x: числовая переменная, у которой необходимо установить бит
n: номер бита, который необходимо установить. Нумерация начинается с младшего значащего бита (крайнего правого) с номером 0
Возвращаемые значения:
Нет
bitClear() — сбрасывает указанный бит (записывает 0) числовой переменной.
Синтаксис:
bitClear(x, n)
Параметры:
x: числовая переменная, у которой необходимо сбросить бит
n: номер бита, который необходимо сбросить. Нумерация начинается с младшего значащего бита (крайнего правого) с номером 0
Возвращаемые значения:
Нет
bit() — вычисляет значение указанного бита (бит 0 - 1, бит 1 - 2, бит 2 - 4, и т.д.).
Синтаксис:
bit(n)
Параметры:
n: бит, значение которого необходимо вычислить.
Возвращаемые значения:
Значение бита
Внешние прерывания
attachInterrupt() — задает функцию, которую необходимо вызвать при возникновении внешнего прерывания.
Синтаксис:
attachInterrupt(interrupt, function, mode)
Параметры:
interrupt: номер прерывания (int)
function: функция, которую необходимо вызвать при возникновении прерывания; эта функция должна быть без параметров и не возвращать никаких значений. Такую функцию иногда называют обработчиком прерывания.
mode: определяет условие, при котором должно срабатывать прерывание. Может принимать одно из четырех предопределенных значений:
LOW - прерывание будет срабатывать всякий раз, когда на выводе присутствует низкий уровень сигнала
CHANGE - прерывание будет срабатывать всякий раз, когда меняется состояние вывода
RISING - прерывание сработает, когда состояние вывода изменится с низкого уровня на высокий
FALLING - прерывание сработает, когда состояние вывода изменится с высокого уровня на низкий.
Возвращаемые значения:
нет
Пример:
int pin = 13;
volatile int state = LOW;
void setup()
{
pinMode(pin, OUTPUT);
attachInterrupt(0, blink, CHANGE);
}
void loop()
{
digitalWrite(pin, state);
}
void blink()
{
state = !state;
}
detachInterrupt() — запрещает заданное прерывание.
Синтаксис:
detachInterrupt(interrupt)
Параметры:
interrupt: номер прерывания, которое необходимо запретить
Прерывания
interrupts() — повторно разрешает прерывания (после того, как они были отключены функцией noInterrupts()).
Параметры:
Нет
Возвращаемые значения:
Нет
Пример:
void setup() {}
void loop()
{
noInterrupts();
// критичный ко времени участок кода
interrupts();
// далее - остальная программа
}
noInterrupts() — запрещает прерывания (повторно разрешить их можно функцией interrupts()).
Параметры:
Нет
Возвращаемые значения:
Нет
Пример:
void setup() {}
void loop()
{
noInterrupts();
// критичный ко времени участок кода
interrupts();
// далее - остальная программа
}