bclose

Las entradas digitales de Arduino

Leyendo un pulsador con Arduino

 

Objetivos

.

 
    • Conocer las entradas digitales.
    • Leer el primer pulsador.
    • Presentar los valores booleanos.
    • Un operador: Negación.

 

Material requerido.

 

 Tienda EspañaTienda Mexico
Kit Arduino Uno Kit inicio UNOKit inicio UNO
Kit Arduino MEGAKit Inicio MegaKit Inicio Mega

Entradas digitales

 

Con frecuencia en electrónica necesitamos saber si una luz está encendida o apagada, si alguien ha pulsado un botón o si una puerta ha quedado abierta o está cerrada.

A este tipo de señales todo / nada, SI / NO, TRUE /FALSE, 0/1  se les llama digitales, y podemos manejarlas con los pines de 0 al 13 de Arduino y por eso hablamos de pines digitales.

Muchos de los sensores y actuadores que vemos en el mundo real son digitales:

 
  • Como actuadores digitales, tenemos luces, alarmas, sirenas, desbloqueo de puertas, etc.
  • Como sensores digitales podemos mencionar botones y pulsadores, Finales de carrera, desbordamiento de nivel, sensores de llamas, humo o gases tóxicos.
 

Hemos visto que Arduino pueden usar los pines digitales como salidas todo o nada para encender un LED. De la misma manera podemos leer valores, todo o nada, del mundo exterior.

En esta sesión veremos que los pines digitales de Arduino pueden ser usados tanto de entrada como de salida. Vamos a leer un botón o pulsador externo y vamos a encender o apagar un LED en función de que el botón se pulse o no.

 

Esquema electrónico del circuito.

.

Montaremos un circuito con un diodo LED y resistencia conectado al pin digital 10 de Arduino, tal y como vimos en las sesiones previas y ademas un segundo circuuito con un pulsador S1 conectado al pin 6 con una resitencia como se muestra en el diagrama siguiente.

Circuito con pulsador

 

Obsérvese que mientras no pulsemos S1 el pin 6 de Arduino está conectado a 5V a través de la resistencia R3 forzando una lectura de tensión alta (HIGH). En cambio cuando pulsemos S1 cerraremos el circuito del pin 6 a Ground con lo que leerá tensión baja, LOW. En ambos casos tenemos un valor de tensión definido.

Si no pusiéramos la resistencia R3, al pulsar S1 leeríamos correctamente LOW en el pin 6. Pero al dejar de pulsar S1 el pin 6 estaría en un estado flotante, que es ni HIGH ni LOW  sino indeterminado. Como esto es inaceptable en circuitos digitales forzamos una lectura alta con R3.

 
  • A esta resistencia que fuerza el valor alto en vacio se le conoce como pullup Si la conectáramos a masa para forzar una lectura a Ground se le llamaría pulldown resistor.
  • Esta resistencia es clave para que las lecturas del pulsador sean consistentes. El circuito, simplemente, no funcionará bien si se omite (volveremos sobre esto).
 

Y aquí tenemos el esquema para protoboard del circuito.

Esquema protoboard

 

 
  • En este esquema hemos seguido la práctica habitual de usar cables negros para conectar a masa y cables rojos para conectar a tensión (5V).
  • Obsérvese que el pulsador S1 tiene cuatro pines (el que está sobre la resistencia horizontal). Esto es porque cada entrada del interruptor tiene dos pines conectados. En nuestro circuito simplemente ignoramos los pines secundarios.
 

 

Leyendo los pulsadores

 

Empecemos haciendo un programa que haga que el LED se encienda cuando pulsamos el botón y se apague cuando lo soltamos. Para ello pediremos a Arduino que configure el pin digital 10 (D10) como salida para manejar el LED, y el pin digital 6 (D6) como entrada para leer el botón.

Normalmente en programas sencillos basta con poner el número de pin en las instrucciones. Pero a medida que el programa se complica esto tiende a provocar errores difíciles de detectar.

Por eso es costumbre definir variables con los números de pin que usamos, de forma que podamos modificarlos tocando en un solo lugar (y no teniendo que buscar a lo largo del programa). Vamos a escribir esto un poco más elegantemente:

     int LED = 10 ;
     int boton = 6;
 
     void setup()
          {
               pinMode( LED, OUTPUT) ; // LED como salida
               pinMode( boton  , INPUT) ;            //botón  como entrada
          }
 
  • Atención: C++ diferencia entre mayúsculas y minúsculas y por tanto LED, Led y led no son lo mismo en absoluto. Del mismo modo, pinMode es correcto y en cambio pinmode generará un error de compilador fulminante.
  • He usado la variable boton sin acento porque no es recomendable usarlos ni la ñ en los nombres de variables, porque pueden pasar cosas extrañas.
 

Vimos que para encender el LED bastaba usar digitalWrite( LED, HIGH). Para leer un botón se puede hacer algo similar: digitalRead( botón). Veamos cómo podría ser nuestro loop:

     void loop()
          {
              int valor = digitalRead(boton) ;          // leemos el valor de boton en valor
              digitalWrite( LED, valor) ; 
          }

¿Fácil no? Aunque el LED está encendido hasta que pulsamos el botón y se apaga al pulsar.

¿Cómo podríamos hacer lo contrario, que el LED se encienda al pulsar y se apague si no? Bastaría con escribir en LED lo contrario de lo que leamos en el botón.

Existe un operador que hace eso exactamente el operador negación “ ! “ . Si una valor dado x es HIGH, entonces !x es LOW y viceversa.

 
  • Un operador es un símbolo que relaciona varios valores entre sí, o que modifica el valor de una variable de un modo previsible.
  • Ejemplos de operadores en C++ son los matemáticos como +,-,* , / ; y hay otros como la negación ! o el cambio de signo de una variable : – x. Iremos viendo más.
 

De hecho este tipo de operaciones son tan frecuentes que C++ incorpora un tipo llamado bool o booleano que solo acepta dos valores TRUE (cierto) y FALSE y son completamente equivalentes al 1 / 0, y al HIGH / LOW

Este nuevo programa sería algo así:

     void loop()
          {
              int valor = digitalRead(boton) ;      // leemos el valor de boton en valor
              digitalWrite( LED, !valor) ;          //Escribimos valor en LED 
           }

Hemos definido valor como bool, porque podemos usar el valor de tensión alto como TRUE y el valor bajo como FALSE.

SI el botón no está pulsado el D6 leerá TRUE y por tanto pondrá LED a FALSE. En caso contrario encenderá el LED.

De hecho podríamos escribir una variante curiosa del blinking LED usando el operador negación:

     void loop()
         {
             bool valor = digitalRead (LED) ;
             digitalWrite(  LED, !valor) ;
             delay ( 1000) ;
         }
 
  • Podemos leer la situación actual de un pin (nos devuelve su estado actual), aún cuando lo hayamos definido como salida, En cambio no podemos escribir en un pin definido como entrada.
 

La primera  linea lee la situación del LED y la invierte en la segunda línea, después escribe esto en LED. Y puestos a batir algún record, podemos escribir el blinking led en solo dos líneas:

     void loop()
          {
               digitalWrite(  LED , ! digitalRead( LED)) ;
               delay ( 1000) ;
          }
 
  • Las instrucciones dentro de los paréntesis se ejecutan antes que las que están fuera de ellos. Por eso el digitalRead se ejecuta antes que el digitaWrite..
 

 

Resumen del curso

.

 
 
    • Hemos visto una forma de leer señales digitales en Arduino del mundo exterior además de poder enviarlas:
      • digitalRead( pin)
      • digitalWrite( pin , valor)
    • Hemos conocido un nuevo componente: el pulsador.
    • Conocemos un nuevo tipo en C++, el booleano y un nuevo operador de negación.
 

 

 

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login

(171) Comments

    • Miguel

    hola admin siguiendo este peaso de curso y copiando los codigos, me marca error stray/303 in program en otros que he probado lo mismo pero 302 ..ni idea jaja porque he copiado y pegado

      • Ivan

      Hola Miguel, en vez de copiar y pegar prueba a descargar los programas completos de los enlaces que hay en las sesiones, por si hay algún error en el proceso de copy paste. Prueba y nos comentas. Un saludo.

    • Lisy

    Hola!!!…muy bueno el tutorial….
    recien comienzo en este mundo tan maravilloso del arduino….
    saludos!!…
    Gracias desde Cuba!!…

      • Ivan

      Estupendo, te damos la bienvenida a la comunidad!

    • Jordi

    Hola, he realizado la práctica correctamente y me pregunto la manera de activar el output con el pulsador y que siempre siempre quede activo. Luego, con un 2º pulsador, desactivarlo. No lo he conseguido.
    gracias por este fabuloso tutorial.

      • Admin

      Hola Jordi,
      El problema que comentas es sencillo, pero te recomiendo que avances un poco mas en los tutoriales para que vayas comprendiendo las variables globales y probablemente las funciones ¿Vale?

        • Jordi

        OK Gracias. Quizás me ha podido la impaciencia.
        Saludos

    • Jordi

    Buenas tardes, gracias por este fantástico tutorial. Estoy intentando en esta práctica que con un pulsador se me activen 4 outputs. Creo haberlo conseguido (no muy elegantemente seguro). Me gustaría saber como puedo dejar los outputs activados con un pulso y desactivarlos con un 2ªpulsador o con un 2º pulso del mismo.
    Gracias y saludos

      • Admin

      Hola Jordi, si sigues con los tutos veras que hay ejemplos de eso

  • Hola, me encuentro realizando paso a paso los sketch, pero me quedan algunas dudas referente al ckto, lo que se esta viendo como respuesta es la salida de D6 se ve reflejada en D10?,
    Existe alguna forma de ver lo que está reciviendo cada canal en el software?
    Se debe siempre utilizar la misma de fte de arduino de 5V o puedo utilizar una externa puenteando los comunes?

    Muy buena la pagina, gracias por todo.

      • Admin

      Hola sergio, no se lo que es el ckto, pero puedes usar una fuente externa de 5V para alimentar arduino pinchando directamente en los pines de 5V y GND

    • Victor

    Buenas,
    En primer lugar, felicidades por el tutorial, me está gustando mucho y estoy tratando de completarlo con otras páginas, en lo relativo a la electrónica (que es lo que más me cuesta). Para este ejercicio, tengo una duda, ya que no termino de entender el concepto de pull-up.
    Mirando el diagrama, no entiendo por qué hace falta usar R3 para tener una entrada HIGH en el pin 6.
    Suponiendo que el pulsador esté abierto, si no pusiesemos R3 6 tendría el valor HIGH al estar conectado directamente a VCC, ¿no?
    Por lo que podría verle el sentido, es porque si no usasemos R3, habría un corto cuando se pulsase el pulsador, ya que habría conexión directa entre VCC y GND. ¿Es posible?
    ¿O estoy malinterpretando algo?

    Gracias!

      • Ivan

      Hola Victor, si conectas directamente los 5V al pin 6 no leerá HIGH sino que se queda en un estado que llamamos “entrada flotante” que puede cambiar aleatoriamente entre HIGH y LOW. Por eso necesitas conectarle una resistencia pull up o pull down.Un saludo.

      • Hola Ivan,
        En primer lugar muchas gracias por la respuesta. Sin embargo sigo sin tenerlo claro. Si VCC siempre tiene una salida de 5V, si no usase la resistencia (pull-up o pull-down)… ¿por qué sería un estado flotante? Es decir, ¿donde se perderían los voltios que faltan hasta 5?
        Igual me columpio mucho, pero según la ley de Kirchhoff, en un lazo cerrado el voltaje se mantiene, por lo que el pin debería leer 5V, ¿no?
        Perdón por preguntar de nuevo lo mismo, pero me gusta realmente entender las cosas en lugar de hacer actos de fe (lo cual no quiere decir que dude de tus conocimientos en absoluto), para luego poder seguir trabajando de forma más o menos autónoma.

        Un saludo,
        Víctor

      • Admin

      La razon de R3 es en efecto evitar un corto cuando pulses el interruptor

    • Paco

    Hola y gracias por estos tutoriales. Soy bastante novato y tengo una duda. En la parte del circuito LED en los esquemas aparece la resistencia conectada a ground desde el cátodo negativo del LED. No debiera ir conectada antes del ánodo del led para que hiciera efecto?.
    Gracias de antemano

      • Ivan

      Hola Paco, da igual que la resistencia este antes o depués del LED, siempre debes guiarte por la ley de Ohm V=IxR. Al subir la resistencia baja la intensidad, que es precisamente lo que buscamos para no quemar el LED. Un saludo.

      • Admin

      Hola Paco, en realidad te da igual. Es como un estrechamiento de un tubo en una conduccion de agua poco importa si lo pones antes o despues del grifo mientras este este abierto ¿Vale?

    • Juan Manuel

    Una pequeña aclaración Sr Admin. La salida 5V y otra que esta etiquetada como Vin en el esquema, están unidas hacia la resistencia del botón; cual es la función de Vin?, la verdad es que funciona igual si no se unen, imagino que es algo innecesario. Un saludo y gracias

      • Ivan

      Hola Juan Manuel, en realidad no están unidas, el esquema es un poco ambiguo porque pasa el cable por ahí, pero si te fijas no hay un punto en donde se cruzan, que indicaría que están conectados. Un saludo.

  • ¿si realizo esta programación agregando el “==” (igualación) me funcionaria igual? sin usar el if/else, ¿ funcionaria igual?

    void loop()
    {
      int valor == digitalRead(boton) ;        
    digitalWrite( LED, valor) ;
    }

      • Admin

      Hola Mich,

      No. Segun tu programa estas haciendo una asignacion y por tanto tienes que usar el simbolo =.

      Si usas el operado == de comparacion te levantara un error sintactico fulminante

  • Jaja Perfecto, muchas gracias!! Es que ahí aun no había llegado. Creo que mañana llegaré.

  • He tratado de hacer un programa e instalación similar pero con 4 botones y 4 leds. En el futuro espero que cada botón me sirva para dar las indicaciones de “adelante”, “atrás”, “derecha” e “izquierda” a un vehículo teledirigido; pero de momento me conformo con enceder leds jejeje. Va perfecto, pero me preguntaba si no había una manera más elegante (=breve) de escribir el programa. A mí lo mejor que me sale es esto:

    //PULSADORES
    int led1 = 7;
    int led2 = 6;
    int led3 = 5;
    int led4 = 4;
    int boton1 = 12;
    int boton2 = 11;
    int boton3 = 10;
    int boton4 = 9;

    void setup()
    {
    pinMode (led1,OUTPUT);
    pinMode (led2,OUTPUT);
    pinMode (led3,OUTPUT);
    pinMode (led4,OUTPUT);
    pinMode (boton1,INPUT_PULLUP);
    pinMode (boton2,INPUT_PULLUP);
    pinMode (boton3,INPUT_PULLUP);
    pinMode (boton4,INPUT_PULLUP);
    }

    void loop() {
    int valor1=digitalRead(boton1);
    int valor2=digitalRead(boton2);
    int valor3=digitalRead(boton3);
    int valor4=digitalRead(boton4);
    digitalWrite(led1,!valor1);
    digitalWrite(led2,!valor2);
    digitalWrite(led3,!valor3);
    digitalWrite(led4,!valor4);
    }

    ¿No hay algún modo para resumirlo? Se agradece cualquier idea o sugerencia para mejorarlo.

    PD: He hecho exactamente lo mismo, mutatis mutandis, en el siguiente capítulo; pero pregunto sólo aquí porque realmente me interesa que cuando suelte el botón se apague el led (en su momento será que el vehículo deje de ejecutar la orden)

    Gracias de antemano.

      • Ivan

      Hola Gonzalo, la manera sería trabajar con arrays. Te dejo un enlace a la sesión y si tienes alguna duda me comentas: https://www.prometec.net/programa-varias-funciones/

      Un saludo!

      • Admin

      Hola Gonalo, Enseguida veras siguiendo el curso que algo como esto:
      pinMode (led1,OUTPUT);
      pinMode (led2,OUTPUT);
      pinMode (led3,OUTPUT);
      pinMode (led4,OUTPUT);

      Lo puedes resumir asi:
      for (int i=2; i<6 ; i++)
      pinMode(i, OUTPUT);

  • Gracias a todos por la ayuda, voy a seguir los 12 puntos de primeros pasos y otros recursos que vaya viendo por aqui y por internet. Si tengo alguna duda, ya ire posteando.

    Gracias por todo.

  • Bueno no lo he entendido mucho,
    Es decir, que si no aprieto el interruptor, el pin 6 es como si estuviera conectado directamente a 5v, y si aprieto el interruptor es como si el pin 6 estuviera conectado a gnd (0).
    Puede, en algun caso, poniendo resistencias o lo que sea, que el pin 6 diese algun valor diferente de 5v o 0v?
    Gracias por la paciencia

      • Ivan

      Hola Ferran, el Pin 6 es un pin digital es decir sólo puede leer los valores HIGH y LOW, y aunque puede simular una salida analógica mediante el PWM no puede usarse como entrada analógica. En realidad no corresponden directamente HIGH a una lectura de 5V y LOW a 0V, sino a lecturas entre 5-2,5V y 2,5-0V.

      Por lo demás es como dices, mientras está abierto la entrada digital 6 está conectada a 5V con una resistencia en medio por lo que lee HIGH. En realidad la resistencia consume algo del voltaje, por lo que no le llegan exactamente 5V, pero si suficiente para leer HIGH.

      Cuando se cierra el pulsador conectamos directamente el pin 6 y GND al mismo punto, sin ningún componente entre ellos y ese punto, por lo que tienen que leer el mismo voltaje, que forzosamente tiene que ser 0V para GND.

      Si sigues con el curso ya verás como vas despejando un poco las dudas al ir avanzando, y más al llegar a las entradas analógicas. Un saludote.

  • Gracias Ivan por contestar.
    1. No lo acabo de entender. Con el circuito abierto, si le ponemos una resistencia mayor, se podria darse la ocacion de que el pin 6 este en low?
    2. Sin modificar nada del dibujo, con el circuito abierto el pin gnd es 0, no? pero con el circuito cerrado no tendria que valer 5 ya que le llegan los 5v del pin positivo?
    3. Si cambiamos de posicion el pin 6 a la otra parte del interruptor, cuales serian los valores que tendria en el circuito abierto y cerrado?

    Estoy hecho un lio gordo

      • Jesús Sánchez

      Hola Ferran.

      Es más sencillo de lo que planteas. Coge una resistencia de 1M y pínchala en una protoboard, conéctale 5V y mide con el multímetro. Verás que el voltaje ha variado muy poco, y para Arduino sigue siendo un HIGH.

      Cuando el circuito está abierto, el pin 6 “ve” un HIGH, la resistencia ahí no está actuando. Pero cuando cerramos el circuito, el pin 6 ve GND, y eso es un LOW. Si la resistencia no estuviera, provocarías un cortocircuito en tu placa Arduino, pues estas conectando el positivo a GND sin ninguna carga en medio. Ahí es cuando entra en juego la resistencia, simulando una carga y evitando que se cortocircuite la placa.

      Si observas circuitos con Arduino y transistores MOSFET, verás que cuando el primero controla al segundo mediante un pin digital, se suele añadir una resistencia de pull-down de unos 100K para forzar un valor de 0V en el gate del transistor, y evitar que la salida flotante del microcontrolador active descontroladamente el transistor. Agreando esa resistencia, tanto la salida digital como el gate ven GND, o sea, 0V.

      En el caso expuesto en este tutorial, la resistencia es pull-up, y forzamos a que en el pin digital haya un HIGH, o 5V. Si dejas en un microcontrolador un pin digital sin una conexión a Vcc o a GND, estas dejando una “entrada flotante”, y eso no interesa porque es susceptible de captación de ruido y tanto puede tomar un valor HIGH como LOW descontroladamente. Evidentemente, podríamos conectar directamente el pin 6 a 5V, pero en cuanto pulses el interruptor quemas el Arduino al provocar un corto. La resistencia evita esto.

      Saludos.

  • Hola Juan Carlos,
    Soy muy nuevo con todo esto, y estoy empezando. Aun no tengo ningun arduino
    Mi duda es la siguiente, a ver si entiendo bien el moviento de la luz.
    En el ejemplo, sin apretar el boton el pin 6 esta en High, es decir lee 5v no?
    La corriente sale de la toma de 5v, pasa por la resistencia y se va al pin 6, , (hay una diferencia de potencial por la resistencia), luego lee y dara entre 4.5 y 5V? Es correcto?

    Pero si aprietas el boton, cierras el cirtuito, la corriente sale del 5v, pasa por la resistencia, se val interruptor cerrada hasta el pin gnd, hay diferencia potencial, pero tambien hay una parte de la corriente que se desvia hacia el pin 6 que tiene que estar entre 4.5 a 5v, NO?

    Es un lio esto, alguna ayudita, ya se que esto es muy basico, pero no me deja continuar entendiendo todo.

      • Ivan

      Hola Ferrán, cuando está abierto es como tu dices. Al cerrarlo lo que pasa es que conectas el pin 6 y GND directamente al mismo punto eléctrico, de forma que “obligas” al pin 6 a tener el mismo voltaje que GND, que siempre es LOW.

      Piensa que aunque circule corriente por una parte del circuito no significa que haya diferencia de potencial entre un punto y otro, sólo existe esa diferencia si hay algún componente que consuma una parte del voltaje, como puede ser una resistencia (en realidad los cables y el pulsador tienen cierta resistencia, pero al ser muy pequeña la despreciamos).

      En este caso desde el punto que comparten el PIN6 y GND no hay nada, por lo que tienen que tener el mismo voltaje, y al estar conectado a GND tiene que ser obligatoriamente LOW.

      Un saludote!

  • Hola. Muchas gracias por vuestro magnífico trabajo. Acabo de empezar a programar y necesito algunas aclaraciones.
    void loop()
    {
    int valor = digitalRead(boton) ; // leemos el valor de boton en valor
    digitalWrite( LED, valor) ;
    }

    Cuando Arduino lee boton (pin 6) ¿asigna a la variable “valor” un 1 lógico (HIGH) si la tensión en el pin 6 es de 5V y un 0 lógico (LOW) si es 0V?

      • Admin

      Efectivamente Jose Luis,

  • Hola! Muy buenos días. De antemano, enhorabuena por el cursos, esta genial.
    Veras, tengo un problema a la hora de realizar la segundo parte del ejercicio, la parte en la cual introducimos el símbolo de exclamación delante de la variable “Valor”. Se supone que al hacer esto, el pulsador debería encender el LED, pero en mi caso lo único que ocurre es que este solo hace que aumente la intensidad del luz del LED. Ya que el LED al empezar el programa no esta apagado. He probado con introducir el comando digitalWrite(LED, LOW) en la parte de Setup pero no a valido.

      • Ivan

      Hola Thomás, tiene pinta de que es alguna conexión que no está correcta. Te has fijado si en la primera parte al pulsarlo en vez de apagarse del todo también se queda un poco encendido?

      • Admin

      Hola Thomas, tienes algo raro en el programa o montaje porque el operador negacion (!) lo unico que hace es invertir el valor de true a false o si prefieres de 0 a 1 1 y viceversa, pero no hace nada que modifique la intensidad del brillo ¿Vale?

  • Hola, yo lo que no entiendo es:
    int valor =… cuando declaras una variable no se hace al principio, no seria: boton=digitalRead(6) ?
    digitalWrite (LED, valor) . A mi me han enseñado que en el lugar de ” valor” debe ir el pin.

    Seguro que lo que pones también está bien, pero me gustaría saber el porqué.

      • Admin

      Hola Brendaj,
      Estas dos maneras de escribir son completamente equivalentesequivalentes:
      digitalRead(3) :
      —————————–
      int pin= 3;
      boton = digitalRead(pin);

      Aunque la primera es mas corta, se suele preferir la segunda porque el nombre de la variable nos da una idea de lo que queremos hacer (Si se elije con un poco de cuidado) y cuando los programas van creciendo la cosa puede no ser tan obvia y causar errores

  • Buenas, he intentado hacer con un pulsador y dos leds que cuando pulso uno se enciende y otro se apague. No me sale, me podrían ayudar? GRACIAS!

      • Ivan

      Hola Roger, en principio sería muy sencillo. Simplemente en el setup incializa un LED encendido y el otro apagado y que cambien de estado cada vez se pulsa el pulsador como hacemos en la sesión. Si tienes algún problema coméntanos y lo miramos más en detalle.

      Un ssaludote.

    • Jose12

    Buen día, Sus tutoriales son perfectos y de gran ayuda. Este tengo una duda, el led prende pero su intensidad es muy poco, a que se puede deber. Todas las conexiones fueron como en el tutorial y lo mismo el código. Saludos cordiales.

      • Admin

      Tiene toda la pinta que has usado resistencias un valor mas elevado del que marcamos

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login