Funkcje matematyczne
Funkcje matematyczne w ArduinoIDE ułatwiają wykonanie porównań i przeliczeń wartości otrzymanych w wyniku pomiaru, czy transmisji danych. Twórcy ArduinoIDE odradzają stosowanie inkrementacji i dekrementacji wewnątrz funkcji matematycznych, uzasadniają to tym, że może pojawić się wynik niezgodny z oczekiwaniami... Osobiście nie zauważyłem nieprawidłowego działania takiej składni.
min()
Funkcja min() zwraca mniejszą wartość z dwóch podanych jako parametry. Przykładowe zastosowanie funkcji min() podano poniżej:
int x;
x=min(100,200); //x=100
x=min(a,b) // gdy a<b x=a, gdy a>b x=b
W pierwszym przypadku zmienna x będzie miała wartość 100, w drugim natomiast w zależności od wartości zmiennych a i b zmiennej x przypiszemy mniejszą wartość.
max()
Analogicznie do funkcji min() funkcja max() zwraca wartość liczby większej podanej jako jeden z dwóch parametrów. Przykład wykorzystania funkcji max() znajduje się poniżej:
int x;
x=max(100,200); //x=200
x=max(a,b) // gdy a>b x=a, gdy a<b x=b
abs()
Funkcja abs() zwraca wartość bezwzględną z podanego parametru. W przypadku, gdy podanym parametrem jest liczba większa lub równa zero funkcja zwraca tą samą wartość. W przypadku, gdy jako parametr podamy liczbę ujemną funkcja zwraca zanegowaną wartość. Kilka przykładów zastosowania funkcji abs() znajduje się poniżej:
int x=5, y=-3, z;
z=abs(x); //z=5
z=abs(y); //z=3
z=abs(0); //z=0
z=abs(-12); //z=12
constrain()
Funkcja constrain() umożliwia dokonanie konwersji wartości do podanego przedziału. Składnia funkcji jest następująca:
constrain(x, a, b);
X to wartość, którą porównujemy, a to najmniejsza wartość z przedziału, b największa wartość z przedziału. Funkcja zwraca wartość x w przypadku, gdy x>a i x<b. Dla x<a funkcja zwraca wartość a, natomiast dla x>b funkcja zwraca wartość b. Za pomocą funkcji constrain() możemy ograniczyć zbiór wartości otrzymanych z wejścia analogowego do określonego przedziału. Poniżej przykładowe zastosowanie funkcji constrain():
sensVal = constrain(sensVal, 10, 150);
//ograniczenie przedziału odczytanych wartości do 10 - 150
map()
Funkcja map umożliwia zamapowanie (przeliczenie) wartości z jednego zakresu na drugi. Jest to często wykorzystywanie w sytuacji, gdy chcemy dokonać proporcjonalnego sterowania. Przykładowo na podstawie odczytanego napięcia wejściowego sterujemy wypełnieniem sygnału PWM. Składnia funkcji map() jest podana poniżej:
map(x,a1,a2,b1,b2);
X to wartość, która ma zostać przeliczona, a1 i a2 to graniczne wartości przedziału z jakiego należy przeliczyć, b1 i b2 to graniczne wartości przedziału na jaki przeliczamy. Funkcja zwróci wartość z przedziału b1 - b2.
Poniżej przykład zastosowania funkcji map():
#define analogPin A0;
#define digitalPin 9
void setup()
{
pinMode(analogPin,INPUT);
pinMode(digitalPin,OUTPUT);
}
void loop()
{
int val = analogRead(analogPin);
val = map(val, 0, 1023, 0, 255);//konwersja z liczby 10-bitowej na 8-bitową
analogWrite(pwmPin, val);
}
W przykładzie wartość odczytana z dziesięcio-bitowego przetwornika A/C zostale przeliczona na 8-bitową wartość dopuszczalną w sterowaniu PWM.
pow()
Funkcja pow() oblicza wartość potęgi dla podanych parametrów:
pow(x,y);
X to liczba podnoszona do potęgi (wykładnik), y wyznacznik potęgi (wykładnik). 2^3=2*2*2=8. Przykłady zastosowania funkcji pow():
float x;
int a;
x = pow(2,3); //x=8.00
a = pow(2,3); //a=8
a = pow(3,2); //a=9
sqrt()
Funkcja sqrt() umożliwia obliczenie kwadratu podanej liczby. Przykłady zastosowania funkcji sqrt() podano poniżej:
int a=3,x;
x = sqrt(a); // x = 9
x = sqrt(2); // x = 4
sin(), cos(), tan()
Funkcje trygonometryczne zawarte w ArduinoIDE umożliwiają obliczenie wartości sin, cos, tg dla konta podanego w radianach. Wywołanie funkcji jest proste, każda z nich wymaga podania jako parametr wywołania wartości kąta w radianach i zwraca obliczoną wartość.