#include <SD.h>
#include <LiquidCrystal_I2C.h>
#include <ezButton.h>
#include "lcd_custom_character.h"
File file;
int book_num = 0;
int book_state = 0;
int prev_book_num = -1;
int page_num=0;
int prev_page_num=0;
String display_text = "";
ezButton next(2);
ezButton prev(3);
ezButton select_book(4);
ezButton open_book(5);
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
Serial.begin(9600);
SD.begin();
next.setDebounceTime(50);
prev.setDebounceTime(50);
select_book.setDebounceTime(50);
open_book.setDebounceTime(50);
lcd.init();
lcd.backlight();
lcd.clear();
welcome();
animate();
delay(1000);
}
void lcd_print(int x, int y, String message) {
lcd.setCursor(x, y);
lcd.print(message);
}
void display_char(int x, int y, int id) {
lcd.setCursor(x, y);
lcd.write(id);
}
void animate() {
lcd.createChar(0, left_stick);
lcd.createChar(1, right_stick);
lcd.createChar(2, open_eye);
lcd.createChar(3, middle_stick);
lcd.createChar(4, closed_eye);
for (int i = 0; i < 5; i++) {
display_char(11, 3, 1);
display_char(9, 3, 3);
display_char(7, 3, 0);
if (i % 2 == 0) {
display_char(8, 3, 2);
display_char(10, 3, 2);
delay(1100);
}
else {
display_char(8, 3, 4);
display_char(10, 3, 4);
delay(100);
}
}
}
void welcome() {
lcd_print(1, 0, "Welcome");
delay(1000);
lcd_print(8, 1, "To");
delay(1000);
lcd_print(10, 2, "Digi Book");
delay(1000);
}
void loop() {
next.loop();
prev.loop();
select_book.loop();
open_book.loop();
if (next.isPressed()) {
if(book_state) page_num++;
else book_num++;
}
else if (prev.isPressed()) {
if(book_state) page_num--;
else book_num--;
}
else if (select_book.isPressed()) {
page_num=0;
book_state = 0;
prev_book_num = -1;
prev_page_num=-1;
}
else if (open_book.isPressed()) {
book_state = 1;
}
book_num = constrain(book_num, 0, 1);
if(page_num<0) page_num=0;
check_book();
read_book();
// for better working of simulator
delay(10);
}
void check_book() {
if (prev_book_num != book_num) {
prev_book_num = book_num;
lcd.clear();
if (book_num) {
lcd_print(0,0,"Think and Grow Rich");
}
else {
lcd_print(0,0,"Harry Potter");
}
}
}
void read_book() {
if (book_state) {
if (book_num) {
file = SD.open("think.txt", FILE_READ);
}
else {
file = SD.open("harry.txt", FILE_READ);
}
int total_pages=file.size()/80;
page_num=constrain(page_num,0,total_pages);
int pointer=page_num*80;
if (file) {
if(prev_page_num!=page_num){
prev_page_num=page_num;
display_text="";
file.seek(pointer);
while(display_text.length()!=80){
char data=file.read();
display_text.concat(data);
}
page_print();
}
}
}
file.close();
}
void page_print(){
for(int i=1;i<4;i++){
lcd_print(0,i,display_text.substring(i*20,(i+1)*20));
}
}