Skip to content
Sverre Holm edited this page Dec 12, 2024 · 126 revisions

Description

The Multi Face GPS Clock is an Arduino Mega with a 20 x 4 LCD taking time and position data from a GPS. The user can change between 40+ different screens showing local time, UTC, position, solar and lunar position, their rise and set times, moon phase, date for Easter Sunday in Gregorian and Julian calendars and more. A more in-depth description is found in the form of several blog posts.

Clock faces supported

The different clock faces are shown according to the variable in the code that selects them. This variable is always prefixed with ‘Screen’ and then a few words that describe the screen.

Original in v1.0.0 (2021-09-24)

  1. ScreenLocalUTC:

  2. ScreenUTCLocator:

  3. ScreenLocalSun:

  4. ScreenLocalSunMoon:

  5. ScreenLocalMoon:

  6. ScreenMoonRiseSet:

  7. ScreenTimeZones:

  8. ScreenBinary;

  9. ScreenBinaryHorBCD:

  10. ScreenBinaryVertBCD:

  11. ScreenBar:

  12. ScreenMengenLehrUhr, link:

  13. ScreenLinearUhr, link:

  14. ScreenInternalTime

  15. ScreenCodeStatus

    New in v 2.1 is PPS (pulse per second) interrupt 1 or 0. More documentation on blog.

  16. ScreenUTCPosition:

  17. ScreenNCDXFBeacons2, link:

  18. ScreenNCDXFBeacons1:

  19. ScreenWSPRsequence, link:

See explanation here also.

New in v1.0.1 (2021-09-29):

  1. ScreenHex

  2. ScreenOctal

New in v1.0.3 (2021-10-11):

  1. ScreenHexOctalClock:

New in v1.0.4 (2021-10-18):

  1. ScreenEasterDates:

See explanation here also.

New in v1.2.0 (2022-01-22):

  1. ScreenLocalSunSimpler:

  2. ScreenLocalSunAzEl:

  3. ScreenMathClockAdd, link:

  4. ScreenMathClockSubtract:

  5. ScreenMathClockMultiply:

  6. ScreenMathClockDivide:

  7. ScreenLunarEclipse:

See also explanation here.

New in v1.3.0 (2022-04-05):

  1. ScreenRoman:

  2. ScreenMorse:

  3. ScreenWordClock:

  4. ScreenSidereal:

See also explanation here.

New in v1.5.0 (2022-11-03):

  1. ScreenLocalUTCWeek

  2. ScreenPlanetsInner

  3. ScreenPlanetsOuter

  4. ScreenISOHebIslam

  5. ScreenGPSInfo

See also explanation here.

New in v1.6.0 (2023-04-14):

  1. ScreenChemical

See also explanation here.

New in v2.1.0 (2024-01-21):

  1. ScreenBigNumbers2

  2. ScreenBigNumbers2UTC

  3. ScreenBigNumbers3

  4. ScreenBigNumbers3UTC

  5. ScreenReminder

    Screen shown before and after the program 'EEPROMReminder' has been run

New in v2.2.0 (2024-06-09):

  1. ScreenEquinoxes

  2. ScreenSolarEclipse

  3. ScreenNextEvents

New in v1.3.0 (2022-04-05):

  1. ScreenDemoClock

Demo of all screens in "Random" order (may increment or decrement also), and with 10 seconds per screen.

Here's a YouTube video showing 24 screens of the Favorites subset of clock faces, using the Demo mode with 10 seconds per screen: https://youtu.be/AJEWBOJmE1E

The numbers 1, 2, 3, … are assigned in clock_defines.h

Local languages supported

The day name when local time is displayed may be shown in one of the following languages in addition to English.

Original in v1.0.0 (2021-09-24)

  1. English:

  2. Norwegian (and Danish) with display of ø:

New in v1.4.0 (2022-07-25):

  1. French:

  2. German:

  3. Spanish, supporting display of á and é:

  4. Swedish with display of ö and å:

  5. Icelandic, with display of á, ð, and Þ:

Hardware Options

20 x 4 LCD display

In the file clock_options.h, choose only one of these and comment out the other one

  • #define FEATURE_LCD_I2C for serial interface to 20x4 LCD on 0x27 I2C address.
  • #define FEATURE_LCD_4BIT for parallel interface to 20x4 LCD.

Note that starting with ver 2 of the software, there is no need to edit any of the files for an ordinary user, except the kind of LCD (above), and pin numbers (see below). All other parameters can be set by using the rotary encoder.

Rotary encoder, push buttons

Version 1.0.0 of the code used two push buttons to increase/decrease the screen number to be displayed. Starting from version 1.1.0, a rotary encoder with a push button is also supported which can be used by itself or in addition to the push buttons. The variables in clock_options.h are:

  • #define FEATURE_ROTARY_ENCODER // enable rotary encoder with push button
  • #define FEATURE_BUTTONS // two push buttons increase/decrease screen number

Either the rotary encoder or push buttons are needed (or both). The menu system which was new in version 2, requires the rotary encoder.

Pin numbers

Assign pin numbers for the rotary encoder, analog button string, parallel interface to LCD if chosen, and PWM output for LCD backlight in clock_pin_settings.h

GPS baud rate

Starting from version 2., it can be set from the menu system, by a short press on the rotary encoder push button.

Buttons

Menu+ grounds the analog input and Menu- provides a voltage of 5V * 1/11 = 0.46 Volts. The function analogbuttonread() in clock_helper_routines.h counts values in a range 0...1023 corresponding to 0...5 Volts. If the value is less than 50 (corresponding to 5 Volts * 50/1023 = 0.24 Volts) it returns Menu+ and if the value is between 51 and 130 (0.25-0.63 Volts) it returns Menu-.

GPS output voltage

The Arduino Mega expects 5 Volts logic as from the QRPLabs QLG1 and QLG2, and will not read GPS properly if the GPS has a 3.3 V output.


Software Options

Starting with version 2 of the software, an ordinary user does not need to edit any of the files for choosing options. [See link to YouTube video on main page for setup] (https://github.com/la3za/Multi-Face-GPS-Clock) of GPS baudrate, PPS interrupt on/off (v 2.1 software), timezone, date format, local language, backlight level,

Arduino Libraries

These libraries need to be installed properly according to how the Arduino environment expects them.:

  • TinyGPS++.h - for GPS data interpretation
  • Timelib.h - timekeeping functionality
  • Timezone_Generic.h - for time zones and automatic handling of daylight saving
  • moon2.h - lunar position from K3NG rotator controller
  • rotary.h - rotary encoder library with push-button feature controller
  • Versions 2.2.2 and later:
    • [xxx]
  • Versions 2.2.0 and later:

Obsolete:

Acknowledgment

Some screens made with online LCD Display Screenshot Generator - LCD over I2C