← Back 
embedded systems

Owake

Retro alarm clock, chronometer and digital clock for AVR. Built on a hierarchical finite state machine and a custom HD44780 LCD driver.

C++ AVR Embedded
Take a look ↗

Owake started from a simple question: why rely on a phone to wake up when you can build something better yourself?

It is a retro alarm clock, digital clock and chronometer that runs on AVR microcontrollers using the Arduino core. The whole thing is driven by a hierarchical finite state machine that manages every mode and transition cleanly, paired with a custom driver for HD44780-based LCD displays written from scratch — no bloated libraries, full control over timing and communication.

Features

  • Alarm, digital clock and chronometer modes
  • Smooth, responsive navigation through a three-button interface (down, up, ok)
  • Custom I2C LCD driver for 16×2 HD44780 displays
  • Hierarchical FSM architecture — states are composable and transitions are explicit
  • Targets atmega328p and atmega32u4 out of the box

Hardware

You need a common AVR board (Arduino Nano, Uno, Leonardo, Mini, Micro or Mega), a 16×2 I2C LCD, three push buttons and a buzzer. The schematic is included in /resources/schem.png.

Building

Requires avr-binutils, avr-gcc, avr-libc and avrdude on your path. Windows users can get these through MSYS2.

make mcu=yourmcu         # defaults to atmega328p
make flash mcu=yourmcu port=mcuport

The compiled firmware lands in build/binaries.


Licensed under the GNU General Public License v3.0.