ARDUINO: Fade de un LED con Potenciómetro y la función MAP



Ya vimos cómo usar sensores analógicos y manipular actuadores analógicos por medio del PWM con la función analogWrite y un potenciómetro en "Fade de un led con potenciómetro", pero claro esto lo hicimos de la manera más simple, ahora lo haremos con la función map, esta función es muy importante y nos ayudará mucho en los proyectos que queramos desarrollar, aquí una pequeña explicación de la función map.

En palabras simples, la función map hace una conversión de valores entre un rango dado por una variable a valores de otro rango, por ejemplo:

y = map(x, 0, 1023, 0, 255);

En este ejemplo se está empleando la función map, en la cual como primer parámetro recibe la variable de los datos a convertir, después recibe el primer valor mínimo que se tendrá en la variable x, a continuación recibe el valor máximo que se tendrá en la variable x, como cuarto parámetro recibe el valor a convertir del valor mínimo, en este caso queremos que cero permanezca como cero y como quinto parámetro recibe el valor a convertir en valor máximo de la variable x, en este caso queremos que el 1023 sea 255, esos valores se almacenarán en la variable y.

Se pueden convertir a cualquier tipo de valor en cualquier rango entero tanto positivo como negativo.

 
 

Materiales:

  • 1x Arduino

  • 1x LED

  • 1x Resistor de 220Ω

  • 1x Potenciómetro de 10K

  • 1x Protoboard

  • Jumpers

Esquema de montaje

Código

El código es similar al anterior y la explicación también, lo único que se agrega en lugar de variables globales se usan variables internas del tipo entero en el loop, la primera almacena los datos del potenciómetro y la segunda almacenará los datos de la conversión de la función map, como se explicó anteriormente, la función map recibe la variable de la cual tomará los datos a convertir así como el máximo y mínimo de estos valores dados por la variable valor y después los convertirá a valores queremos, en este caso de 0 a 255.

Después simplemente se imprimen los valores y a la función analogWrite también le pasamos estos valores almacenados en la variable mapeo.

#define LED 3
#define POT A0

void setup() {
  Serial.begin(9600);
  pinMode(POT,INPUT);
  pinMode(LED,OUTPUT);
}

void loop() {
  int valor = analogRead(POT);

  int mapeo = map(valor,0,1023,0,255);
  
  Serial.print("Valor POT: ");
  Serial.print(valor);
  Serial.print(" | Valor PWM: ");
  Serial.println(mapeo);
  
  analogWrite(LED,mapeo);
  delay(100);
}