View Categories

Математика

Константы #

Константа Смысл Значение
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
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Прокрутить вверх