#include <LiquidCrystal.h>
//LiquidCrystal lcd(PA8, PA15, PB15, PB14, PB13, PB12); //STM32F
LiquidCrystal lcd(12, 11, 10, 9, 8, 7); // UNO FOR SIMULATOR ONLY
unsigned int val = 0;
unsigned int val1 = 0; //%
unsigned int val2 = 0;//LTR
unsigned int val3 = 0;//KM
unsigned int val_old = 1;
byte graph [5][8] = { // new LCD chars: |, ||, |||, ||||, |||||
{0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00}, // 1 vertical line
{0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00}, // 2 vertical lines
{0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x00}, // 3 vertical lines
{0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x00}, // 4 vertical lines
{0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00} // 5 vertical lines
};
//---------------------------------------------------------------------------------------------------------
void setup() {
pinMode(A0, INPUT); // pin A0 as input
//lcd.begin(16, 2); // LCD initialization
lcd.begin(20,4);
lcd.clear();
for (byte k = 0; k < 5; k++) // new 5 LCD chars
lcd.createChar(k, graph[k]);
}
//---------------------------------------------------------------------------------------------------------
void loop() {
val = analogRead(A0);
val1 = val/10;
lcd.setCursor(0,0);
lcd.print(val1);
lcd.setCursor(6,0);
lcd.print("% ");
if (val_old != val) {
draw_bar(val + 1);
val_old = val;
}
}
//---------------------------------------------------------------------------------------------------------
void draw_bar(unsigned int m_val) {
byte a; // block
byte b; // lines in block
byte m; // local counter
lcd.setCursor(0, 3);
//lcd.print("[ ");
lcd.setCursor(18, 3);
//lcd.print("]");
lcd.setCursor(8, 3);
a = m_val / 255; //1023 / 255 = 4; // 1024 / 64 = 16 black blocks
for (m = 0; m < a; m++)
lcd.write(4);
b = (10 * (m_val - a * 255)) / 512; // (64 / 5) * 10, last box: vertical lines
if (b > 0)
lcd.write(b - 1);
else
lcd.write(' '); // blank block
for (m = a + 1; m < 4; m++) //16 // blank left spaces 16
lcd.write(' ');
//delay(100);
}