aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorConfuSomu2021-02-06 23:14:21 -0500
committerConfuSomu2021-02-06 23:18:38 -0500
commit4c99f42f5ac0147e92d4a1214111596cec2e9f36 (patch)
treec7011fd450e138fd4d93b8954bc9ef45a826fb6f
parent7de1c7882f879a0ae6a5e93b43b6e6ffd6845dcb (diff)
downloadpico-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.txt26
-rw-r--r--pico-watch.c74
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;
}