diff options
Diffstat (limited to 'pico-watch.c')
-rw-r--r-- | pico-watch.c | 74 |
1 files changed, 47 insertions, 27 deletions
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; } |