WIP
This commit is contained in:
		
							parent
							
								
									f1a706792e
								
							
						
					
					
						commit
						e3416272cb
					
				
							
								
								
									
										194
									
								
								apps/Sensor Watch Halloween Demo/app.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										194
									
								
								apps/Sensor Watch Halloween Demo/app.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,194 @@ | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| #include "watch.h" | ||||
| 
 | ||||
| typedef struct { | ||||
|     bool beep; | ||||
|     bool play; | ||||
|     uint8_t press_count; | ||||
| } ApplicationState; | ||||
| 
 | ||||
| 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,    " and  "}, | ||||
|     {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, ""}, | ||||
| 
 | ||||
|     {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,    " and  "}, | ||||
|     {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"}, | ||||
| 
 | ||||
| }; | ||||
| 
 | ||||
| ApplicationState application_state; | ||||
| 
 | ||||
| void cb_tick() { | ||||
|     watch_set_led_color(rand() % 128 + 127, rand() % 128); | ||||
| } | ||||
| 
 | ||||
| void cb_alarm_pressed() { | ||||
|     application_state.beep = true; | ||||
| } | ||||
| 
 | ||||
| void app_init() { | ||||
|     memset(&application_state, 0, sizeof(application_state)); | ||||
| } | ||||
| 
 | ||||
| void app_wake_from_backup() { | ||||
| } | ||||
| 
 | ||||
| void app_setup() { | ||||
|     watch_enable_external_interrupts(); | ||||
|     watch_register_interrupt_callback(BTN_MODE, cb_alarm_pressed, INTERRUPT_TRIGGER_RISING); | ||||
| 
 | ||||
|     watch_enable_display(); | ||||
|     application_state.play = false; | ||||
| 
 | ||||
|     watch_enable_buzzer(); | ||||
|     watch_set_indicator(WATCH_INDICATOR_PM); | ||||
|     watch_set_colon(); | ||||
|     watch_display_string("    1117  ", 0); | ||||
| } | ||||
| 
 | ||||
| void app_prepare_for_standby() { | ||||
| } | ||||
| 
 | ||||
| void app_wake_from_standby() { | ||||
| } | ||||
| 
 | ||||
| bool app_loop() { | ||||
|     if (application_state.beep) { | ||||
|         watch_buzzer_play_note(beeps[application_state.press_count++], 50); | ||||
|         if (application_state.press_count % 2) { | ||||
|             watch_clear_indicator(WATCH_INDICATOR_PM); | ||||
|             watch_set_colon(); | ||||
|             watch_display_string("ST  000000", 0); | ||||
|         } else { | ||||
|             watch_set_indicator(WATCH_INDICATOR_PM); | ||||
|             watch_set_colon(); | ||||
|             watch_display_string("    1117  ", 0); | ||||
|         } | ||||
|         if (application_state.press_count >= sizeof(beeps)) { | ||||
|             application_state.press_count = 0; | ||||
|             application_state.play = true; | ||||
|         } | ||||
|         application_state.beep = false; | ||||
|     } | ||||
|     if (application_state.play) { | ||||
|         watch_clear_display(); | ||||
|         application_state.play = 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_tick, 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(); | ||||
|         watch_set_indicator(WATCH_INDICATOR_PM); | ||||
|         watch_set_colon(); | ||||
|         watch_display_string("    1117  ", 0); | ||||
|     } | ||||
| 
 | ||||
|     return true; | ||||
| } | ||||
							
								
								
									
										1
									
								
								apps/Sensor Watch Halloween Demo/make/.gitignore
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										1
									
								
								apps/Sensor Watch Halloween Demo/make/.gitignore
									
									
									
									
										vendored
									
									
										Executable file
									
								
							| @ -0,0 +1 @@ | ||||
| build/ | ||||
							
								
								
									
										10
									
								
								apps/Sensor Watch Halloween Demo/make/Makefile
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										10
									
								
								apps/Sensor Watch Halloween Demo/make/Makefile
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,10 @@ | ||||
| TOP = ../../.. | ||||
| include $(TOP)/make.mk | ||||
| 
 | ||||
| INCLUDES += \
 | ||||
|   -I../ | ||||
| 
 | ||||
| SRCS += \
 | ||||
|   ../app.c | ||||
| 
 | ||||
| include $(TOP)/rules.mk | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user