만져보는 임베디드 시스템/아두이노 소프트웨어

아두이노 소프트웨어-xii. 함수 -수학 함수

hanjinee 2020. 12. 31. 00:42

안녕하세요 제타지니입니다. 이번 포스트에서는 아두이노에 저장되어있는 '수학함수'에 대해서 알아보겠습니다.

 

수학함수라고 하면, 저희가 흔히 아는 값 비교, 연산 등에 쓰이는 함수이죠.

자세하게 알아볼 함수는 다음과 같습니다.  

 

최대 -최소값 반환 함수 

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 값으로 변환하여 반환합니다. 

 

 

 

 

 

 

728x90