Problema con display 1602 - Caracteres raros

Buenos días, estoy tratando de hacer un cronometro usando una placa Arduino UNO y un display 1602 16x2, conectada a 4 pines en este cado (como se observa en el código).

El problema es que, saque lo que saque por pantalla, si uso las sentencias en el loop la pantalla muestra caracteres al azar que no corresponden, si lo hago en el setup no hay problema (pero claro, no puedo modificarlo durante el programa).

He probado cosas como: limpiar la pantalla en cada loop (lcd.clear()), cambiar delays para reducir la tasa de refresco de la lcd, cambiar de placa, etc; y solo consigo que salga cada más o menos tiempo esos caracteres "raros".

Os dejo un par de videos que se observa mejor lo que comento.

Y uno de los códigos que uso es, por ejemplo:

#include <LiquidCrystal.h>

int RS = 4;
int E = 5;
int D4 = 6;
int D5 = 7;
int D6 = 8;
int D7 = 9;
int V = 3;
int pos = 0;
long ss = 0, s = 0, ms = 0, mss = 0, st = 0;

LiquidCrystal lcd(RS, E, D4, D5, D6, D7);

void setup() {
   analogWrite(V, 50);
   lcd.begin(16, 2);
   lcd.setCursor(0, 0);
   lcd.print("CRONOMETRO:");
}

void loop() {

   lcd.setCursor(0, 1);
   lcd.print(ss);

   lcd.setCursor(1, 1);
   lcd.print(s);

   lcd.setCursor(2, 1);
   lcd.print(".");

   lcd.setCursor(3, 1);
   lcd.print(ms);

   lcd.setCursor(4, 1);
   lcd.print(mss);

   mss = mss + 1;
   if (mss > 9) {
       mss = 0;
       ms = ms + 1;
   };
   if (ms > 9) {
       ms = 0;
       s = s + 1;
   };
   if (s > 9) {
       ss = ss + 1;
       s = 0;
   };

   delay(10);

}

Los videos no pueden verse.

Usa esta variante gracias a sprintf()

void loop() {
  char buffer[20];

  lcd.setCursor(0, 1);
  sprintf(buffer, "%d%d.%d%d", ss, s, ms, mss);
  lcd.print(buffer);


  mss = mss + 1;
  if (mss > 9) {
     mss = 0;
     ms = ms + 1;
  };
  if (ms > 9) {
     ms = 0;
     s = s + 1;
  };
  if (s > 9) {
     ss = ss + 1;
     s = 0;
  };
  delay(10);
}

surbyte:
Los videos no pueden verse.

Solucionado, gracias.

Lo acabo de probar pero no lo soluciona. No es un problema de número de caractéres/decimales que mostrar ni que quede un rastro en el buffer, o eso he deducido tras numerosas pruebas (como la que me has sugerido).

En este post Weird Character on LCD - Displays - Arduino Forum he encontrado una posible solución y es que entre ruido a través de la alimentación (un clásico en electrónica). Voy a probar, como comentan, a poner un condensador y posteo el resultado.

Sigo pendiente de si alguien se le ocurre alguna otra idea.

Ok. Si es el caso entonces tu LCD es sensible a las variaciones de tensión.
Si, coloca un capacitor electrolitica (cuida la polaridad) y con eso deberia solucionarse