#include #include #include "watch.h" typedef struct ApplicationState { bool play; } ApplicationState; ApplicationState application_state; void cb_alarm_pressed() { application_state.play = true; } void app_init() { memset(&application_state, 0, sizeof(application_state)); } void app_wake_from_backup() { } void app_setup() { watch_register_extwake_callback(BTN_ALARM, cb_alarm_pressed, true); watch_enable_display(); watch_enable_buzzer(); } void app_prepare_for_standby() { watch_display_string(" rains ", 2); } void app_wake_from_standby() { } bool app_loop() { if (application_state.play) { printf("Playing song...\n"); 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) { printf("rest for %d ms\n", durations[i]); sprintf(buf, "%2drESt ", i); } else { printf("playing note %2d: %3.0f Hz for %d ms\n", i, 1000000.0 / (float)NotePeriods[rains[i]], durations[i]); sprintf(buf, "%2d%6d", i, NotePeriods[rains[i]]); } watch_display_string(buf, 2); watch_buzzer_play_note(rains[i], durations[i]); } printf("done!\n\n"); } return true; }