Remapeia um número de um intervalo para outro. Isto é, um valor de deMenor seria mapeado para paraMenor, um valor de deMaior para paraMaior, valores dentro de uma faixa para valores dentro da outra faixa, etc.
Não restringe valores a ficar dentro do intervalo, porque valores fora do intervalo são as vezes úteis e pretendidos. A função constrain() pode ser usada tanto antes como depois dessa função, se limites para os intervalos são desejados.
Note que os "limites mínimos" de cada intervalo podem ser maiores ou menores que os "limites máximos" tal que a função map() pode ser usada para reverter um intervalo de números, por exemplo
y = map(x, 1, 50, 50, 1);
A função também funciona bem com números negativos, tal que esse exemplo
y = map(x, 1, 50, 50, -100);
também é valido e funciona bem.
A função map() usa números inteiros e não irá gerar números fracionários, quando a matemática indicar que deveria. Resíduos fracionários são truncados e não são arredondados.
deMenor: o menor limite do intervalo atual do valor
deMaior: o maior limite do intervalo atual do valor
paraMenor: o menor limite do intervalo alvo
paraMaior: o maior limite do intervalo alvo
Retorna
O valor mapeado para o novo intervalo.
Código de Exemplo
/* Mapeia um valor analógico para 8 bits (0 a 255) */
void setup() {}
void loop() {
int val = analogRead(0);
val = map(val, 0, 1023, 0, 255);
analogWrite(9, val);
}
Apêndice
Para os matematicamnete interessados, aqui tem-se o código da função:
long map(long x, long in_min, long in_max, long out_min, long out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
Notes & Warnings
Como mencionado anteriormente, a função map() usa matemática inteira. Então frações podem ser suprimidas devido a isso. Por exemplo, frações como 3/2, 4/3, 5/4 irão ser retornadas como 1 pela função map(), apesar de os valores esperados serem diferentes. Então, se seu projeto requer cálculos precisos (ex. tensão elétrica com precisão de três decimais), por gentileza considere evitar a função map() e implementar os cálculos manualmente no seu código.
Ver Também
Title
Arduino Newsletter
We care about the privacy and personal data of our users.
To continue, please give us your consent:
Please confirm that you have read the privacy policy
Thank you for subscribing!
Curious to learn more?
Are you also a teacher, student, or professional that loves using Arduino in your day-to-day activities?
Then keep up-to-date with either our STEM or Professional monthly newsletters.
Arduino weekly newsletter (already subscribed)
Educators can benefit from the ever growing tech that shapes our environment through fun cool projects.
Why not awe your boss with highly innovative ways to help keep your enterprise connected at no extra cost?
Arduino Survey
We'd like to get to know you little better.
Please help us improve by answering this super short optional survey.