# ¿Rotary encoder, Potenciómetro o Selector Rotativo?

**URL:** <https://forum.arduino.cc/t/rotary-encoder-potenciometro-o-selector-rotativo/1447144>\
**Category:** Hardware\
**Created:** [June 4, 2026, 6:44pm UTC](https://forum.arduino.cc/t/rotary-encoder-potenciometro-o-selector-rotativo/1447144 "2026-06-04T18:44:07Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![borrer0](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/borrer0/32/1273798_2.png) [@borrer0](https://forum.arduino.cc/u/borrer0)\
**Post date:** [June 4, 2026, 6:44pm UTC](https://forum.arduino.cc/t/rotary-encoder-potenciometro-o-selector-rotativo/1447144/1 "2026-06-04T18:44:07Z")

</div>

Hola.  
He decidido animarme con el arduino y crear mi propia botonera para el Simracing ; Tengo claro qué Placa usaré (Leonardo), cuantos botones y de qué tipo, salvo uno o dos botones dedicados a unos determinados imputs en particular de los que no tengo claro qué tipo de interruptor sería el adecuado ni si es o no factible.  
Para concretar, por ejemplo para el juego EuroTruck Sim 2 puedes controlar el Freno Retarder, ajustandolo a niveles 0 , 1 , 2 y 3 (por ejemp. , varia en cada camion) mapeando dos pulsaciones, una para subir nivel y otra para bajar .  
El tema es que quiero usar en este caso un selector rotativo de 12 posiciones por ejemp. y tengo entendido que cada posicion del selector corresponde a un pin distinto, es decir , seria como 12 botones o pulsaciones diferentes, no?  
Se que lo normal seria usar un rotary para estos casos pero yo lo que quiero es ese "clack-clack" de los selectores de pocas posiciones (no como un rotary de 360º)  
Puede servir un selector para esto? .. o existe alguna otra opcion para conseguir algo parecido?

---

<div class="post-metadata">

**Author:** ![MaximoEsfuerzo](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/maximoesfuerzo/32/923798_2.png) [@MaximoEsfuerzo](https://forum.arduino.cc/u/MaximoEsfuerzo)\
**Post date:** [June 5, 2026, 3:34am UTC](https://forum.arduino.cc/t/rotary-encoder-potenciometro-o-selector-rotativo/1447144/2 "2026-06-05T03:34:57Z")

</div>

Podrías usar un expansor tipo PCF8575, que por medio del bus I2C (que usa solo 2 pines), te permite manejar hasta 16 entradas/salidas.

Sería perfecto para conectar tu rotativo de 12 posiciones.

Para que te hagas idea de cómo trabaja:

> **[Cómo controlar hasta 16 GPIO por I2C con extensor PCF8575 y Arduino](https://www.luisllamas.es/como-controlar-hasta-16-gpio-por-i2c-con-extensor-pcf8575-y-arduino/)**

---

<div class="post-metadata">

**Author:** ![victorjam](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/victorjam/32/218315_2.png) [@victorjam](https://forum.arduino.cc/u/victorjam)\
**Post date:** [June 5, 2026, 5:24am UTC](https://forum.arduino.cc/t/rotary-encoder-potenciometro-o-selector-rotativo/1447144/3 "2026-06-05T05:24:57Z")

</div>

Si el selector no tiene cosa raras y es simple, es decir, tiene un común y 12 salidas; creo que lo más fácil es hacer un división de tensión y medir con un solo pin analógico. Hay dos opciones.

La primera es colocar una resistencia en pin común y en cada pin una resistencia conectada ya sea a positivo o a masa según se coloque la resistencia de pin común. Cada resistencia de pin de salida tiene que tener un valor diferente. Es mas feo y mas complicado.

La segunda es poner resistencias en serie y colocar cada salida del selector entre una unión de resistencias. Una imagen vale mas que mil palabras:

 ![selector](https://europe1.discourse-cdn.com/arduino/original/4X/a/1/3/a13f03d2bf9dfcf41246692a5c56f36efbea4356.jpeg)

Todas iguales, con la ventaja de que si no vas a usar PCB puedes soldar cada resistencia directamente a cada pin. Y más fácil de calcular ya que lo que has hecho es dividir la tensión en partes iguales y a cada posición le corresponde un valor.

---

<div class="post-metadata">

**Author:** ![borrer0](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/borrer0/32/1273798_2.png) [@borrer0](https://forum.arduino.cc/u/borrer0)\
**Post date:** [June 5, 2026, 4:32pm UTC](https://forum.arduino.cc/t/rotary-encoder-potenciometro-o-selector-rotativo/1447144/4 "2026-06-05T16:32:24Z")

</div>

Gracias a los dos por las respuestas.

En cuanto a la segunda opcion que mencionas, eso haría que cada giro que haga en el selector hacia la derecha se lea como una pulsacion "A" y cada giro hacia la izquierda como otra pulsacion "B" ?  
Porque éso es lo que me interesa dado que el juego solo deja subir o bajar de nivel.

---

<div class="post-metadata">

**Author:** ![MaximoEsfuerzo](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/maximoesfuerzo/32/923798_2.png) [@MaximoEsfuerzo](https://forum.arduino.cc/u/MaximoEsfuerzo)\
**Post date:** [June 5, 2026, 7:01pm UTC](https://forum.arduino.cc/t/rotary-encoder-potenciometro-o-selector-rotativo/1447144/5 "2026-06-05T19:01:51Z")

</div>

Sea por un método u otro, la pulsación la tienes que simular.  
Si el valor leído es mayor al anterior se simula la pulsación del botón "arriba", si es menor se simula la pulsación del botón "abajo".

No conozco cómo trabaja el control que quieres desarrollar así que no puedo ser más específico.

---

<div class="post-metadata">

**Author:** ![borrer0](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/borrer0/32/1273798_2.png) [@borrer0](https://forum.arduino.cc/u/borrer0)\
**Post date:** [June 5, 2026, 7:23pm UTC](https://forum.arduino.cc/t/rotary-encoder-potenciometro-o-selector-rotativo/1447144/6 "2026-06-05T19:23:46Z")

</div>

OK!! .. con esa respuesta me vale , emular las pulsaciones entonces sería la solución para lo que quiero hacer.. gracias.

Trataré de informarme sobre ésto aver si no es mucho embrollo y me veo capaz. Va a ser mi incursión en esto del arduino asi que ..

Una vez más gracias por la ayuda.

---

<div class="post-metadata">

**Author:** ![victorjam](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/victorjam/32/218315_2.png) [@victorjam](https://forum.arduino.cc/u/victorjam)\
**Post date:** [June 6, 2026, 1:16pm UTC](https://forum.arduino.cc/t/rotary-encoder-potenciometro-o-selector-rotativo/1447144/7 "2026-06-06T13:16:59Z")

</div>

Te dejo un posible uso:

```arduino
// Lectura de un switch rotatorio.

class SwitchRotary {
  private:
    uint8_t pin;
    uint8_t npos;
    uint8_t currentPos;
    uint32_t debounce;

    // Para las funciones callbak que se ejecutaran cuando se incremente
    // o decremente el switch.
    typedef void (*action)();
    action onIncrement;
    action onDecrement;

    // Comprueba si el valor a está entre b+c y b-c.
    int inRange(int a, int b, int c) {
      return a <= b+c && a >= b-c ;
    }

    // Busca el valor del switch leyendo el adc y comparando con
    // el teórico.
    int searchPos(int value) {
      int i;
      for (i=0; i<npos; i++)
        if ( inRange(value, (1023*i)/(npos+1), 50) ) break;
      return i;
    }

  public:
    // Constructor.
    SwitchRotary(uint8_t _pin, uint8_t _npos) {
      pin = _pin;
      npos = _npos;
    }

    // Lee el ADC y busca la posición en la que está inicialmente el switch.
    void begin() {
      int readed;
      readed = searchPos(analogRead(pin));
      currentPos = readed;
    }    

    // Actualiza el estado, hace un pequeño debounce.
    void update() {
      int readed;
      readed = searchPos(analogRead(pin));
      if ( readed == currentPos ) {
        debounce = 0;
      }
      else
      if ( debounce == 0 ) {
        debounce = millis(); 
      }
      else 
      if ( millis()-debounce>=100UL ) {
        uint8_t x = currentPos;
        currentPos = readed;
        if ( readed < x ) { if ( onDecrement!=NULL ) onDecrement(); }
        if ( readed > x ) { if ( onIncrement!=NULL ) onIncrement(); }
      }
    }

    // Establece las funciones callback
    void setOnIncrement(action fn) { onIncrement = fn; }
    void setOnDecrement(action fn) { onDecrement = fn; }

    // Da la posición actual.
    int read() {
      return currentPos;
    }
        
};

SwitchRotary brake(A0, 6);

void alsubir() { Serial.print("Subio "); Serial.println(brake.read()); }
void albajar() { Serial.print("Bajo "); Serial.println(brake.read()); }
void setup(){
  Serial.begin(9600);
  brake.begin();
  brake.setOnIncrement( albajar );
  brake.setOnDecrement( alsubir );
  Serial.println(brake.read());
}

void loop() {
  brake.update();
}

```

Además de una modificación del circuito para que funciones correctamente:

 ![circuito1](https://europe1.discourse-cdn.com/arduino/original/4X/5/e/5/5e5c28c5ebeeb63c4c8ac7a42178a1b4f7e7bf21.jpeg)

Basta tan solo con modificar las funciones 'alsubir' y 'albajar' para que simular la pulsación. En el ejemplo he usado solo 6 posiciones, hace mucho que interese por el ETS pero por falta de tiempo no realicé ningún proyecto, pero me parece que para simular el retarder solo acepta 5 posiciones (pulsaciones).

---

<div class="post-metadata">

**Author:** ![borrer0](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/borrer0/32/1273798_2.png) [@borrer0](https://forum.arduino.cc/u/borrer0)\
**Post date:** [June 6, 2026, 2:36pm UTC](https://forum.arduino.cc/t/rotary-encoder-potenciometro-o-selector-rotativo/1447144/8 "2026-06-06T14:36:01Z")

</div>

Gracias.  
Lo del retarder en el ETS2 era simplemente un ejemplo , el primero que se me ocurrió. En realidad la idea es usarlo tambien en Assetto o iRacing para otras cosas etc.. pero creo que con 6 posiciones tendré cubiertas mis necesidades.

---

<div class="post-metadata">

**Author:** ![borrer0](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/borrer0/32/1273798_2.png) [@borrer0](https://forum.arduino.cc/u/borrer0)\
**Post date:** [June 7, 2026, 11:13am UTC](https://forum.arduino.cc/t/rotary-encoder-potenciometro-o-selector-rotativo/1447144/9 "2026-06-07T11:13:27Z")

</div>

Haciendo la lista de la compra acabo de dar con esto: [ROTARY ENCODER 12 High Force Detents EC16](https://www.etsy.com/de-en/listing/1540016665/rotary-encoder-12-high-force-detents?ls=s&ga_order=most_relevant&ga_search_type=all&ga_view_type=gallery&ga_search_query=rotary+encoder+ky&ref=sr_gallery-1-1&sr_prefetch=1&pf_from=search&sts=1&local_signal_search=1&content_source=2ab9de3c-e793-43ac-8b9b-1275c49d914d%253ALT1bb1f67dc2382a57086e57a043e227e86f722637&organic_search_click=1&logging_key=2ab9de3c-e793-43ac-8b9b-1275c49d914d%3ALT1bb1f67dc2382a57086e57a043e227e86f722637)

En el pequeño video de demostración se ve su funcionamiento y es tal y como yo busco, y son solo 3 pines ... No sería éste interruptor el ideal que necesito?

---

<div class="post-metadata">

**Author:** ![MaximoEsfuerzo](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/maximoesfuerzo/32/923798_2.png) [@MaximoEsfuerzo](https://forum.arduino.cc/u/MaximoEsfuerzo)\
**Post date:** [June 7, 2026, 11:18am UTC](https://forum.arduino.cc/t/rotary-encoder-potenciometro-o-selector-rotativo/1447144/10 "2026-06-07T11:18:48Z")

</div>

Había entendido que no querías usar un encoder rotativo...

Si, ese parece que, a pesar de ser un encoder, haría el "clack-clack" que te gusta. 😉

Ojo que no deja de ser de 360°.

---

<div class="post-metadata">

**Author:** ![borrer0](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/borrer0/32/1273798_2.png) [@borrer0](https://forum.arduino.cc/u/borrer0)\
**Post date:** [June 7, 2026, 11:24am UTC](https://forum.arduino.cc/t/rotary-encoder-potenciometro-o-selector-rotativo/1447144/11 "2026-06-07T11:24:13Z")

</div>

> [@borrer0](#):
>
> [ROTARY ENCODER 12 High Force Detents EC16](https://www.etsy.com/de-en/listing/1540016665/rotary-encoder-12-high-force-detents?ls=s&ga_order=most_relevant&ga_search_type=all&ga_view_type=gallery&ga_search_query=rotary+encoder+ky&ref=sr_gallery-1-1&sr_prefetch=1&pf_from=search&sts=1&local_signal_search=1&content_source=2ab9de3c-e793-43ac-8b9b-1275c49d914d%253ALT1bb1f67dc2382a57086e57a043e227e86f722637&organic_search_click=1&logging_key=2ab9de3c-e793-43ac-8b9b-1275c49d914d%3ALT1bb1f67dc2382a57086e57a043e227e86f722637)

Porque los rotativos que conocía eran todos tipo 360º con "saltos" suaves , no conocía este tipo.. de hecho al final de mi primer mensaje dije : "Puede servir un selector para esto? .. o existe alguna otra opcion para conseguir algo parecido?" ... 😅

Bueno, me alegro que finalmente exista rotarys así ; esto me facilita la vida enormemente.

---

<div class="post-metadata">

**Author:** ![MaximoEsfuerzo](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/maximoesfuerzo/32/923798_2.png) [@MaximoEsfuerzo](https://forum.arduino.cc/u/MaximoEsfuerzo)\
**Post date:** [June 7, 2026, 11:30am UTC](https://forum.arduino.cc/t/rotary-encoder-potenciometro-o-selector-rotativo/1447144/12 "2026-06-07T11:30:30Z")

</div>

Claro, por eso te digo que yo te mal interpreté y descarté de plano los encoder.

Este te va perfecto y puedes usar cualquiera de los librerías para encoders.

Tené en cuenta que sigue siendo de 360°, vas a tener que ponerle un tope a la perilla si quieres emular al otro tipo de rotativo para limitarle el recorrido.

Saludos!
