Función map Arduino

La función map de Arduino transfiere un valor del rango actual a un nuevo rango de valores especificado por los parámetros – map(valor, fromLow, fromHigh, toLow, toHigh). El comando map() sólo funciona con enteros. La parte fraccionaria de un número no se redondea según las reglas matemáticas de la transferencia proporcional, sino que simplemente se descarta. Vamos a utilizar la función map en Arduino IDE con ejemplos.

Para esta actividad necesitaremos:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • fotorresistencia (LDR);
  • LED y resistencia de 220 Ohm;
  • placa de pruebas;
  • cables de conexion.

Función map Arduino IDE descripción

Sintaxis map

map(valor_de_entrada, entrada_inferior, entrada_superior, salida_inferior, salida_superior);

En este mandato observamos cinco parámetros:

valor_de_entrada -> es el número a mapear (transformar)
entrada_inferior -> el límite inferior del intervalo actual
entrada_superior -> el límite superior del intervalo actual
salida_inferior -> es el límite inferior del rango resultante del cambio
salida_superior -> es el límite superior del intervalo resultante del cambio

Para que sirve función map en Arduino

Montaje de fotorresistencias Arduino
Montaje de fotorresistencias (LDR) con Arduino

A veces, los valores que obtenemos de la lectura de un pin, como un sensor, pueden estar fuera de un rango determinado, por lo que necesitamos transferirlos a un nuevo rango para poder utilizarlos correctamente. Tenga en cuenta que la función map() del IDE de Arduino puede invertir el rango, es decir, el «límite inferior» puede ser mayor que el «límite superior». Ejemplo de programa con fotorresistencia Arduino (LDR) y el LED:

int value;
 
void setup() {
   Serial.begin(9600);
   pinMode(A1, INPUT);
   pinMode(9, OUTPUT);
}
 
void loop() {
   value = analogRead(A1);
   Serial.println(value);

/* El LED se iluminará más si el entorno es más oscuro, es decir, "analogWrite()" es inversamente proporcional a "valuecds". Tenemos que invertir "valor" para que su valor cambie de 0/1023 a 255/0 */

   value = map(value, 0, 1023, 255, 0);
   analogWrite(9, value);

}

Función map float Arduino, números fraccionarios

En el siguiente ejemplo convertiremos los datos de la fotorresistencia (valores de 0 a 1023) en voltios (valores de 0 a 5) y los mostraremos en el monitor del puerto. Para hacer los valores con números fraccionarios, debes usar la función float mapf en el sketch para medir el voltaje en la entrada analógica con mayor precisión. Sin cambiar el circuito del primer ejemplo, carga el siguiente programa en el microcontrolador Arduino.

int val, led;

void setup() {
  Serial.begin(9600);
  pinMode(A1, INPUT);
  pinMode(9, OUTPUT);
}

void loop() {
  val = analogRead(A1);
  float data = mapf(val, 0, 1023, 0, 5);

  Serial.print(data);
  Serial.println(" V");

  led = map(val, 0, 1023, 255, 0);
  analogWrite(9, led);
  delay(100);
}

float mapf(float value, float fromLow, float fromHigh, float toLow, float toHigh) {
  float result;
  result = (value - fromLow) * (toHigh - toLow) / (fromHigh - fromLow) + toLow;
  return result;
}



Conclusión. Al convertir con map(), la parte fraccionaria del número no se redondea, sino que simplemente se descarta (no se tiene en cuenta). Este hecho debe ser tenido en cuenta cuando se trabaja con el tipo de datos float en el lenguaje de programación Arduino. Tenga en cuenta que function map utiliza una división por 2, que es una operación muy cara para los microcontroladores. Por lo tanto, la función es muy lenta y no debe interrumpirse.


2 Replies to “Como funciona la función map() Arduino IDE”

    1. La lógica del programa no está clara, ¿qué se supone que debe hacer?
      ¿Y qué significan estas dos líneas? (He borrado el resto del código para no saturar la página)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *