Hacer una barra en el LCD16x2

Hola:

He hecho un programa con Visual Studio .net que puedes descargar. Funciona con el puerto COM4 y Arduino UNO r3 colocando un potenciómetro en A2.

Por ahora solo he hecho este programa y lo muestra en el PC conectado por USB/Serie los valores del 0 al 1023.

1

Quiero conectar Arduino con el LCD algo así.

La misma barra del porcentaje que muestra en Visual Studio quiero que también se refleje en el LCD.

El código base de ARduino hasta el momento es este.

int valorPot = 0;
float voltajePot = 0;

void setup() { Serial.begin(115200); }

void loop()
{
    valorPot = analogRead(2);
    //voltajePot=valorPot*(5.0/1023.0);
    //Serial.println(voltajePot);
    Serial.println(valorPot);
    delay(100); // 4 segundos.
}

La barra no se como se hace.

¿Alguna ayuda?

Saludos.

ed.png

Google: Arduino lcd bar graph

Gracias surbyte:

Aquí hay un ejemplo muy bueno.

Ver vídeo.

#include <LiquidCrystal.h>

#define lenght 16.0

double percent=100.0;
unsigned char b;
unsigned int peace;

// custom charaters

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
byte p1[8] = {
  0x10,
  0x10,
  0x10,
  0x10,
  0x10,
  0x10,
  0x10,
  0x10};

byte p2[8] = {
  0x18,
  0x18,
  0x18,
  0x18,
  0x18,
  0x18,
  0x18,
  0x18};

byte p3[8] = {
  0x1C,
  0x1C,
  0x1C,
  0x1C,
  0x1C,
  0x1C,
  0x1C,
  0x1C};

byte p4[8] = {
  0x1E,
  0x1E,
  0x1E,
  0x1E,
  0x1E,
  0x1E,
  0x1E,
  0x1E};

byte p5[8] = {
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F,
  0x1F};

void setup()   {

  delay(100);
  lcd.createChar(0, p1);
  lcd.createChar(1, p2);
  lcd.createChar(2, p3);
  lcd.createChar(3, p4);
  lcd.createChar(4, p5);

  lcd.begin(16, 2);

}

void loop()
{

  lcd.setCursor(0, 0);

  //ADC conversion

  unsigned int value = analogRead(0);

  percent = value/1024.0*100.0;

  lcd.print(value);

  lcd.print(" - ");

  lcd.print(percent);
  lcd.print(" %   ");

  lcd.setCursor(0,1);

  double a=lenght/100*percent;

 // drawing black rectangles on LCD

  if (a>=1) {

    for (int i=1;i<a;i++) {

      lcd.write(4);

      b=i;
    }

    a=a-b;

  }

  peace=a*5;

// drawing charater's colums

  switch (peace) {

  case 0:

    break;

  case 1:
    lcd.write(0);

    break;

  case 2:
    lcd.write(1);
    break;

  case 3:
    lcd.write(2);
    break;

  case 4:
    lcd.write(3);
    break;

  }

//clearing line
  for (int i =0;i<(lenght-b);i++) {

    lcd.print(" ");
  }

  ;
}

Fuente:
https://www.electronicsblog.net/arduino-lcd-horizontal-progress-bar-using-custom-characters/