Varios botones con una sola entrada analógica

De forma muy sencilla podemos unir varios pulsadores y unas resistencias para que dependiendo del botón que pulsemos Arduino lea un valor distinto desde uno de sus pines analógicos, y así podamos diferenciar la pulsación de cada botón.

En concreto este circuito de ejemplo usa cuatro pulsadores y 5 resistencias de 1K (son de las que más tenia). Tiene como limitación que solo puede leer un botón a la vez, si pulsamos dos botones a la vez leerá el que oponga menos resistencia de todos ellos. Hay otros circuitos que si permiten leer varios botones al mismo tiempo. También los hay que funcionan con un pin digital mediante la carga de un condensador, dependiendo del tiempo que tarde en descargarse se calcula que botón fue pulsado…

Pero ahora vamos al circuito que nos ocupa (el que esta como imagen de portada). El código de ejemplo para probar el circuito es el siguiente:

Cuando pulsemos uno de los botones obtendremos un valor que no siempre sera fijo si no que variara levemente, para solventar este problema simplemente ampliaremos un poco el margen, de forma que si obtenemos una lectura entre 500 y 520, cuando lo normal es 510, sabremos que hemos pulsado el botón 1, así con todos los botones.

19 thoughts on “Varios botones con una sola entrada analógica

  1. Hola buenos dias. tengo algunas dudas… quizas este muy descontextualizado…pero…para determinar los valores que corresponde a cada uno de los botones, lo hiciste aplicando divisor de tension?… y mas concretamente te digo mi necesidad… quisiera leer 6 botones por un solo pin analogico… osea simplemente extender a 2 botones mas lo que tu has hecho… espero no sea tarde para andar transmitiendo dudas… desde ya muchas… ah, he utilizado, alterado y adaptado a mis pruebas este ejemplo… la modificacion que hice fue convertir en una funcion que directamente me devuelve el boton pulsado, por lo que debo de reconocer y volver a agradecerte todo lo expuesto hasta aqui. saludos y espero que tengas un buen dia.

    1. Hola,

      En realidad simplemente se trata de leer la tensión que llega, sabes que la tensión inicial son 5V, entonces dependiendo de cuantas resistencias actúen el voltaje que llega es mayor o menor. Si pulsas el primer botón solo hay una resistencia entre VCC y el pin analógico, sin embargo si pulsas el ultimo hay 4 resistencias y al estar conectadas en serie disminuye el voltaje…

      Solo tienes que añadir dos botones y dos resistencias mas.

      Saludos.

  2. Hola, existe alguna manera de que se puedan identificar mas de un boton si se puelsan a la vez? Podria ser poniendo condiciones sumando las resistencias? Por ejemplo… Si el Boton 1 tiene una resistencia de 500 y el Boton 2 una de 10000, programamos que el valor resultado de sumar las dos resistencias corresponda a Boton 1 y Boton 2 activados a la vez. No se si se me ha entendido del todo…. Gracias igualmente 🙂

  3. casi parecido en mi protoboard conecte 3 push botton pero mi programacionq desarrolle en arduino creo es incorrecta porque no me sale nada en la pantalla de la pc

  4. la practika q me dejaron a investigar era como conectar mas de un push botton a una entrada digital. intente hacer mi programacion pero no me corre. que debo hacer?

  5. HOLA, tengo que hacer un proyecto ,y he elegido hacer una incubadora para pollitos, la cosa es que lo voy a controlar todo con un atmega328 , tengo hecho todo el circuito impreso, tengo que hacer un menu con 3 pulsadores y hacer la programacion para controlar los sensores volteo de huevos activar ventiladores o resistencia, pero ando muy escaso de programación en arduino , si alguien me puede ayudar sobre todo en como hacer el menu con tres pulsadores , la idea es hacer un menú simple, que ponga menú y elegir incubacion para pollos de gallina ó pollos de perdíz y pulsando en uno de ellos comience la programación, como puedo empezar?

    1. Si te fijas en el código lo que se hace es leer la resistencia del pin analógico, mientras más resistencias en serie mayor resistencia en total… también mientras mayor sea el valor de elles mayor será el total. Si entre botones o resistencia no limitas más de los 5V no tendrás problemas.

  6. Entiendo parcialmente, soy limitado para la electronica. Arduino en su entrada analogica tiene una resolucion de 1024 entonces lo que hacen las resistencias es segun el boton que presiona uno quedar entre determinados valores. Supongamos tengo 2 botones pongo 2 resistencia de 1k, un boton me daria abajo de 512 y otro arriba de 512. En que cambia si uso una resistencia de 330ohm, se comporta igual? me divide en 512 tambien? o cambian los valores?

    1. Cambiarán los valores al ser resistencias distintas, con resistencias de 1K el primer botón al que sólo actua una resistencia puede darte un vale de 200, y el segundo botón que actuan dos resistencias de 1K puede darte el valor de 400… y el tercero de 600, llegará un momento que sobrepasaras el valor máximo y el arduino no lo podrá leer.
      Con tus resistencia saldrá valores menores: 30, 60, 90…

      Todos la valores que te he escrito son de ejemplo, no son reales.

      Lo mejor es que conectes una sola resistencia y imprimas por pantalla el resultado, después añades otra resistencia y obtienes el segundo valor, y añades la tercera residencia y así tantas como necesites.

      Luego cambias el código para que funcione con esos valores, como por interferencias puede variar se debe comparar el valor con uno un poco por debajo y con otro un poco por encima para que no falle nunca.

  7. Hola buenas noches
    he analizado el código que creaste y esta perfecto. En el me estoy basando para realizar un proyecto que medirá el desplazamiento de una celda de carga. Quisiera hacerte una pregunta. como podría hacer para desplazar el cursor que selecciona la opción hacia la derecha y izquierda, es decir horizontalmente y no de arriba hacia abajo como lo tienes. Agradezco si puedes ayudarme.

  8. hola buenas tardes disculpe en mi pantalla lcd quiero que se manese solo con dos botones eso como podria hacerlo?
    y tambien quisiera saber si un arduino puede manejar 3 tipos diferentes de sensores y leer en lcd.

    1. Hola,

      Pues necesitas programar un código que te permita interactuar con la pantalla y sus diferentes opciones/menús con dos botones. Por ejemplo que el botón 1 avance/cambie la opción que aparece en la pantalla y el botón 2 permita entrar a esa opción y aumentar su valor con cada pulsación, para regresar se usa el botón 1 de nuevo.

      Con un Arduino puedes usar tantos sensores como quieras siempre y cuando dispongas de pines libres y de que los sensores no interfieran entre si.

      Por ejemplo los sensores I2C puedes tener tantos como quieras conectados al Arduino compartiendo todos 2 pines… pero cada sensor tiene una dirección de memoria que debe ser distinta al resto de sensores ya que si no “chocan” entre ellos y no se pueden manejar, algunos sensores permiten cambiar esa dirección puenteando unos pads en el modulo del sensor.

      Si el sensor funciona por UART Arduino suele tener un único conector de ese tipo, algunos Arduinos tienen 4, también puedes emular ese conector con otros pines mediante una librería.

      Otros sensores pueden usar cualquier otro pin por lo que solo necesitas tener pines libres, no requieren unos específicos.

      Saludos.

Escriba aquí su comentario