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í.
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() { }
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() { }
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.
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
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; }
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;
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.
Tranzistor je základným stavebným prvkom skoro každého dnešného elektronického zariadenia. Základom tranzistora je kryštál polovodiča s dvoma priechodmi PN. Polovodičové priechody tranzistora vytvárajú štruktúru zodpovedajúcej spojenie dvoch polovodičových...
Farebné značenie rezistorov bolo vyvinuté na začiatku 20. rokov 20. storočia Asociáciou výrobcov rádií (RMA, teraz súčasťou EIA) a bolo publikované ako EIA-RS-279. RMA zaviedla spočiatku niekoľko spôsobov značenia. Neskôr sa začal používať iba jeden spôsob...
Na meranie teploty a vlhkosti v interiéry som vyskúšal známe senzory DHT11 (modrý) a DHT22 (biely). V článku som spomenul rozdiely, zapojil senzory s Arduinom Nano, vyhľadal vhodnú knižnicu, vyskúšal nejaké tie programy a samozrejme niečo som i nafotil. ...