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ść.