sin()
sin() вычисляет синус угла в радианах и возвращает double от -1 до 1 — удобно для плавной анимации, траекторий и координатных вычислений.
Полная статья
Описание
Функция sin() вычисляет синус угла, заданного в радианах. Это стандартная тригонометрическая функция из библиотеки math.h, которая автоматически подключается в Arduino. Результат всегда лежит в диапазоне от -1 до 1 включительно.
Если угол у вас задан в градусах, его нужно предварительно перевести в радианы. Для этого умножьте значение в градусах на PI / 180.0. Константа PI доступна в Arduino без дополнительных подключений.
Синтаксис
Используйте следующую функцию для вычисления синуса заданного угла в радианах:
sin(rad)
Параметры
rad: угол в радианах. Допустимые типы данных: float.
Возвращает
Синус угла в виде числа с плавающей точкой. Тип данных: double.
Пример кода
float angle = (2.0 / 3.0) * PI; // в радианах
double res = 0;
void setup() {
Serial.begin(9600);
res = sin(angle);
Serial.print("The angle sine is: ");
Serial.println(res);
}
void loop() {
}
Где применяется
- Плавная анимация светодиодов. Подавая на
analogWrite()значение, вычисленное черезsin(), можно получить мягкое «дыхание» яркости вместо резких скачков. - Управление сервоприводами. Синусоидальная траектория движения выглядит естественнее, чем линейная развёртка угла.
- Генерация звука. Синус лежит в основе формирования тоновых сигналов и простых волновых форм.
- Вычисление координат. При работе с полярными координатами
sin()иcos()переводят угол и радиус в декартовы X/Y.
Практические замечания
- Аргумент передаётся в радианах, а не в градусах. Самая частая ошибка — передать градусы напрямую и получить неожиданный результат.
- Чтобы перевести градусы в радианы, используйте формулу:
rad = degrees * PI / 180.0. - Функция возвращает
double, однако на большинстве плат Arduino (Uno, Nano, Mega) типdoubleфизически равенfloat— 32-битное число одинарной точности. На платах с 64-битными вычислениями (например, Arduino Due)doubleдаёт полную двойную точность. - Результат
sin()удобно масштабировать под нужный диапазон. Например, для значений от 0 до 255 используйте:(sin(rad) + 1.0) * 127.5. - Если результат кажется неверным, выведите промежуточное значение угла в
Serial Monitorи убедитесь, что оно действительно в радианах и находится в ожидаемом диапазоне.