LCD, pulsadores y leds

Buenas tardes,

Tengo un problema con un proyecto que estoy haciendo.

El proyecto consiste en dos pulsadores con dos leds para que nuestros amigos peludos puedan comunicarse con nosotros de forma sencilla, con tan solo pulsar dos botones diferentes podrán decirnos si tienen hambre o quieren salir a pasear.

He contactado a la placa de Arduino UNO una pantalla LCD de 16 x 2 con dos pulsadores, dos leds y un potenciómetro.

El pulsador 1 está vinculado al led azul y el pulsador 2 al led amarillo. Cuando pulsas el pulsador 2 enciende el led amarillo y pinta por pantalla "Tengo hambre" y cuando pulsas el pulsador 1 se enciende el led azul y debería pintar por pantalla "Quiero pasear", pero no lo hace.

Lo que no entiendo es que en Tinkercad colocando todos los elementos de la misma forma que en el proyecto físico si se pinta dicha frase y todo funciona perfectamente, pero al pasarlo al proyecto físico el led azul no pinta por pantalla su frase.

He revisado todos los cables y resistencias y esta todo igual que en Tinkercad, y el código también, no entiendo porque no funciona. A ver si alguien sabe a que puede deberse.

Adjunto el código utilizado y unas imágenes.



//Importo la libreria
#include <LiquidCrystal.h>
//Declaro las variables para la pantalla lcd y los dos ledes
int rs = 12;
int e = 11;
int d4 = 5;
int d5 = 4;
int d6 = 3;
int d7 = 2;
int button_blue = 6;
int button_yellow = 7;

LiquidCrystal lcd(rs, e, d4, d5, d6, d7); //Inicia la libreria confugurando los pines que se utilizaran

void setup(){
	lcd.begin(16,2); //Especifica que la pantalla lcd es de 16x2
    Serial.begin(9600); //Activar el puerto serie del Arduino delay(2000);
    pinMode(button_blue, INPUT); //Pin azul entrada
    pinMode(button_yellow, INPUT); //Pin amarillo entrada
}

void loop(){
	lcd.setCursor(0,0); //Muestra el mensaje en la coordenada 0,0, esquina superior izquierda de la pantalla
    if (digitalRead(button_blue) == LOW) { //Boton azul apagado por defecto
      lcd.print("Quiero pasear");////Pinta el mensaje "Quiero pasear" en el led azul
      delay(2000); //Pinta el mensaje durante 2 segundos
      lcd.clear(); //Borra el mensaje
    }
    else if (digitalRead(button_yellow) == LOW) { //Boton amarillo apagado por defecto
      lcd.print("Tengo hambre"); //Pinta el mensaje "Tengo hambre" en el led amarillo
      delay(2000); //Pinta el mensaje durante 2 segundos
      lcd.clear(); //Borra el mensaje
    }
}

Muchas gracias,
Un saludo,

Comprueba la correcta polaridad del led azul y su pulsador.

Lo he comprobado y esta correcto, por lo que he visto el problema tiene que estar en el cable que va al pin 6 puesto que si lo desconecto si sale la frase.

Sale la frase, se queda fija, el pulsador azul solo enciende el led azul y el pulsador amarillo solo enciende el led amarillo sin cambiar de frase. ¿ Cierto ?.

Sí, el pulsador azul solo enciende el azul y el pulsador amarillo solo enciende el amarillo. Las dos frases se mantienen dos segundos una vez pulsado uno de los dos pulsadores, pasados dos segundo se borra.

Esto es lo que quieres que ocurra y se corresponde a lo codificado.

Lo que te preguntaba:

Es lo que ocurre actualmente cuando desconectas el cable del pin 6. ¿O no?.

No exactamente. Lo que sucede es:

  • Compila el código
  • Pantalla encendida en azul sin mostrar nada
  • Pulso pulsador azul, se enciende el led azul
  • No se muestra nada por pantalla (aquí debería mostrarse por pantalla la frase "Quiero pasear")
  • Pulso el pulsador amarillo, se enciende el led amarillo
  • Muestra por pantalla la frase "Tengo hambre"
  • Dicha frase se mantiene dos segundos y después la pantalla se borra

El problema lo tienes en el color de los led.
Tal como lo tienes montado al presionar el botón en el pin correspondiente del arduino tienes la tensión del led:
En el caso del naranja unos 2V, el arduino lee este valor como LOW y funciona.
En el caso del azul unos 3,6V , el arduino lee este valor como HIGH, no ha existido un cambio al LOW y por lo tanto no funciona.

Has una prueba cambia el led azul por otro naranja, que supongo tienes. Si tengo razón todo funcionara y tendrás que cambiar el color del led, el rojo es un buen candidato.

Era eso!! No había pensado que el color hiciera tanto.. Muchas gracias por tu ayuda.
Para poder utilizar el led azul cómo debería ponerse en el código?

No es un problema de código, es un "problema" de hardware, específicamente de diseño.
Simplemente no puedes usar un LED azul ni blanco de esa forma.

Si el LED azul es indispensable deberías agregar un transistor y un par de resistencias para que se encarguen del manejo del LED.

Otra posibilidad es encender el LED mediante un pin del UNO (según tu esquema te quedan disponibles A0 a A5). Cuando pulsas el botón enciendes el LED, cuando lo liberas lo apagas.

En este momento estas usando el montaje "1", prueba con el montaje numero "2".

1 Like


He hecho la prueba con el esquema dos, creo que lo he interpretado bien pero no me funciona, adjunto imagen, de hecho ahora no funciona ni el azul ni el amarillo.
En el código he puesto en vez de INPUT he puesto INPUT_PULLUP.

¿Dónde debería conectar el transistor y las resistencias para que funcione correctamente?

No puede no funcionarte porque el esquema de @gonpezzi es correcto, yo no tuve en cuenta esa 3er. opción.
Si esta conexíon que es básica no te funciona, con transistores te va a resultar peor. :wink:
Revisa bien las conexiones.

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.