안녕하세요 제타지니입니다. 이번 포스트에서는 아두이노에 저장되어있는 '수학함수'에 대해서 알아보겠습니다.
수학함수라고 하면, 저희가 흔히 아는 값 비교, 연산 등에 쓰이는 함수이죠.
자세하게 알아볼 함수는 다음과 같습니다.
최대 -최소값 반환 함수
min, max
절대값 반환 함수
abs
데이터 / 값 제한 & 반환 함수
constrain, map
거듭제곱 / 제곱근 반환 함수
pow, sqrt
삼각함수
sin, cos, tan
난수생성함수
randomSeed
random
최댓값 - 최솟값 반환 함수
min과 max 함수를 같이 설명해 보도록 하겠습니다.
min(a, b); //a 와 b값 중에 최솟값을 계산해서 반환합니다.
max(a, b); //a 와 b값 중에 최댓값을 계산해서 반환합니다.
a와 b에는 모든 데이터형이 올 수 있습니다.
다만 주의하실 점은 max함수, min함수 모두 함수의 파라미터에 다른 연산을 사용하는 경우 잘못된 결과가 나올 수 있으므로 피하는 것이 좋습니다.
예를 들어
max(a--, 0); //이렇게 쓰시게 된다면 잘못된 결과를 낼 수 있기 때문에 피해야 합니다.
a--;
max(a, 0); //다음과 같이; 매개변수에는 다른 연산을 사용하지 않도록 합니다.
절대값 반환 함수
abs(a); //a의 절대값을 반환합니다.
max값과 비슷하게 파라미터에 다른 연산을 사용하는 경우 잘못된 결과가 나올 수 있기 때문에 피하는 것이 좋습니다.
데이터 / 값 제한 & 반환 함수
constrain(x, 최소값, 최대값);
x 데이터 값을 최소값과 최대값의 범위 내로 한정합니다.
즉, 수식으로 나타낸다면
constrain(x, a, b)
1. x값이 a(최소값)보다 작은 경우 a 반환
2. x값이 a(최소값)보다 크고, b(최댓값)보다 작은 경우 x 값 반환
3. x값이 b(최대값)보다 큰 경우 b 반환
map(long x, long a, long b, long q, long r)
x: 데이터
a: 현재 데이터가 가질 수 있는 최솟값
b: 현재 데이터가 가질 수 있는 최댓값
e: 변환하고자 하는 범위의 최솟값
f: 변환하고자 하는 범위의 최댓값
함수의 정의는 주어진 데이터 값을 지정된 범위의 값으로 '선형 사상(linear mapping)' 시킵니다.
이 함수는 예를 드는 편이 훨씬 이해하기 쉽습니다.
analogRead에서 읽어들인 값은 0 ~ 1023의 값을 반환하지요.
그런데, 그곳에서 읽어 들인 값을 변환하고 싶은 거지요.
map(x, 0, 1023, 0 ,100); 이라고 함수를 쓰게 되면,
0~1023까지의 return값을 백분율(0~100)으로 매핑(mapping)하는 것입니다.
예를 들어 피에조 스피커의 주파수는 20000[Hz]까지 입니다
그럼 analoRead로 읽은 값을 피에조 주파수 값으로 변환하고자 하면
map(x, 0, 1023, 0, 20000)이라고 쓰시면 됩니다.
그럼 0~1023 return 값을 0~20000의 값으로 mapping 하게 되는 거죠.
그래서 제가 mapping에 대해 한 마디로 정의 내린 것은 '값의 변환'입니다.
map 함수는 입력 범위의 시작이 0이 아닐 때 유용합니다.
map 함수는 constrain 함수와 같이 쓰일 때가 많은 데요, 그 이유인 즉슨 map 함수가 값의 범위의 제한이 없기 때문에 예기치 못한 값을 반환 할 수 있기 때문에, 값의 제한을 두는 constrain 함수와 같이 쓰입니다.
거듭 제곱 / 제곱근 계산 함수
pow
double pow(double base, double exponent)
base: 밑, exponent: 지수
주어진 밑과 지수로 거듭제곱 값을 계산하여 반환합니다.
sqrt
double sqrt(double x)
x: 데이터
주어진 값의 제곱근을 계산하여 반환합니다.
삼각함수
double sin(double rad)
double cos(double rad)
double tan(double rad)
주어진 각도(rad)를 cosine, sine, tangent 값으로 변환하여 반환합니다.
'만져보는 임베디드 시스템 > 아두이노 소프트웨어' 카테고리의 다른 글
아두이노 소프트웨어-xiv. 함수 -비트 조작 함수 (0) | 2021.01.05 |
---|---|
아두이노 소프트웨어-xiii. 함수 -난수 생성 함수 (0) | 2020.12.31 |
아두이노 소프트웨어-xi. 함수 -시간함수 (0) | 2020.12.31 |
아두이노 소프트웨어-x. 함수 -디지털, 아날로그 입출력, 기타 입출력 함수 (0) | 2020.12.31 |
아두이노 소프트웨어-ix. 객체지향 (0) | 2020.12.31 |