Map()
| Actualizado:
Comentarios: 0
Modifica un valor que se encuentra inicialmente dentro de un rango para que esté dentro de otro rango de forma que la transformación del valor sea lo más proporcionada posible.
Sintaxis
map(valor_entrada, inicio_entrada, final_entrada, inicio_salida, final_salida);
Parametros
- valor_entrada: es el número a mapear
- inicio_entrada: es el límite inferior del rango actual del valor
- final_entrada: es el límite superior del rango actual del valor
- inicio_salida: es el límite inferior del rango resultado del valor
- final_salida: es el límite superior del rango resultado del valor
Ejemplo
En ocasiones, los valores que obtenemos de la lectura de un pin, como por ejemplo un sensor, pueden estar fuera de una escala determinada y tenemos que trasladarlos a otro rango para poder usarlos.
El valor de salida que podemos darle a un led es de 0 a 255, que se traduce en su nivel de luminosidad, pero los datos que leemos del sensor pueden llegar a 1024. Por esto debemos mapear el resultado, es decir , dejarlo en unos valores de entre 0 y 255.
int valorcds; //Valor obtenido
int brilloLED; //Valor enviado al LED
void setup(void) {
Serial.begin(9600);
}
void loop(void) {
valorcds = analogRead(0);
Serial.print("Ambiental: ");
Serial.println(valorcds);
/*El valor obtenido será mayor cuanto más brillante sea el
entorno. En cambio, el LED ha de iluminar más cuanto más oscuro sea
el entorno. Es decir, "brilloLED" ha de ser mayor cuanto menor sea el
valor de "valorcds". Por eso, hemos de invertir "valorcds" para que
su valor pase de una escala de 0 a 1023 a otra de 1023 a 0.*/
valorcds=1023-valorcds;
/*Y ahora hemos de
mapear "valorcds" para que caiga dentro del rango admitido para la
salida PWM. Es decir, pasar un valor que está entre 0 y 1023 a otro
que está entre 0 y 255.*/
brilloLED = map(valorcds, 0, 1023, 0, 255);
analogWrite(9, brilloLED);
Serial.print("Brillo: ");
Serial.println(brilloLED);
delay(100); //Para que se pueda ver el nuevo brillo
}
El esquema de conexiones lo puedes ver en el proyecto: Cambiar la intensidad de un led según la luz ambiental.