#include <LCD_I2C.h>
LCD_I2C lcd(0x27, 16, 2);
#define potPin A0
#define SW0 2
#define SW1 3
#define SW2 4
byte current_font_digits[10][4];
byte buffer[8];
int e, d, c, i;
/*
// set eight special characters for the font: tron_bold - updated to be stored in program memory to save some space
byte real_00[8] = {B11111, B11111, B11000, B11000, B11000, B11000, B11000, B11000}; // bits for special character 1/8
byte real_01[8] = {B11000, B11000, B11000, B11000, B11000, B11000, B11111, B11111}; // bits for special character 2/8
byte real_02[8] = {B00011, B00011, B00011, B00011, B00011, B00011, B11111, B11111}; // bits for special character 3/8
byte real_03[8] = {B11111, B11111, B00000, B00000, B00000, B00000, B00000, B00000}; // bits for special character 4/8
byte real_04[8] = {B00000, B00000, B00000, B00000, B00000, B00000, B11111, B11111}; // bits for special character 5/8
byte real_05[8] = {B11000, B11000, B11000, B11000, B11000, B11000, B11000, B11000}; // bits for special character 6/8
byte real_06[8] = {B11111, B11111, B00011, B00011, B00011, B00011, B11111, B11111}; // bits for special character 7/8
byte real_07[8] = {B11111, B11111, B11000, B11000, B11000, B11000, B11111, B11111}; // bits for special character 8/8
*/
byte real_00[8] = {B00111, B01111, B11111, B11111, B11111, B11111, B11111, B11111}; // bits for special character 1/8
byte real_01[8] = {B11111, B11111, B11111, B00000, B00000, B00000, B00000, B00000}; // bits for special character 2/8
byte real_02[8] = {B11100, B11110, B11111, B11111, B11111, B11111, B11111, B11111}; // bits for special character 3/8
byte real_03[8] = {B11111, B11111, B11111, B11111, B11111, B11111, B01111, B00111}; // bits for special character 4/8
byte real_04[8] = {B11111, B11111, B11111, B11111, B11111, B11111, B11110, B11100}; // bits for special character 5/8
byte real_05[8] = {B00000, B00000, B00000, B00000, B00000, B11111, B11111, B11111}; // bits for special character 6/8
byte real_06[8] = {B11111, B11111, B11111, B00000, B00000, B00000, B11111, B11111}; // bits for special character 7/8
byte real_07[8] = {B11111, B11111, B00000, B00000, B00000, B11111, B11111, B11111}; // bits for special character 8/8
// special character used for the individual digits, each digit is made from 4 special characters. Character 254 is empty, character 255 is fully filled rectangle
byte real_digits[10][6] = { {0, 1, 2, 3, 5, 4}, {1, 2, 254, 5, 255, 5}, {6, 6, 2, 3, 5, 5}, {1, 6, 2, 5, 7, 4}, {0, 5, 2, 254, 254, 4}, {0, 6, 6, 5, 5, 4}, {0, 6, 6, 3, 5, 4}, {1, 1, 2, 254, 0, 254}, {0, 6, 2, 3, 5, 4}, {0, 6, 2, 5, 5, 4} };
// switch font = set special characters and populate current_font_digits with digits from the selected font
void set_font_real() {
lcd.createChar(0, real_00);
lcd.createChar(1, real_01);
lcd.createChar(2, real_02);
lcd.createChar(3, real_03);
lcd.createChar(4, real_04);
lcd.createChar(5, real_05);
lcd.createChar(6, real_06);
lcd.createChar(7, real_07);
}
void create_digit(byte angka, byte xpos, byte ypos) {
lcd.setCursor(xpos, ypos);
lcd.write(real_digits[angka][0]);
lcd.write(real_digits[angka][1]);
lcd.setCursor(xpos, ypos + 1);
lcd.write(real_digits[angka][2]);
lcd.write(real_digits[angka][3]);
}
void create_digit3(byte angka, byte xpos, byte ypos) {
lcd.setCursor(xpos, ypos);
lcd.write(real_digits[angka][0]);
lcd.write(real_digits[angka][1]);
lcd.write(real_digits[angka][2]);
lcd.setCursor(xpos, ypos + 1);
lcd.write(real_digits[angka][3]);
lcd.write(real_digits[angka][4]);
lcd.write(real_digits[angka][5]);
}
void setup() {
Serial.begin(9600);
lcd.begin();
lcd.backlight();
pinMode(SW0, INPUT_PULLUP);
pinMode(SW1, INPUT_PULLUP);
pinMode(SW2, INPUT_PULLUP);
}
void loop() {
set_font_real();
if (digitalRead(SW0) == 0 && i < 1100) {
i++;
}
if (digitalRead(SW1) == 0 && i > 0) {
i--;
}
if (digitalRead(SW2) == 0) {
i = 0;
}
e = (i / 1000);
create_digit3(e, 4, 0);
c = (i % 1000 / 100);
create_digit3(c, 7, 0);
d = (i % 100 / 10);
create_digit3(d, 10, 0);
create_digit3(i % 10, 13, 0);
delay(100);
Serial.println(i);
}