#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
//--- variables for pins name
int left = A0;
int right = A1;
int val = 4;
byte empty[8] = { B11111, B00000, B00000, B00000, B00000, B00000, B00000, B11111 };
byte half[8] = { B11111, B00000, B11000, B11000, B11000, B11000, B00000, B11111 };
byte full[8] = { B11111, B00000, B11011, B11011, B11011, B11011, B00000, B11111 };
byte cup_left[8] = { B01111, B01000, B01000, B01000, B01000, B00100, B11111, B01111 };
byte cup_right[8] = { B11100, B00110, B00101, B00101, B00110, B01000, B11111, B11110 };
byte warning[] = { B00100, B01110, B01010, B11111, B11011, B11011, B11111, B00000 };
byte locked[] = { B00000, B01110, B10001, B10001, B11111, B11011, B11011, B11111 };
byte unlock[] = { B01110, B10001, B10001, B00001, B11111, B11011, B11011, B11111 };
void setup()
{
pinMode(left, INPUT_PULLUP);
pinMode(right, INPUT_PULLUP);
lcd.init(); // initialize the 16x2 lcd module
lcd.createChar(0, empty);
lcd.createChar(1, half);
lcd.createChar(2, full);
lcd.createChar(3, cup_right);
lcd.createChar(4, cup_left);
lcd.createChar(5, warning);
lcd.createChar(6, locked);
lcd.createChar(7, unlock);
lcd.backlight(); // enable backlight for the LCD module
}
void loop()
{
//load_animation(5, 1);
//num_animation(17, 1);
//cup_animation(0, 1);
//warning_animation(0, 1);
//locked_animation(0, 1);
//unlocked_animation(0, 1);
}
//--- locked animation with line location (5, 1) ---//
void locked_animation(int location, int line){
lcd.setCursor(location, line);
lcd.write(byte(7));
delay(200);
lcd.setCursor(location, line);
lcd.write(byte(6));
}
//--- unlocked animation with line location (5, 1) ---//
void unlocked_animation(int location, int line){
lcd.setCursor(location, line);
lcd.write(byte(6));
delay(200);
lcd.setCursor(location, line);
lcd.write(byte(7));
}
//--- warning animation with line location (5, 1) ---//
void warning_animation(int location, int line){
lcd.setCursor(location, line);
lcd.write(byte(5));
}
//--- cup animation with line location (5, 1) ---//
void cup_animation(int location, int line){
int location_next = location + 1;
lcd.setCursor(location, line);
lcd.write(byte(4));
lcd.setCursor(location_next, line);
lcd.write(byte(3));
}
//--- Loading animation with time (sec) ---//
void load_animation( int loading_time, int line) {
loading_time = (loading_time * 1000) / 32;
for (int i = 0; 16 > i; i++) {
lcd.setCursor(i, line);
lcd.write(0);
delay(100);
}
for (int i = 0; 16 > i; i++) {
lcd.setCursor(i, line);
lcd.write(1);
delay(loading_time);
lcd.setCursor(i, line);
lcd.write(2);
delay(loading_time);
}
}
//--- lavel animation with value (1 to 32) ---//
void num_animation(int line, int num) {
for (int i = 0; 16 > i; i++) {
lcd.setCursor(i, line);
lcd.write(0);
}
int remainder = num % 2;
if (remainder == 0) { //if num is even
int dot = num / 2;
for (int i = 0; dot > i; i++) {
lcd.setCursor(i, line);
lcd.write(1);
lcd.setCursor(i, line);
lcd.write(2);
}
}
else if (remainder == 1) { //if num is not even
num = num - 1;
int dot = num / 2;
for (int i = 0; dot > i; i++) {
lcd.setCursor(i, line);
lcd.write(1);
lcd.setCursor(i, line);
lcd.write(2);
}
lcd.setCursor(dot, line);
lcd.write(1);
}
}