summaryrefslogtreecommitdiffstats
path: root/Sensor Watch Buzzer Demo/app.c
diff options
context:
space:
mode:
Diffstat (limited to 'Sensor Watch Buzzer Demo/app.c')
-rw-r--r--Sensor Watch Buzzer Demo/app.c137
1 files changed, 137 insertions, 0 deletions
diff --git a/Sensor Watch Buzzer Demo/app.c b/Sensor Watch Buzzer Demo/app.c
new file mode 100644
index 00000000..5c2dbc7b
--- /dev/null
+++ b/Sensor Watch Buzzer Demo/app.c
@@ -0,0 +1,137 @@
+#include <stdio.h>
+#include <string.h>
+#include "watch.h"
+
+typedef struct ApplicationState {
+ bool play;
+ bool debounce_wait;
+} ApplicationState;
+
+ApplicationState application_state;
+
+
+void cb_alarm_pressed() {
+ if (application_state.debounce_wait) return;
+ application_state.debounce_wait = true;
+ application_state.play = true;
+}
+
+void app_init() {
+ memset(&application_state, 0, sizeof(application_state));
+}
+
+void app_wake_from_deep_sleep() {
+}
+
+void app_setup() {
+ watch_register_button_callback(BTN_ALARM, cb_alarm_pressed);
+
+ watch_enable_display();
+
+ watch_enable_buzzer();
+}
+
+void app_prepare_for_sleep() {
+ watch_display_string(" rains ", 2);
+}
+
+void app_wake_from_sleep() {
+}
+
+bool app_loop() {
+ if (application_state.play) {
+ const BuzzerNote rains[] = {
+ BUZZER_NOTE_A4,
+ BUZZER_NOTE_F5,
+ BUZZER_NOTE_REST,
+ BUZZER_NOTE_A4,
+ BUZZER_NOTE_E5,
+ BUZZER_NOTE_REST,
+ BUZZER_NOTE_A4,
+ BUZZER_NOTE_F5,
+ BUZZER_NOTE_G5,
+ BUZZER_NOTE_E5,
+ BUZZER_NOTE_REST,
+ BUZZER_NOTE_A4,
+ BUZZER_NOTE_G5,
+ BUZZER_NOTE_F5,
+ BUZZER_NOTE_E5,
+ BUZZER_NOTE_D5,
+ BUZZER_NOTE_E5,
+ BUZZER_NOTE_REST,
+
+ BUZZER_NOTE_A5,
+ BUZZER_NOTE_REST,
+ BUZZER_NOTE_A5,
+ BUZZER_NOTE_A5SHARP_B5FLAT,
+ BUZZER_NOTE_G5,
+ BUZZER_NOTE_REST,
+ BUZZER_NOTE_C5,
+ BUZZER_NOTE_A5,
+ BUZZER_NOTE_A5SHARP_B5FLAT,
+ BUZZER_NOTE_G5,
+ BUZZER_NOTE_REST,
+ BUZZER_NOTE_D5,
+ BUZZER_NOTE_A5SHARP_B5FLAT,
+ BUZZER_NOTE_A5,
+ BUZZER_NOTE_G5,
+ BUZZER_NOTE_F5,
+ BUZZER_NOTE_E5,
+ };
+ const uint16_t durations[] = {
+ 200,
+ 600,
+ 100,
+ 200,
+ 600,
+ 100,
+ 200,
+ 400,
+ 400,
+ 600,
+ 100,
+ 200,
+ 400,
+ 400,
+ 400,
+ 400,
+ 800,
+ 600,
+
+ 200,
+ 50,
+ 400,
+ 200,
+ 400,
+ 100,
+ 200,
+ 400,
+ 400,
+ 400,
+ 200,
+ 200,
+ 400,
+ 400,
+ 400,
+ 400,
+ 900,
+ };
+ application_state.play = false;
+ for(size_t i = 0; i < sizeof(rains); i++) {
+ char buf[9] = {0};
+ if (rains[i] == BUZZER_NOTE_REST) {
+ sprintf(buf, "%2drESt ", i);
+ } else {
+ sprintf(buf, "%2d%6d", i, NotePeriods[rains[i]]);
+ }
+ watch_display_string(buf, 2);
+ watch_buzzer_play_note(rains[i], durations[i]);
+ }
+ }
+
+ // Wait a moment to debounce button input
+ delay_ms(250);
+ application_state.debounce_wait = false;
+
+ return true;
+}