diff options
author | ConfuSomu | 2021-02-06 23:14:21 -0500 |
---|---|---|
committer | ConfuSomu | 2021-02-06 23:18:38 -0500 |
commit | 4c99f42f5ac0147e92d4a1214111596cec2e9f36 (patch) | |
tree | c7011fd450e138fd4d93b8954bc9ef45a826fb6f | |
parent | 7de1c7882f879a0ae6a5e93b43b6e6ffd6845dcb (diff) | |
download | pico-watch-4c99f42f5ac0147e92d4a1214111596cec2e9f36.tar pico-watch-4c99f42f5ac0147e92d4a1214111596cec2e9f36.tar.gz pico-watch-4c99f42f5ac0147e92d4a1214111596cec2e9f36.zip |
Implement clock base
This is a very basic version of the clock used to make sure that
everything works, and I can manage to show the time on the display. No
button functions have been implemented yet. But, it works!
-rw-r--r-- | CMakeLists.txt | 26 | ||||
-rw-r--r-- | pico-watch.c | 74 |
2 files changed, 60 insertions, 40 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 52b713f..8019126 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,33 +17,33 @@ project(pico-watch C CXX) # Initialise the Pico SDK pico_sdk_init() -# Add executable. Default name is the project name, version 0.1 +# Add OLED library +add_library(Oled + oled/BitBang_I2C.c + oled/BitBang_I2C.h + oled/ss_oled.c + oled/ss_oled.h + ) +target_link_libraries(Oled pico_stdlib hardware_i2c) +# Main code #add_executable(pico-watch pico-watch.c ) add_executable(pico-watch pico-watch.c - BitBang_I2C.c - BitBang_I2C.h - ss_oled.c - ss_oled.h ) - pico_set_program_name(pico-watch "pico-watch") pico_set_program_version(pico-watch "0.1") - -pico_enable_stdio_uart(pico-watch 0) -pico_enable_stdio_usb(pico-watch 1) +pico_enable_stdio_uart(pico-watch 1) # Add the standard library to the build target_link_libraries(pico-watch pico_stdlib) # Add any user requested libraries target_link_libraries(pico-watch - hardware_i2c - hardware_timer - hardware_clocks + Oled + hardware_rtc +# hardware_clocks ) pico_add_extra_outputs(pico-watch) - diff --git a/pico-watch.c b/pico-watch.c index 3d39b9b..b9bc993 100644 --- a/pico-watch.c +++ b/pico-watch.c @@ -1,40 +1,60 @@ #include <stdio.h> #include "pico/stdlib.h" #include "hardware/i2c.h" -#include "hardware/timer.h" -#include "hardware/clocks.h" - -// I2C defines -// This example will use I2C0 on GPIO8 (SDA) and GPIO9 (SCL) running at 400KHz. -// Pins can be changed, see the GPIO function select table in the datasheet for information on GPIO assignments -#define I2C_PORT i2c0 -#define I2C_SDA 8 -#define I2C_SCL 9 +#include "hardware/rtc.h" +#include "pico/util/datetime.h" +#include "oled/ss_oled.h" + +// To modify the I2C port used, change the `#define I2C_PORT` in "oled/BitBang_I2C.c" +// Pin numbers are GPIO pins. +#define SDA_PIN 6 +#define SCL_PIN 7 +#define RESET_PIN -1 +SSOLED oled; +// Unused but useful for reference: +#define OLED_WIDTH 128 +#define OLED_HEIGHT 64 + + +void init_display() { + oledInit(&oled, OLED_128x64, 0x3d, 0, 0, 1, SDA_PIN, SCL_PIN, RESET_PIN, 1000000L); + oledFill(&oled, 0,1); + oledSetContrast(&oled, 127); + oledSetTextWrap(&oled, true); +} -int64_t alarm_callback(alarm_id_t id, void *user_data) { - // Put your timeout handler code in here - return 0; +void init_rtc() { + datetime_t init_date = { + .year = 2020, + .month = 06, + .day = 05, + .dotw = 5, // 0 is Sunday, so 5 is Friday + .hour = 15, + .min = 45, + .sec = 00 }; + rtc_init(); + rtc_set_datetime(&init_date); } +void show_datetime() { + char datetime_buf[256]; + char *datetime_str = &datetime_buf[0]; + datetime_t t; + rtc_get_datetime(&t); + datetime_to_str(datetime_str, sizeof(datetime_buf), &t); + oledWriteString(&oled, 0,10,3, datetime_str, FONT_12x16, 0, 1); +} int main() { stdio_init_all(); - - // I2C Initialisation. Using it at 400Khz. - i2c_init(I2C_PORT, 400*1000); - - gpio_set_function(I2C_SDA, GPIO_FUNC_I2C); - gpio_set_function(I2C_SCL, GPIO_FUNC_I2C); - gpio_pull_up(I2C_SDA); - gpio_pull_up(I2C_SCL); - - // Timer example code - This example fires off the callback after 2000ms - add_alarm_in_ms(2000, alarm_callback, NULL, false); - - - puts("Hello, world!"); - + init_display(); + init_rtc(); + oledWriteString(&oled, 0,15,0, (char *)"Test clock", FONT_8x8, 0, 1); + while (1) { + show_datetime(); + sleep_ms(500); + } return 0; } |