A simple analogue watch face without any frills for sqfmi watches
Find a file
Karl E. Jørgensen 6e52867a07 Refactoring
Search for usable boxes is now generic and can take any number of boxes
2025-02-22 17:02:40 +00:00
.gitignore Implement text on the watch face 2025-02-16 15:52:07 +00:00
COPYING Add a lot of documentation 2025-02-14 00:50:35 +00:00
GxEPD2_BW.h.patch Update README.md with a screenshot 2025-02-14 19:26:40 +00:00
hour_hand-lines.svg Get rid of HANDS_RADIUS: gives consistency between svgs 2025-02-14 01:28:12 +00:00
Makefile Reduce default serial speed 2025-02-16 16:47:16 +00:00
minute_hand-lines.svg Get rid of HANDS_RADIUS: gives consistency between svgs 2025-02-14 01:28:12 +00:00
README-development.md Add support for setting the date for screen shots 2025-02-16 16:47:59 +00:00
README.md Typo fix 2025-02-16 22:53:43 +00:00
screenshot.png Move boxes and get a new screenshot 2025-02-16 16:48:53 +00:00
settings.h Add support for setting the date for screen shots 2025-02-16 16:47:59 +00:00
Smart.cpp Refactoring 2025-02-22 17:02:40 +00:00
Smart.h Refactoring 2025-02-22 17:02:40 +00:00
Smart.ino Update README.md with a screenshot 2025-02-14 19:26:40 +00:00
svg2boxes.py Implement text on the watch face 2025-02-16 15:52:07 +00:00
svg2multiline.py Get rid of HANDS_RADIUS: gives consistency between svgs 2025-02-14 01:28:12 +00:00
watchface-pixmap.svg Refactoring 2025-02-22 17:02:40 +00:00

Smart

A watch face for the sqfmi Watchy watch and compatible ones.

This is a simple analogue watch face without any frills.

Screen shot of watch face

It is a little different from other watchy projects out there in a couple of respects:

  • The static part of the watch face is designed in Inkscape and converted to raster format at compile-time. Attempting to draw lines, decorations and whatnot using C++ was ... ahem... simply not suitable. And slow. Designing this in Inkscape is much nicer.

  • The watch hands are also designed using Inkscape, and drawn as lines by the code. It makes it very easy to tweak their design.

  • The watch hands move precisely as they would on a real mechanical analogue watch (but only once per minute). A little fun with trigonometry was needed.

  • The text is placed to avoid overlaps with the watch hands. Over time, you will see the text "move around" as a result.

Building It

To build this, you will need a few things installed:

  • An operating system. I use Debian GNU/Linux, but any decent Linux distribution should work just as well. For MacOS/Windows: Your mileage will vary, and might not be much at all.

  • Assuming you want to actually run it: A compatible watch. They are sold by e.g. SQFMI and probably many others. Mine is probably a clone, as I got it from elsewhere (a big American retailer named after a rainforest, and who I'm now boycotting, so I won't link it here).

  • The Arduino IDE. I used version 1.8.19 (as packaged in Debian 12/bookworm), but other versions will probably work too.

  • The Aduino IDE board files for the watch. See https://watchy.sqfmi.com/docs/legacy#arduino-setup for the gory details.

  • GNU Make. That's how I build things. It is simple, and it works. All the compile-time graphics manipulation is done through the Makefile. You can use the Arduino IDE to compile/upload the code, but you need to use e.g. make headers first. Or you can let the Makefile do the whole thing with just make upload - this makes it easy to use an external editor.

  • Inkscape: Used at build time to get a decent SVG -> raster conversion. Also nice if you want to edit the designs. I used v1.2.2, but other versions are very likely to work out of the box as well.

  • imagemagick: The compilation process uses it to convert raster images to various formats.

  • python: There are a couple of custom python scripts used in the build. Probably needs python 3.

  • The source code. You are probably looking at on Codeberg or Github, and they have directions on how to get a copy. Both are good sources to get the latest version, although I may move things entirely to Codeberg in the future.

  • Patience. The build process is slow. Coffee is optional (but desirable as always).

If you have everything set up, and the watch connected via USB, then simply running:

make upload

should compile the code and upload it to your watch.

Tweaking It

See README-development.md for that.

Just So You Know ...

This is my first foray into the world of Arduino and other embedded systems: so please bear with me if I'm not following best practices etc. I don't know what they are yet.

It is also my first attempt at designing a watch face for Watchy; although I'm pretty pleased with the result, I'm sure there are graphics artists out there who would rip my design to shreds. That's OK. I'm still learning.