Exemples | Referència | Plaques | Recursos CITCEA | |
Projectes | Programació | Perifèrics | Inici |
Disposem d'una sèrie de funcions matemàtiques i trogonomètriques que es descriuen a la taula següent. Quan s'indica que una o més variables han de ser enteres, poden ser de qualsevol dels tipus enters.
Nom | Utilitat | Format | Tipus | Comentaris |
pow | Potència | p = pow(b,e) | b float e float p double |
L'esponent pot tenir decimals |
sqrt | Arrel quadrada | s = sqrt(r) | r qualsevol s double |
|
min | Mínim | m = min(a,b) | Totes qualsevol tipus | Cal evitar posar funcions com a paràmetres d'aquesta funció Feu servir variables per evitar-ho |
max | Màxim | m = max(a,b) | Totes qualsevol tipus | Cal evitar posar funcions com a paràmetres d'aquesta funció Feu servir variables per evitar-ho |
abs | Valor absolut | n = abs(e) | Totes qualsevol tipus | Si e és negatiu n = -e Si e és positiu n = e Cal evitar posar funcions com a paràmetres d'aquesta funció Feu servir variables per evitar-ho |
round | Arrodoniment a l'enter més proper | n = round(e) | Aquesta funció no està a la referència d'Arduino però és una funció intrínseca de C i C++ |
|
floor | Arrodoniment per defecte | n = floor(e) | Aquesta funció no està a la referència d'Arduino però és una funció intrínseca de C i C++ |
|
ceil | Arrodoniment per excés | n = ceil(e) | Aquesta funció no està a la referència d'Arduino però és una funció intrínseca de C i C++ |
|
constrain | Limita el valor | r = constrain(v,n,x) | Totes qualsevol tipus | Si v > x r = x Si v < n r = n Si n > v > x r = v Cal evitar posar funcions com a paràmetres d'aquesta funció Feu servir variables per evitar-ho |
map | Canvi d'escala | r = map(v,vn,vx,rn,rx) | Totes enteres | Canvia vn per rn i vx per rx Els valors intermedis els canvia seguint una recta Si rx < rn també funciona i inverteix el sentit de la variable El resultat serà la part entera (truncament) del valor calculat Vegeu descripció més avall |
random | Valor aleatori | r = random(x) | Totes enteres | Torna un valor enter aleatori entre 0 i x - 1 Els valors són realment pseudoaleatoris Per poder considerar-los aleatoris cal combinar-ho amb randomSeed |
r = random(n,x) | Totes enteres | Torna un valor enter aleatori entre n i x - 1 Els valors són realment pseudoaleatoris Per poder considerar-los aleatoris cal combinar-ho amb randomSeed |
||
randomSeed | Llavor per a random | randomSeed(s) | s entera | Vegeu exemple més avall |
Nom | Utilitat | Format | Tipus | Comentaris |
sin | Sinus | s = sin(a) | a float s double |
L'angle ha d'estar en radians |
cos | Cosinus | c = cos(a) | c float s double |
L'angle ha d'estar en radians |
tan | Tangent | t = tan(a) | t float s double |
L'angle ha d'estar en radians |
El paràmetre que hem d'entrar a randomSeed ha de ser un valor que pugui considerar-se aleatori. El més habitual és agafar la lectura d'una entrada analògica que no estigui connectada enlloc.
long aleatori; // Variable per guardar el valor
void setup(){ randomSeed(analogRead(7)); // A l'entrada A7 no hi ha res connectat // per tant, només llegim soroll }
void loop(){ ... aleatori = random(5,10); // Valor aleatori entre 5 i 9 ... }
Aquesta funció agafa els valors d'una variable v que pot tenir valors entre vn i vx i dóna un valor de sortida que està entre rn i rx. Una aplicació molt típica seria convertir el valor d'una entrada analògica (entre 0 i 1023) en un altre valor que es pugui enviar a una sortida analògica (entre 0 i 255).
int entrada; // Variable corresponent a l'entrada analògica int sortida; // Variable corresponent a la sortida analògica
void loop(){ ... entrada = analogRead(2); sortida = map(entrada, 0, 1023, 0, 255); analogWrite(5, sortida); ... }
El següent gràfic ens mostra com la funció map converteix el valor d'entrada en el valor de sortida.
L'equació per al càlcul seria la següent:
Si posem un valor de rx més petit que el de rn podem tenir un canvi de signe en la inclinació.
Per exemple si volem que la sortida faci més llum com menys lluminositat veu el sensor de l'entrada:
int entrada; // Variable corresponent a l'entrada analògica int sortida; // Variable corresponent a la sortida analògica
void loop(){ ... entrada = analogRead(2); sortida = map(entrada, 0, 1023, 255, 0); analogWrite(5, sortida); ... }
No hi ha cap problema en que, en cas necessari, algun dels valors sigui negatiu.
En aquest web, les fotografies marcades amb [AF] són del web d'Adafruit, les marcades amb [SF] del web d'Sparkfun i les marcades amb [AU] del web d'Arduino.
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.