Go Down

Topic: Bug con LCD + potenciometro (Read 401 times) previous topic - next topic

pepoye

Dec 30, 2017, 05:38 pm Last Edit: Dec 30, 2017, 05:44 pm by pepoye
Hola:
Tengo un arduino UNO con un LCD 16x2, en el cual monitorizo con la ayuda de un potenciometro un valor  comprendido entre 0 y 32.



En el LCD regulo el potenciometro y va cambiando de valor, pero por ejemplo:

Si lo subo del valor 0 al 15, al volverlo bajar me guarda el segundo digito (es decir el munero "5" del numero "15") y solo me regula el primer digito. En este ejemplo si lo vuelvo ajustar al numero "2" me marcaria "25".

¿Me explico? Pongo otro ejemplo.
Subo del 0 al 26 y luego bajo al 7, en el lcd me marca 76.

Lo curioso es que viendolo en el monitor serie marca los numeros perfectos, es decir que tiene que ser un problema entre LCD y el Arduino.

Os pongo el codigo. El Sketch no es nada de otro mundo.
Code: [Select]
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2);
int sensorPin = A1;
int sensorValue = 0;

void setup() {
  Serial.begin(9600);
  lcd.begin(16,2);
  lcd.setCursor(0, 1);
  lcd.print("Tiempo=");
}

void loop() {
  sensorValue = (analogRead(sensorPin)/32);
  Serial.println(sensorValue);
  delay(100);
  lcd.setCursor(7, 1);
  lcd.print(sensorValue);
  delay(500);

}


Muchas gracias

jafox007

#1
Dec 30, 2017, 06:10 pm Last Edit: Dec 30, 2017, 06:15 pm by jafox007
Eso es porque necesitas "limpiar la pantalla" usando

Code: [Select]
lcd.clear();

o en su defecto si solo quieres borrar un caracter pon el cursor en la posicion que quieras e imprime un espacio en blanco.

Yo antes de imprimir el valor, imprimiria dos espacios en blanco (si el valor como maximo tiene 2 digitos) en las posiciones donde va despues el valor, asi cuando imprima el valor justo antes estara el espacio en blanco, de la siguiente forma.

Code: [Select]
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2);
int sensorPin = A1;
int sensorValue = 0;

void setup() {
  Serial.begin(9600);
  lcd.begin(16,2);
  lcd.setCursor(0, 1);
  lcd.print("Tiempo=");
}

void loop() {
  sensorValue = (analogRead(sensorPin)/32);
  Serial.println(sensorValue);
  delay(100);
  lcd.setCursor(7, 1);
  lcd.print("  ");
  lcd.print(sensorValue);
  delay(500);

}

pepoye

muchas gracias por todo, no caia yo de ese truco.

De todas maneras te corrigo en codigo porque de tu forma desplaza dos espacios.
Code: [Select]
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2);
int sensorPin = A1;
int sensorValue = 0;

void setup() {
  Serial.begin(9600);
  lcd.begin(16,2);
  lcd.setCursor(0, 0);
  lcd.print("Temp=");
  lcd.setCursor(0, 1);
  lcd.print("Tiempo=");
}

void loop() {
  sensorValue = (analogRead(sensorPin)/32);
  Serial.println(sensorValue);
  delay(100);
  lcd.setCursor(7, 1);
  lcd.print("  ");
  lcd.setCursor(7, 1);
  lcd.print(sensorValue); 
  delay(500);


Muchas gracais otra vez

jafox007

Cierto, me he saltado una linea.

Go Up