A minimal e-reader running on Arduino Uno with an LCD 1602 display. Texts are stored on flash memory (PROGMEM).
⚠️ Only supports short texts due to arduino limitations (32KB).
- Read texts stored in flash memory (PROGMEM)
- Navigate with buttons (OK, Next, Previous)
- Menu to select texts
Hardware
- Arduino Uno
- LCD 1602
- 3 buttons
Software
Edit pin assignments in src/pins.h to match your wiring:
// LCD
const int LCD_RS_PIN = 12;
const int LCD_EN_PIN = 11;
const int LCD_D4_PIN = 5;
const int LCD_D5_PIN = 4;
const int LCD_D6_PIN = 3;
const int LCD_D7_PIN = 2;
// Buttons
const int BTN_OK_PIN = 13;
const int BTN_NEXT_PIN = 8;
const int BTN_PREV_PIN = 7;# find arduino serial port
arduino-cli board list
# compile for Uno
arduino-cli compile --fqbn arduino:avr:uno
# upload to board
arduino-cli upload -p <port> --fqbn arduino:avr:uno
# optional: only needed if "LiquidCrystal.h" is missing
arduino-cli lib install LiquidCrystalTexts are defined in src/books.h in two parts:
- The content in a PROGMEM variable
- The menu entry in
books[]list
Create a new PROGMEM string (or edit an existing one):
const char my_text[] PROGMEM =
"First sentence. "
"Second sentence here.";Add (or edit) entry in books[]:
const Book books[] = {
{ "Tim Berners-Lee", tim },
{ "Lorem Ipsum", lorem },
{ "Psalm 126", hamaalot },
{ "My New Text", my_text },
};

