Problemas grabar datos a través de LCD

Hola! soy bastante nuevo en esto de arduino y he llegado a un callejón sin salida con un código que intento sacar adelante. Necesito ayuda por favor!! :frowning:

Ocurre que tengo un código que con un potenciómetro y un botón intenta grabar el dato de una temperatura en una variable, introduciendo los valores a través del LCD.

La introducción se hace a través de un bucle IF, cuando es verdadero se entra a -->void menuinicial() y se pueden grabar los 3 dígitos sin problema a través de un go...while, PEEERO! cuando se sale de menuinicial() ocurre algo que me está volviendo loco, resulta que el último valor leído por el potenciómetro se graba en los otros tres dígitos!!! Como puede ser!

Ejemplo: entro -17, y cuando sale del bucle IF, me ha grabado +77!! NO ENTIENDO NADA! :S :S
Algún gurú puede echarme una mano por favor? Dejo aquí el código:


#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <LiquidCrystal.h>
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x20 for a 16 chars and 2 line display

int val = analogRead(0);
int estadoAnterior = 0;
int estadoActual;
int pin=2; // aquí el pin digital que se quiere leer
int led=13;
char ref []={"000"}; // Declaramos un buffer donde guardameros los digitos de la temperatura
int i=0; //Variable para controlar cuando se graban los datos de las temperaturas

void setup() {
Serial.begin(9600);
pinMode(pin, INPUT);
pinMode(led, OUTPUT);

//******************************************************************************
lcd.init(); // cargamos la pantalla LCD
lcd.init();
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("TEMPERATURA DEPOSITO");
lcd.setCursor(0,1);
lcd.print("D1 C D2 C");
lcd.setCursor(0,2);
lcd.print("min min ON");
lcd.setCursor(0,3);
lcd.print("max max ");
//********************************************************************************
}

void loop()
{
//Comprueba si se ha pulsado el boton 1, si es verdadero salta a menuinicial
digitalWrite(led, LOW);
estadoActual = digitalRead(pin);
if (estadoAnterior != estadoActual) // ha habido un cambio de estado
{
estadoAnterior = estadoActual;
delay (500);
menuinicial(); //Salta al bloque menuinicial

}
}

//Menu inicial
void menuinicial()
{

digitalWrite(led, HIGH);
delay (150);

// Primer digito

do{ // Mientras no cambie el estado del boton 1, repetirá este bloque
// Mientras que no cambie el estado del boton 1, repetirá este bloque
int val = analogRead(1);
val = map(val, 0, 1023, 0, 9); // Mapea un valor analogico en 10 numeros (de 0 a 9)
if (val<=4) { ref[0] = {'-'};} else { ref[0] = {'+'};}
lcd.setCursor(3,2); // for LCD
lcd.print(ref[0]); // for LCD
estadoActual = digitalRead(pin);

} while(estadoAnterior != estadoActual);
estadoAnterior = estadoActual; //Inicializa el estado del boton 1
delay (300);

//***************

// Segundo digito

do{ // Mientras que no cambie el estado del boton 1, repetirá este bloque
int val = analogRead(1);
val = map(val, 0, 1023, 0, 10); // Mapea un valor analogico en 10 numeros (de 0 a 9)
if (val==0) {ref[1]={'0'};} if (val==1) {ref[1]={'1'};} if (val==2) {ref[1]={'2'};} if (val==3) {ref[1]={'3'};} if (val==4) {ref[1]={'4'};} if (val==5) {ref[1]={'5'};} if (val==6) {ref[1]={'6'};} if (val==7) {ref[1]={'7'};} if (val==8) {ref[1]={'8'};} if (val==9) {ref[1]={'9'};}
lcd.setCursor(4,2); // for LCD
lcd.print(ref[1]); // for LCD
estadoActual = digitalRead(pin);
} while(estadoAnterior != estadoActual);
estadoAnterior = estadoActual; //Inicializa el estado del boton 1
delay (300);
//***************

// Tercer digito

do{ // Mientras que no cambie el estado del boton 1, repetirá este bloque
int val = analogRead(1);
val = map(val, 0, 1023, 0, 10); // Mapea un valor analogico en 10 numeros (de 0 a 9)
if (val==0) {ref[2]={'0'};} if (val==1) {ref[2]={'1'};} if (val==2) {ref[2]={'2'};} if (val==3) {ref[2]={'3'};} if (val==4) {ref[2]={'4'};} if (val==5) {ref[2]={'5'};} if (val==6) {ref[2]={'6'};} if (val==7) {ref[2]={'7'};} if (val==8) {ref[2]={'8'};} if (val==9) {ref[2]={'9'};}
lcd.setCursor(5,2);
lcd.print(ref[2]);
estadoActual = digitalRead(pin);
} while(estadoAnterior != estadoActual);
estadoAnterior = estadoActual; //Inicializa el estado del boton 1
delay (300);
//***************

Serial.print(ref[0]);
Serial.print(ref[1]);
Serial.print(ref[2]);
Serial.print(i);

}

Bienvenido al foro Arduino.
Te invito a leer las normas del foro y luego edita tu post inicial para que el código se vea correctamente usando el tag </> correspondiente y no como lo has hecho.

Para empezar todo se basa en algun arreglo de Resistencias alrededor del pin A1, que me gustaría ver antes de opinar.
El código me parece muy burdo pero podria funcionar.
burdo porque es muy repetitivo y ese código puede hacerse fácilmente con muchas menos líneas.

Como ya te pedí que leas las normas, te pediré que usando el tag de enlace pongas de donde sacaste todo?