error hardware?

bueno os pongo en situacion:
hace tiempo compre una arduino nano y una pantalla 16x2 en aliex…(no se si se puede poner webs y tal)
el caso es que al ser chino tube problemas con drivers y librerias y tal… bueno el caso es que consigo hacerlo funcionar (codigo abajo) es un tirador de dados para juegos de rol… siempre salen numeros y cuanod le doy a un boton los numeros se paran… bueno salvo algunos cargadores de pocos miliamperios el cacharro funciona bastante bien…

el caso es que me han pedido que haga mas… y copiando y compilando igual… usando mismos cargadores y tal no funciona… es decir… cuando empieza el bucle se queda la pantalla parada… como si le faltase potencia electrica, y funciona solo si pongo los dedos sobre los pines del boton (2 y negativo) y sobre los los pines centrales (ICSP).

alguna idea de como solucionarlo? es como si al hacer un poco de puente electrico con los dedos funciona sino no…

thz

CODIGO:

#include <LCD.h>
#include <LiquidCrystal.h>
#include <LiquidCrystal_I2C.h>



#include <Wire.h>



#define I2C_ADDR    0x3F // <<----- Add your address here.  Find it from I2C Scanner
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7

const int BOTON=2;
int val;
long ranNumber4; 
long ranNumber6;
long ranNumber8;
long ranNumber10;
long ranNumber12;
long ranNumber20;
long ranNumber100;
int masmenos;
int masomenos;
int coor;

LiquidCrystal_I2C  lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

void setup()
{
pinMode(BOTON,INPUT);
lcd.begin (16,2); //  <<----- My LCD was 16x2
// Switch on the backlight
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.home (); // go home
randomSeed(analogRead(0));

lcd.setCursor (0,1);
lcd.print("    ->...<-"); 
delay(500);
 lcd.setCursor (0,1);
lcd.print("   ->.....<-"); 
delay(500);
 lcd.setCursor (0,1);
lcd.print("  ->.......<-"); 
delay(500);
 lcd.setCursor (0,1);
lcd.print(" ->.........<-"); 
delay(500);
lcd.clear ();
delay(200);
}


void loop()
{
     
val=digitalRead(BOTON);
if  (val==LOW){

}
if (val==HIGH) {  
 ranNumber4 = random(1,5);
  ranNumber6 = random(1,7);
  ranNumber8 = random(1,9);
  ranNumber10 = random(0,10);
  ranNumber12 = random(1,13);
  ranNumber20 = random(1,21);
  ranNumber100 = random(0,100);
  masmenos = random (0,2);
  masomenos = random (0,6);
  coor = random (0,9);
lcd.clear ();

   if (masmenos==1){
   lcd.setCursor (0,1);
lcd.print("cara"); 
}
else{
lcd.setCursor (0,1);
lcd.print("cruz");
}

if (masomenos==1){
lcd.setCursor (5,1);
lcd.print("+"); 
}
if (masomenos==0){
lcd.setCursor (5,1);
lcd.print("-"); 
}
if (masomenos==2){
lcd.setCursor (5,1);
lcd.print("0"); 
}
if (masomenos==3){
lcd.setCursor (5,1);
lcd.print("+"); 
}
if (masomenos==4){
lcd.setCursor (5,1);
lcd.print("-"); 
}
if (masomenos==5){
lcd.setCursor (5,1);
lcd.print("0"); 
}


if (coor==0){
lcd.setCursor (8,1);
lcd.print("N"); 
}
if (coor==1){
lcd.setCursor (8,1);
lcd.print("S"); 
}
if (coor==2){
lcd.setCursor (8,1);
lcd.print("E"); 
}
if (coor==3){
lcd.setCursor (8,1);
lcd.print("O"); 
}
if (coor==4){
lcd.setCursor (8,1);
lcd.print("NE"); 
}
if (coor==5){
lcd.setCursor (8,1);
lcd.print("NO"); 
}
if (coor==6){
lcd.setCursor (8,1);
lcd.print("SE"); 
}
if (coor==7){
lcd.setCursor (8,1);
lcd.print("SO"); 
}


lcd.setCursor (0,0);
lcd.print(ranNumber4);

lcd.setCursor (2,0);
lcd.print(ranNumber6);

lcd.setCursor (4,0);
lcd.print(ranNumber8);
            
lcd.setCursor (6,0);
lcd.print(ranNumber10);

lcd.setCursor (8,0);
lcd.print(ranNumber12);

lcd.setCursor (11,0);
lcd.print(ranNumber20);

lcd.setCursor (14,0);
lcd.print(ranNumber100);



delay(100);
}

}

Desconozco la conexion que estas usando, pero tal vez necesites resistencias de pullup? otra cuestion podria ser ruido, dependiendo de la fuente, para lo cual necesites algunos capacitores para absorber el ruido que a veces interfiere...

Potencia no creo que sea si anda bajo ciertas condiciones...

el codigo ponelo con el comando code que es el primero de las opciones.
asi queda mas organizado. no te lee el arduino? si es el chino solo tenes que instalar el driver, que tipo de arduino tenes? CH341SER.EXE - 南京沁恒微电子股份有限公司, este es el driver del arduino chino, solo tenes que setear donde esta conectado en la IDE, capaz conectaste un pin mal del lcd.

sisi, el arduino me lo lee y se graba el codigo pero cuando lo reproduce, ya sea con la alimentacion del ordenador o con cargadores usb lee el principio y cuando le toca la parte de reproducir lo aleatorio se queda como congelado hasta que con la electricidad de mi cuerpo toco las conexiones y ya funciona, si dejo de tocar buelve a quedarse congelado