Matematické funkcie

Teraz si ukážeme, aké matematické funkcie a operácie podporuje Arduino. Ale skôr ako začneme, spomeňme si na základné operátory:

1 + 2 = 3 //sčítanie 
2 - 1 = 1 //odčítanie 
2 * 3 = 6 //násobenie 
9 / 3 = 3 //delenie 
9 % 6 = 3 //modulo - slovami sa dá vyjadriť ako: 9 delené 6 je 1 zvyšok 3 
          //operácia modulo nám vráti práve tento zvyšok

Väčšina z týchto operátorov je dobre známa z hodín matematiky. Jedinou výnimkou je operátor % (modulo), ktorý vráti zvyšok po celočíselnom delení.

min(x,y)

Funkcia min() sa používa na výber menšieho čísla. Vstupné parametre sú dve čísla a výstupná hodnota je menšie z nich. Používa sa napríklad na hľadanie najmenšieho čísla v poli alebo na obmedzenie hodnôt snímača (aby sa zabránilo prekročeniu určitého limitu).

//hľadanie najmenšieho čísla v poli 
void setup() { 
  int dlzka = 10; 
  int pole[] = {2, 4, -8, 3, 2, 100, 200, 50, 99, 358}; 
  int najm = pole[0];  
  Serial.begin(9600); 
  for(int i = 1; i < dlzka; i++){ najm = min(najm, pole[i]); } 
  Serial.println(najm); 
} 
void loop() { }

max(x,y)

Syntax tejto funkcie je rovnaký ako min(). Jeho parametre sú tiež dve čísla a návratová hodnota je väčšia z nich. Môže sa použiť napríklad na nájdenie najväčšieho čísla v poli.

//hľadanie najväčšieho čísla v poli 
void setup() { 
  int dlzka = 10; 
  int pole[] = {2, 4, -8, 3, 2, 100, 200, 50, 99, 358}; 
  int najm = pole[0];  
  Serial.begin(9600); 
  for(int i = 1; i < dlzka; i++){ najm = max(najm, pole[i]); } 
  Serial.println(najm); 
} 
void loop() { }

abs(x)

Táto funkcia vracia absolútnu hodnotu čísla. Vstup je číslo a výstup je jeho absolútna hodnota.

= abs(150)  //x = 150 
x = abs(-150) //x = 150 

Absolútna hodnota x je nezáporné reálne číslo. V laických podmienkach je absolútnou hodnotou x vzdialenosť od nuly po číselnej osi.


constrain(x,a,b)

Funkcia constrain() môže byť reprezentovaná ako kombinácia min() a max() s príslušnými parametrami. Slúži na obmedzenie rozsahu premenných zhora aj zhora. Má tri parametre: upravenú hodnotu “x“, dolnú hranicu “a” a hornú hranicu “b“. Ak vstupné číslo klesne pod dolnú hranicu, výsledkom je dolná hraničná hodnota. Ak prekročí hornú hranicu, výsledkom je horná hraničná hodnota. Ak je hodnota v rámci limitov, výstup funkcie bude mať rovnakú hodnotu ako vstupný parameter.

= constrain(1,10,100);   // x = 10 
x = constrain(150,10,100); // x = 100 
x = constrain(50,10,100);  // x = 50 

map(a,xa,xb,ya,yb)

Rovnako ako predchádzajúca funkcia constrain(), tak aj funkcia map() upravuje rozsah premennej. Na rozdiel od predchádzajúcej funkcie však hodnoty nie sú orezané, ale sú rovnomerne “natiahnuté” alebo “stlačené” po celej stupnici. Funkcia tiež spracováva záporné čísla.

// z = vstupná hodnota z pôvodnej stupnici
// xa = minimum na pôvodnej stupnici
// xb = maximum na pôvodnej stupnici
// ya = minimum na novej stupnici
// yb = maximum na novej stupnici
// h = výstupná hodnota z novej stupnici

Môže sa použiť napríklad na úpravu hodnoty získanej pri čítaní analógového vstupu (0-1023) a jej použitie vo funkcii analogWrite(), ktorá pracuje s hodnotami od 0 do 255.

//úprava jasu LED pomocou potenciometra 
int analog, pwm; 
void setup() { 
  Serial.begin(9600); 
} 
void loop() { 
  analog = analogRead(A0); 
  pwm = map(analog, 0, 1023, 0, 255); 
  Serial.print("Analog: "); 
  Serial.print(analog); 
  Serial.print(" PWM: "); 
  Serial.println(pwm); 
  analogWrite(11, pwm); 
}

Pre zaujímavosť, tu je matematický popis funkcie:

long map(long x, long in_min, long in_max, long out_min, long out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;

}

pow(x,e)

Medzi ďalšie matematické funkcie pre Arduino tu máme funkciu, ktorá umocní číslo “x” (float) na daný exponent “e” (float).

pow(10,3) = 1000; 
pow(10,4) = 10000; 
pow(2,5) = 32;

sqrt(x)

Funkcia vráti druhú odmocninu zo vstupného čísla.

sqrt(25) = 5; 
sqrt(256) = 16; 
sqrt(10000) = 100;

Tento text je preložený a upravený zo stránok arduino.cc pod licenciou Creative Commons Attribution-ShareAlike 3.0.

Výber na čítanie...

Dallas DS18B20 – meranie teploty
Dallas DS18B20 – meranie teploty

Ďalší vynikajúci senzor na meranie teploty je Dallas DS18B20. V článku popisujem jeho parametre, dva spôsoby napájania, vnútornú pamäť (registre) a samozrejme zapojenie s Arduinom, jednoduchý program a nejaké fotky. Teplotný senzor (alebo tiež čidlo) DS18B20 od firmy Maxim (predtým Dallas) je v Arduino komunite veľmi obľúbené. Za veľmi dobrú cenu umožňuje...

Čítať viac...

Kondenzátor
Kondenzátor

Kondenzátor je dvojpólová reaktančná súčiastka, ktorá realizuje elektrickú veličinu – kapacitu, to je schopnosť akumulovať elektrický náboj a tým aj energiu v elektrickom poli medzi doskami kondenzátora. V zásade vždy ide o dve elektródy s vloženým...

Čítať viac...

Arduino MEGA 2560
Arduino MEGA 2560

Arduino MEGA 2560 je navrhnutý pre komplexnejšie projekty. Má väčší priestor pre program, takže sa využíva pre 3D tlačiarne a projekty robotiky. To dáva projektom dostatok priestoru. K tejto doske nájdete aj rôzne shieldy. Medzi najpoužívanejšie patrí napr. ...

Čítať viac...

Obľúbené produkty...

Keyestudio Ultimate IOT Super Starter Kit

52.99 EUR

52.99 EUR

Keyestudio W5100 Ethernet Shield

15.48 EUR

15.48 EUR

Keyestudio ESP32 Sensor Kit 42 in 1

157.12 EUR

76.99 EUR

Keyestudio Upgrade Mini Smart Tank Robot V3

102.02 EUR

73.46 EUR

Vyhľadať články
Programovanie...
  • Matematické funkcie

    Teraz si ukážeme, aké ďalšie matematické funkcie a operácie podporuje Arduino okrem sčítavania, o...

  • Digitálne IO funkcie

    Keďže je Arduino určené k ďalšiemu rozširovaniu, obsahuje vstupy a výstupy (nazývané piny), ku kt...

  • Ostatné IO funkcie

    U Arduina je možné generovať i zvuk, ale iba v najjednoduchšej podobe. Neumožňuje totiž generovať...

  • Dátové typy

    Celočíselné dátové typy môžu obsahovať modifikátory unsigned respektíve signed, čím môžeme požado...

  • Relačné operátory

    Relačné operátory sú < > = == !=. Sú definované pre operandy všetkých základných dátových typov. ...

Podpora webu
Na kávu už prispeli
Dátum Meno Suma
22.03.2025 Radoslav Kopera 5€
30.12.2024 Jozef Greš 5€
20.10.2024 Radovan Nosáľ 20€
02.10.2024 Milan Durkoš 10€
08.01.2024 Veres Dusan 10€
15.05.2023 Ivan Danis 10€
28.09.2022 Ivan Vrab 7€
14.05.2022 Nemcic Marian 10€
04.02.2022 Robert Bilko 5€
29.01.2022 Peter Buffa 5€
19.11.2021 Rastislav Rehak 5€
16.09.2021 Anton Strela 5€
13.09.2021 Juraj Jedlak 5€
02.09.2021 Michal Marek 7€
08.08.2021 František Uhrík 5€
21.07.2021 Juraj Hrdina 5€
25.03.2021 Jan Nemec 10€
16.03.2021 Igor Pavlov 5€
25.02.2021 Lukas Lacuch 5€
06.11.2020 Pavol Balint 5€
05.11.2020 Marek Horečný 5€
05.10.2020 Jan Kusnir 5€
27.04.2020 Jan Zuskin 15€
26.04.2020 Dušan Sojka 5€
24.02.2020 Juraj Lackanič 5€
22.01.2020 František Žilinec 10€
20.05.2018 Tomáš F. 2€
17.12.2018 Pavol P. 5€
QR Donate 10Eur