Internet de les coses amb ESP32 i ESP8266

Exemples Referència Plaques   Recursos CITCEA
Projectes Programació Perifèrics   Inici

Funcions matemàtiques i trigonomètriques

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.

Funcions matemàtiques

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

Funcions trigonomètriques

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

Exemple de random i randomSeed

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
...
}

Descripció de la funció map

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.

funció map

L'equació per al càlcul seria la següent:

equació de la funció map

Si posem un valor de rx més petit que el de rn podem tenir un canvi de signe en la inclinació.

funció map

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.

funció map

 

 

 

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.

 

 

 

 

 

 

 

 

 

 

Licencia de Creative Commons
Esta obra de Oriol Boix está licenciada bajo una licencia no importada Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0.