problema lectura potenciometro

Hola tengo el siguiente problema:
estoy leyendo los valores de varios potenciómetros (de no muy buena calidad), y aunque mapeo y saco la media de las lecturas no consigo tener los vlaores en los extremos que quiero.
El caso es que quiero que el recorrido de los potenciómetros me de valores entre 0 y 127, aquí os pongo el código por si veis si puedo mejorar algo,
por que casi nunca obtengo 0, y nunca obtengo 127.

//---------------------------------------
//leer un puerto devuelve un byte
//--------------------------------------
byte leepot(byte port){
  const byte n_lecturas=3;  
  int entrada;
  byte entrada_escalada;
  for (int i=0;i<n_lecturas;i++){
   entrada=entrada+analogRead(port);
  }
 
 entrada=entrada/n_lecturas;//hago la media
 entrada_escalada=map(entrada,0,1023,0,127);
    }
 return entrada_escalada; 
}

//------------

Hola, no lo he probado, pero se me ocurre que lo que puedes hacer es esto.

Primero, olvídate del mapeo y saca por Serial.println el valor que recibes desde los potenciómetros.
(Pon un delay en medio)

Entonces verás si realmente esos potenciómetros están cubriendo todo el rango de 0 a 1023 (Casi seguro que no, por lo que describes)

Entonces, supongamos que obtienes 10 como mínimo y 950 como máximo.

Entonces luego haces el mapeo, pero así

entrada_escalada=map(entrada,10,950,0,127);

Creo que debería funcionar, y creo que si el valor de entrada estuviera por fuera de los márgenes, osea, menos de 10, o más de 950, esta función los tomará como máximo y mínimo. De no ser así, puedes tu hacerlos pasar por un condicional antes, en dónde si el valor de entrada es menor de 10, entonces lo haces 10, y si el mayor de 950, entonces lo haces 950, luego si el mapeo.

Espero que te sirva la solución :slight_smile:

American2020:
Hola, no lo he probado, pero se me ocurre que lo que puedes hacer es esto.

Primero, olvídate del mapeo y saca por Serial.println el valor que recibes desde los potenciómetros.
(Pon un delay en medio)

Entonces verás si realmente esos potenciómetros están cubriendo todo el rango de 0 a 1023 (Casi seguro que no, por lo que describes)

Entonces, supongamos que obtienes 10 como mínimo y 950 como máximo.

Entonces luego haces el mapeo, pero así

entrada_escalada=map(entrada,10,950,0,127);

Creo que debería funcionar, y creo que si el valor de entrada estuviera por fuera de los márgenes, osea, menos de 10, o más de 950, esta función los tomará como máximo y mínimo. De no ser así, puedes tu hacerlos pasar por un condicional antes, en dónde si el valor de entrada es menor de 10, entonces lo haces 10, y si el mayor de 950, entonces lo haces 950, luego si el mapeo.

Espero que te sirva la solución :slight_smile:

gracias por contestar
efectivamente, no recibo todo el mapeo y lo achaco a las mala calidad de los potes,
el problema es que tengo 4 potenciómetros, tendría que mapearlos de forma diferente para cada uno, y se me dedico a hacer varias placas con varios potes pues el problema se multiplica.
una solución es comprar mejores potenciómetros.
Otra voy a intentar sobre la marcha en lo que me pones del condional, hago el código y ya os cuento.

Si, el tema de no recibir todo el rango de valores, no se a que se debe. No conozco tanto sobre los potenciómetros como para decirte.

Más raro aún si los 4 que tienes, todos tiran lecturas variadas.

Comprueba con un polimetro si la resistencia te varia desde 0 ohm hasta el la resistencia total del pote (10 ohm por ejemplo)

Esto te dira si el pote punciona bien y te dara una pista de si esta bien conectado.

Tambien estaria bien un esquema de conexión

masteron:
Comprueba con un polimetro si la resistencia te varia desde 0 ohm hasta el la resistencia total del pote (10 ohm por ejemplo)

Esto te dira si el pote punciona bien y te dara una pista de si esta bien conectado.

Tambien estaria bien un esquema de conexión

.
con el polímetro no me das ninguno exactamente lo mismo, y no llegan a 10k, se quedan sobre 9.94-9.98k más o menos, ahí difiere cada uno.
En cuanto el esquema de conexión pues no tiene mucha chicha un multiplexor y a correr,...lo único quizás debería haber puesto un condensador en la alimentación del mutiplexor.

Que te llegue a 9.94k me parece algo lógico, no creo que sea el problema de los potenciometros. Ademas si dices que la resistencia si te llega a cero, el valor de la lectura si que debe de llegar a 1023.

El problema puede ser del multiplexor como comentas