Pessoal, alguem sabe o calculo da função map do arduino?

Estou fazendo um SubVI em LabView e preciso desse calculo, o map gera um valor proporcional ao valor de entrada.

Ex:

porta_analogica = analogRead(A0);

int num = map(porta_analogica, 0, 1023, 0, 255);

 o código acima recebe o valor lido da porta analogica A0, que vai de 0 a 1023 e transforma isso para

 0 a 255.

Obrigado!

Exibições: 5568

Responder esta

Respostas a este tópico

É uma regra de três:

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

A função map aceita qualquer tipo de variavel numerica ou só int?

 

Cara, acho que aceita outros numéricos, mas só testando prá ver.

O long é um inteiro de 32 bits.

Essa função map que eu pus aí em cima realmente recebe inteiros de até 32 bits e devolve um inteiro de 32 bits.  Ela não funciona com float, testei.

 

PS: mas é fácil fazer uma função que funcione com float, claro. Segue abaixo a função com exemplo de uso:

float mapFloat(float x, float in_min, float in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

void setup()
{
  float x=mapFloat(4.5,3.0,5.0,100,200);
  Serial.begin(9600);
  Serial.println(x);
}

void loop()
{
}

Essa função escreve na serial o valor 175, que é o correto.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço