Ir ao conteúdo
  • Cadastre-se

C++ Converter o que um sensor de distancia le


vicenteaf
Ir à solução Resolvido por V!OLADOR,

Posts recomendados

Olá senhores(as)!

Gostaria de ajuda para mudar a forma que um sensor de distancia me passa as informações em C++,

No momento ele me passa em uma variável chamada (distancia), o que ele lê em centímetro (CM).

Mas quero criar uma nova variável que me informe que: aos 10CM esta em 100% e aos 30CM esta em 0%

Como faço esta 'conversão'?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Talvez simplesmente normalizar a escala, ou seja [30, 10] --> [0, 1], com uma formulinha do tipo:

 

float d = fabs((-30.0f + distancia)/20.0f);

 

Opcionalmente você poderia multiplicar d por 100 também. A função fabs() retorna o valor absoluto da expressão e você precisa da biblioteca math.h pra usá-la.

  • Curtir 3
Link para o comentário
Compartilhar em outros sites

@V!OLADOR Agradeço imensamente a sua resposta, mas não deu certo, ou eu quem não soube fazer funcionar. mas dessa forma que me falou só mudou a forma que ele me mostra, e preciso que ele também inverta os valores.

 

EX:  quando o sensor me mostrar 10cm = 100%  e  200cm = 0%

de forma variável, de acordo com o que o sensor mostrar. 

 

ou pra melhor entendimento: preciso que (0) passe a se tornar 100, (1) se torne 99, (2) se torne 98 e assim por diante... 

 

 

                                                               

 

 

Link para o comentário
Compartilhar em outros sites

🤔 Hm, confuso. Me pergunto se você tá formulando o problema corretamente. Por exemplo, essa parte:

 

20 horas atrás, vicenteaf disse:

10cm = 100%


contradiz essa aqui

 

20 horas atrás, vicenteaf disse:

(0) passe a se tornar 100


Eu tô a ler esse último trecho como "0 cm a se tornar 100%", é isso mesmo? se sim, qual o limite da escala? ou seja, 100% corresponde a 0 cm ou 10 cm? O fato é que uma escala precisa ter os limites estabelecidos e daí em diante são constantes. Em principio, não faz muito sentido que 100% (e 0%) represente metragens diferentes.

Talvez eu possa ajudar se você explicar melhor. Caso não consiga com palavras, talvez uma tabela com alguns valores do sensor, com as unidades, além das respectivas porcentagens que você gostaria, e os limites, ou seja, a quantos centímetros equivale 0% e 100%.

Link para o comentário
Compartilhar em outros sites

@V!OLADOR Certo, vou lhe passar novamente o que preciso, de uma forma mais clara, porque talvez eu esteja explicando realmente de forma confusa. Sou novo em programação a determinado objeto, tenho só 22 anos e conheço só a programação web e estou me metendo a fazer esse programa em um arruíno.

 

E o que ocorre é que sensor de distancia ultrassônico imprime pra mim na unidade de medida cm, e preciso que =ou< 30cm não mostre e =ou> 30cm passe a me mostrar 100% e a medida que o objeto vá se afastando do sensor vá diminuindo a porcentagem até os 220cm, ou seja nos 220cm ele me informe que esteja a 0%.

 

Bem confuso, porque preciso limitar entre 30cm e 220cm e transformar de cm para %, e também que seja de forma decrescente, diminuindo a % a medida em que aumentam os cm.

Se puder me passar seu wpp ou discord pra que possamos ser amigos e para que eu possa retribuir um dia esse favor, deixe também na resposta. 

você foi o único que comentou com o intuito de ajudar nos fóruns que postei essa duvida. 

Novamente agradeço imensamente seu empenho em me ajudar nisso!

 

Link para o comentário
Compartilhar em outros sites

  • Solução

Aaaah, muito mais claro agora. Parece simples. Assim como na minha primeira resposta, vamos usar float pra representar números reais com baixa precisão (mais ou menos entre 4 e 6 dígitos). Caso o sensor forneça números mais precisos (mais de 8 dígitos) e você precise dessa precisão na porcentagem, utilize double.

Bom, vou utilizar d pra representar a distância recebida do sensor e definir duas constantes, d_min e d_max, com os respectivos mínimos e máximos da escala, seguindo a descrição que você deu acima:

 

float d = 0.0f;
const float d_max = 30.0f;
const float d_min = 220.0f;

 

Em seguida, você disse que não tem interesse em distâncias menores do que 30 cm. Então, você poderia descartar todos os valores de d menores que d_max, por exemplo:

 

if (d < d_max) d = d_max;

 

A linha acima vai garantir d = 30 sempre que o sensor fizer uma medida abaixo disso. Você pode então, opcionalmente, decidir mostrar essa informação ou não.

 

Quando o valor de d for maior que 30, e menor que 220, você aplica aquela fórmula pra converter o sinal do sensor pra uma escala entre 0 e 1 (100%):

 

d = (-d_min + d)/190.0f;

 

Agora d está normalizado em [-1, 0] porque, no teu problema esquisito, a escala tá invertida. Basta então pegar o valor absoluto de d:
 

d = fabs(d);

  

Ou, mais facilmente, apenas multiplicando d por -1 🤭:

 

d = -d;

 

Agora o resultado tá normalizado em [0, 1]. Você pode multiplicá-lo por 100.0f pra ficar com mais cara de porcentagem.

Veja se consegue resolver o problema com esses passos. Qualquer enrosco e só perguntar.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!