aboutsummaryrefslogtreecommitdiffstats
path: root/pico-watch.c
diff options
context:
space:
mode:
Diffstat (limited to 'pico-watch.c')
-rw-r--r--pico-watch.c74
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;
}