Оглавление
Константы #
Константа | Смысл | Значение |
---|---|---|
PI |
pi | 3.1415926 |
HALF_PI |
pi/2 | 1.5707963 |
TWO_PI |
pi*2 | 6.2831853 |
DEG_TO_RAD |
pi/180 | 0.0174532 |
RAD_TO_DEG |
180/pi | 57.295779 |
EULER |
e | 2.7182818 |
Функции #
Сравнение #
min #
min(a, b)
Вернёт меньшее из двух значений:
int x = min(4, 9); // x == 4
Может быть реализовано как:
- Макрос (например на AVR) - работает для любых типов данных. Не рекомендуется подавать выражение как аргумент, т.к. оно будет вычислено несколько раз
- Шаблонная функция (например на ESP8266/32) - аргументы обязательно должны быть одного типа данных. Передача выражений и функций как аргументов не влияет на скорость выполнения
max #
max(a, b)
Вернёт большее из двух значений:
int x = max(4, 9); // x == 9
Может быть реализовано как:
- Макрос (например на AVR) - работает для любых типов данных. Не рекомендуется подавать выражение как аргумент, т.к. оно будет вычислено несколько раз
- Шаблонная функция (например на ESP8266/32) - аргументы обязательно должны быть одного типа данных. Передача выражений и функций как аргументов не влияет на скорость выполнения
constrain #
constrain(x, min, max)
Вернёт значение
x
, ограниченное минимальным min
включительно и максимальным max
включительно:
int x = constrain(10, 4, 9); // x == 9
Это макрос: не рекомендуется подавать выражение как аргумент, т.к. оно будет вычислено несколько раз.
Вычисление #
sq #
sq(x)
Вернёт квадрат
x
(x*x
). Это макрос: не рекомендуется подавать выражение как аргумент, т.к. оно будет вычислено несколько раз.map #
long map(long x, long in_min, long in_max, long out_min, long out_max)
Перевести число
x
из диапазона от in_min
до in_max
в диапазон от out_min
до out_max
по линейному закону и возвращает результат:
int x = map(2, 0, 5, -100, 100); // x == -20
Примечание для ESP8266/32: in_min
не должен быть равен in_max
- будет деление на 0 и МК перезагрузится. Значения нужно контролировать самостоятельно, функция этого не делает.
radians #
radians(deg)
Перевести градусы в радианы, вернёт результат
degrees #
degrees(rad)
Перевести радианы в градусы, вернёт результат
Случайные числа #
random #
long random(long max)
long random(long min, long max)
Получить псевдослучайное число в диапазоне от
0
до max - 1
или от min
до max - 1
(по сути включая минимум и не включая максимум), каждый вызов - новое числоrandomSeed #
void randomSeed(unsigned long seed)
Установить стартовое значение для генерации псевдослучайных чисел через
random()
. Рекомендуется использовать физически случайные величины, например сигнал с аналогового пина или время с последнего нажатия кнопки человеком.Битовая математика #
highByte #
highByte(x)
Вернёт старший байт из значения:
uint8_t h = highByte(0xabcd); // h == 0xAB
lowByte #
lowByte(x)
Вернёт младший байт из значения:
uint8_t l = lowByte(0xabcd); // h == 0xCD
makeWord #
uint16_t makeWord(uint8_t high, uint8_t low)
Склеит и вернёт 16-битное значение из двух байтов: старший
high
и младший low
:
uint16_t b = makeWord(0xab, 0xcd); // h == 0xABCD
bit #
bit(b)
Вернёт
2^b
, точнее 1 << b
:
uint8_t x = bit(3); // x == 0b1000
bitSet #
bitSet(value, bit)
Установит в переменной
value
бит под номером bit
:
uint8_t x = 0;
bitSet(x, 3); // x == 0b1000
bitClear #
bitClear(value, bit)
Сбросит в переменной
value
бит под номером bit
:
uint8_t x = 0b1000;
bitClear(x, 3); // x == 0
bitWrite #
bitWrite(value, bit, v)
Запишет в переменную
value
бит под номером bit
в состояние v
(0 или 1):
uint8_t x = 0b1000;
bitWrite(x, 0, 1); // x == 0b1001
bitWrite(x, 3, 0); // x == 0b1
bitRead #
bitRead(value, bit)
Вернёт в значении
value
состояние бита под номером bit
:
bool v = bitRead(0xff, 3); // v == 1