Mi lcd se apaga a cada rato

Hola, soy nuevo por aquí, me anime a escribir porque tengo un problema, estoy utilizando un Arduino Uno para mostrar en un lcd con modulo i2c, lo que se teclea en un keypad de matriz 4x4, el código funciona pero después se empieza a reiniciar el lcd, la verdad se muy poco de Arduino, entonces no se me ocurre que podría estar generando este problema. Sospecho que es un error del codigo, aqui les adjunto mi codigo:

#include <Keypad.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>


// Dirección I2C de la pantalla LCD (comúnmente 0x27 o 0x3F, dependiendo del módulo)
LiquidCrystal_I2C lcd(0x27,16,2); // LCD de 6x2, con dirección I2C 0x27

// Configuración del teclado 4x4
const byte numRows = 4;
const byte numCols = 4;
char keymap[numRows][numCols] =
 {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};

byte rowPins[numRows] = {9, 8, 7, 6}; // Pines de las filas del teclado
byte colPins[numCols] = {5, 4, 3, 2}; // Pines de las columnas del teclado

Keypad myKeypad = Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);

void setup() 
{
  Serial.begin(9600);

    lcd.init(); // Inicializa la LCD
    lcd.backlight(); // Enciende la luz de fondo de la LCD
    lcd.print("Ready"); // Mensaje inicial
    delay(50); // Pausa para leer el mensaje inicial
    lcd.clear();
}

void loop() 
{
  delay(10);
  lcd.setCursor(2,0);
  lcd.print("Key: ");
  delay(50);

char keypressed = myKeypad.getKey();
if (keypressed)
{
Serial.print(keypressed);

  lcd.setCursor(7,1);
  lcd.print(keypressed);
  delay(50);

}
}

Tambien les dejo por aqui una imagen del montaje:

He trasladado su tema de una categoría de idioma inglés del foro a la categoría International > Español @sr_tav .

En adelante por favor usar la categoría apropiada a la lengua en que queráis publicar. Esto es importante para el uso responsable del foro, y esta explicado aquí la guía "How to get the best out of this forum".
Este guía contiene mucha información útil. Por favor leer.

De antemano, muchas gracias por cooperar.

1 Like

Ante todo, aunque le erraste publicando en el foro en Inglés, felicitaciones por ser tu primer post y adjuntar correctamente el código y acompañar con fotos. :clap: :clap: :clap:

Yendo a tu problema, el código parece correcto, yo me inclinaría por un falso contacto.
Revisa las soldaduras del display (R/W y D4 no se ven convincentes aunque puede ser la foto que engañe), cambia de lugar ambas cosas en la protoboard por si el falso contacto está ahí y cambia los cables, las fichas hembra de los cables tipo Dupont suelen ser bastante endebles y se aflojan.
No hagas todo al mismo tiempo así aíslas al culpable. :wink:

Comenta los resultados así vemos si hay que revisar algo más.

Hola!, muchísimas gracias por responderme, aquí te adjunto una foto más cerca de la soldadura y comento un poco más sobre el problema, es que sucede cuando tengo conectado los puertos scl y SDA del módulo i2c, cuando desconecto alguno la pantalla se mantiene encendida pero pues no muestra nada por obvias razones, ya hice lo que me aconsejaste, cambie los cables, pero siguió igual y después moví todo en la protoboard y también siguió igual. No comenté porque sospechaba que el error era del código, y es que si elimino todo del void loop, el lcd no se apaga.
Esta es una imagen reciente, no me había pasado antes, pero ahora me salen estos caracteres raros


Y esta es una vista más de cerca de la soldadura del lcd

Comprate una placa experimental y suela el LCD al adaptador I2C. Deja los protoboards para otras cosas (no se cuales, siempre dan problemas).

Tienes un mal contacto.
Deberías con un tester en continudad y con mucha sutileza para no generar presión y medir las cosas tal como estan y no cambiarlas por la presion al medir, verificar pin por pin.

Hola sr_tav
Por probar; conecta los cables de SDA y SCL en los pines que a tal fin tiene la placa Arduino (al lado del pulsador de reset) en vez de tal como los tienes, en A4 Y A5.
Nunca se sabe !!!!

En el UNO simplemente están en paralelo, da lo mismo usar esos 2 pines o usar A4/A5.

La función de los pines la define el micro (en este caso el ATmega328) no lo que Arduino eligió hacer en su afán de hacer las cosas más "simples" (?) para los novatos.
Y uso comillas porque en este caso se presta a confusión, da la idea que usando los pines SDA y SCL quedan disponibles los pines A4 y A5, lo cual no es cierto porque son los mismos pines duplicados.

Hola nuevamente!, encontré la solución, al ver que todo parecía estar correcto respecto a código y conexiones, decidí cambiar de Arduino y ahí estaba el error, por alguna razón el Arduino que usaba tiene algún defecto con el lcd.

También me gustaría añadir una solución respecto al intentar conectar un LCD con módulo i2c al Arduino Leonardo, que por alguna razón al usar los pines analógicos, no funcionan, pero si se usan los pines scl y SDA si funciona

Por la misma razón que no funcionaría en un UNO R4 o un ESP32 o...
Porque son placas distintas, con distintos microcontroladores y diferentes pinout's.

Más o menos por la misma razón que una llave sirve en una cerradura y no en otra. :wink:

Es un grave error asumir que todas las placas Arduino son iguales.

1 Like

Hola @sr_tav

Mira la distribución del LEONARDO:

https://www.electroschematics.com/arduino-leonardo-pinout/

Veras que los pines SDA y SCL están mas arriba del 13.

:cocktail: :cocktail:....... UN SALUDO !!!

Hola @sr_tav

Supongo que te refieres a los pines analógicos A4 y A5 del UNO.
En el LEONARDO hay los marcados expresamente como SCL y SDA y además
los digitales 2 y 3.

Un saludo!! ...:cocktail:... :cocktail:

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