halloween demo
This commit is contained in:
		
							parent
							
								
									a4e281f76d
								
							
						
					
					
						commit
						88281ef53f
					
				| @ -117,11 +117,99 @@ void app_prepare_for_standby() { | ||||
| void app_wake_from_standby() { | ||||
| } | ||||
| 
 | ||||
| typedef struct { | ||||
|     BuzzerNote note; | ||||
|     uint16_t duration; | ||||
|     char lyric[7]; | ||||
| } SongNote; | ||||
| 
 | ||||
| const BuzzerNote beeps[] = { | ||||
|     BUZZER_NOTE_D5SHARP_E5FLAT, | ||||
|     BUZZER_NOTE_D5SHARP_E5FLAT, | ||||
|     BUZZER_NOTE_D5SHARP_E5FLAT, | ||||
|     BUZZER_NOTE_D5SHARP_E5FLAT, | ||||
|     BUZZER_NOTE_F5SHARP_G5FLAT, | ||||
|     BUZZER_NOTE_D5SHARP_E5FLAT, | ||||
|     BUZZER_NOTE_D5SHARP_E5FLAT, | ||||
|     BUZZER_NOTE_D5SHARP_E5FLAT, | ||||
|     BUZZER_NOTE_C5, | ||||
|     BUZZER_NOTE_C5, | ||||
|     BUZZER_NOTE_D5SHARP_E5FLAT, | ||||
|     BUZZER_NOTE_D5SHARP_E5FLAT, | ||||
|     BUZZER_NOTE_D5SHARP_E5FLAT, | ||||
|     BUZZER_NOTE_D5SHARP_E5FLAT, | ||||
|     BUZZER_NOTE_F5SHARP_G5FLAT, | ||||
|     BUZZER_NOTE_REST, | ||||
| }; | ||||
| 
 | ||||
| const SongNote melody[] = { | ||||
|     // {BUZZER_NOTE_D5SHARP_E5FLAT,    300,    ""},
 | ||||
|     // {BUZZER_NOTE_D5SHARP_E5FLAT,    300,    ""},
 | ||||
|     // {BUZZER_NOTE_D5SHARP_E5FLAT,    300,    ""},
 | ||||
|     // {BUZZER_NOTE_D5SHARP_E5FLAT,    200,    ""},
 | ||||
|     // {BUZZER_NOTE_F5SHARP_G5FLAT,    300,    ""},
 | ||||
|     // {BUZZER_NOTE_REST,              20,     ""},
 | ||||
|     // {BUZZER_NOTE_D5SHARP_E5FLAT,    300,    ""},
 | ||||
|     // {BUZZER_NOTE_D5SHARP_E5FLAT,    300,    ""},
 | ||||
|     // {BUZZER_NOTE_D5SHARP_E5FLAT,    300,    ""},
 | ||||
|     // {BUZZER_NOTE_C5,                200,    ""},
 | ||||
|     // {BUZZER_NOTE_C5,                300,    ""},
 | ||||
|     // {BUZZER_NOTE_REST,              20,     ""},
 | ||||
|     // {BUZZER_NOTE_D5SHARP_E5FLAT,    300,    ""},
 | ||||
|     // {BUZZER_NOTE_D5SHARP_E5FLAT,    300,    ""},
 | ||||
|     // {BUZZER_NOTE_D5SHARP_E5FLAT,    300,    ""},
 | ||||
|     // {BUZZER_NOTE_D5SHARP_E5FLAT,    200,    ""},
 | ||||
|     // {BUZZER_NOTE_F5SHARP_G5FLAT,    300,    ""},
 | ||||
|     {BUZZER_NOTE_REST,              20,     "      "}, | ||||
|     {BUZZER_NOTE_D5SHARP_E5FLAT,    300,    ""}, | ||||
|     {BUZZER_NOTE_D5SHARP_E5FLAT,    300,    ""}, | ||||
|     {BUZZER_NOTE_D5SHARP_E5FLAT,    300,    ""}, | ||||
|     {BUZZER_NOTE_C5,                200,    ""}, | ||||
|     {BUZZER_NOTE_C5,                300,    ""}, | ||||
|     {BUZZER_NOTE_REST,              20,     ""}, | ||||
| 
 | ||||
|     {BUZZER_NOTE_D5SHARP_E5FLAT,    400,    " dig  "}, | ||||
|     {BUZZER_NOTE_REST,              10,     ""}, | ||||
|     {BUZZER_NOTE_C5,                200,    " thru "}, | ||||
|     {BUZZER_NOTE_C5,                200,    " the  "}, | ||||
|     {BUZZER_NOTE_C5,                200,    " ditch"}, | ||||
|     {BUZZER_NOTE_C5,                200,    "  es  "}, | ||||
|     {BUZZER_NOTE_C5,                200,    " and  "}, | ||||
|     {BUZZER_NOTE_D5SHARP_E5FLAT,    500,    " burn "}, | ||||
|     {BUZZER_NOTE_REST,              10,     ""}, | ||||
|     {BUZZER_NOTE_C5,                200,    " thru "}, | ||||
|     {BUZZER_NOTE_C5,                200,    " the  "}, | ||||
|     {BUZZER_NOTE_C5,                200,    " Witch"}, | ||||
|     {BUZZER_NOTE_C5,                200,    "  es  "}, | ||||
|     {BUZZER_NOTE_C5,                200,    " 1    "}, | ||||
|     {BUZZER_NOTE_D5SHARP_E5FLAT,    500,    " S1aN7"}, | ||||
|     {BUZZER_NOTE_REST,              10,     ""}, | ||||
|     {BUZZER_NOTE_C5,                200,    " 1n   "}, | ||||
|     {BUZZER_NOTE_C5,                200,    " the  "}, | ||||
|     {BUZZER_NOTE_C5,                200,    " back "}, | ||||
|     {BUZZER_NOTE_C5,                200,    "  OF  "}, | ||||
|     {BUZZER_NOTE_C5,                300,    "  n&y "}, | ||||
|     {BUZZER_NOTE_REST,              20,     ""}, | ||||
|     {BUZZER_NOTE_D5SHARP_E5FLAT,    250,    " drAG "}, | ||||
|     {BUZZER_NOTE_F5,                400,    "   U  "}, | ||||
|     {BUZZER_NOTE_G5,                250,    "   LA "}, | ||||
|     {BUZZER_NOTE_F5,                600,    "    AA"}, | ||||
| 
 | ||||
|     {BUZZER_NOTE_REST,              50, ""}, | ||||
| }; | ||||
| 
 | ||||
| void cb_flash() { | ||||
|     watch_set_led_color(rand() % 128 + 127, rand() % 128); | ||||
| } | ||||
| 
 | ||||
| bool app_loop() { | ||||
|     if (movement_state.watch_face_changed) { | ||||
|         if (movement_state.settings.bit.button_should_sound) { | ||||
|             // low note for nonzero case, high note for return to watch_face 0
 | ||||
|             watch_buzzer_play_note(movement_state.next_watch_face ? BUZZER_NOTE_C7 : BUZZER_NOTE_C8, 50); | ||||
|             watch_buzzer_play_note(beeps[movement_state.note_count++], 50); | ||||
|             if (movement_state.note_count >= sizeof(beeps)) { | ||||
|                 movement_state.note_count = 0; | ||||
|                 movement_state.play_song = true; | ||||
|             } | ||||
|         } | ||||
|         watch_faces[movement_state.current_watch_face].resign(&movement_state.settings, watch_face_contexts[movement_state.current_watch_face]); | ||||
|         movement_state.current_watch_face = movement_state.next_watch_face; | ||||
| @ -132,6 +220,29 @@ bool app_loop() { | ||||
|         movement_state.watch_face_changed = false; | ||||
|     } | ||||
| 
 | ||||
|     if (movement_state.play_song) { | ||||
|         watch_faces[movement_state.current_watch_face].resign(&movement_state.settings, watch_face_contexts[movement_state.current_watch_face]); | ||||
|         watch_clear_display(); | ||||
|         movement_state.play_song = false; | ||||
|         for(size_t i = 0; i < sizeof(melody) / sizeof(melody[0]); i++) { | ||||
|             if(i == 7) { | ||||
|                 watch_enable_leds(); | ||||
|                 watch_rtc_register_periodic_callback(cb_flash, 8); | ||||
|             } | ||||
|             watch_display_string(melody[i].lyric, 4); | ||||
|             watch_buzzer_play_note(melody[i].note, melody[i].duration); | ||||
|             delay_ms(5); | ||||
|         } | ||||
|         watch_rtc_disable_periodic_callback(8); | ||||
|         watch_set_led_off(); | ||||
|         movement_state.current_watch_face = 0; | ||||
|         watch_faces[0].activate(&movement_state.settings, watch_face_contexts[0]); | ||||
|         movement_request_tick_frequency(1); | ||||
|         event.event_type = EVENT_ACTIVATE; | ||||
|         event.subsecond = 0; | ||||
|         movement_state.watch_face_changed = false; | ||||
|     } | ||||
| 
 | ||||
|     // if the LED is on and should be off, turn it off
 | ||||
|     if (movement_state.led_on && movement_state.light_ticks == 0) { | ||||
|         // unless the user is holding down the LIGHT button, in which case, give them more time.
 | ||||
| @ -146,6 +257,7 @@ bool app_loop() { | ||||
|     // if we have timed out of our timeout countdown, give the app a hint that they can resign.
 | ||||
|     if (movement_state.timeout_ticks == 0) { | ||||
|         event.event_type = EVENT_TIMEOUT; | ||||
|         movement_state.note_count = 0; | ||||
|     } | ||||
| 
 | ||||
|     // handle background tasks, if the alarm handler told us we need to
 | ||||
|  | ||||
| @ -180,6 +180,10 @@ typedef struct { | ||||
|     uint8_t tick_frequency; | ||||
|     uint8_t last_second; | ||||
|     uint8_t subsecond; | ||||
| 
 | ||||
|     // halloween stuff :)
 | ||||
|     bool play_song; | ||||
|     uint8_t note_count; | ||||
| } movement_state_t; | ||||
| 
 | ||||
| void movement_move_to_face(uint8_t watch_face_index); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user