16 {
17 mode_manager_ = mode_manager;
18 gui_ = gui;
19 buzzer_ = buzzer;
20 startTimerCallback_ = std::move(startTimerCallback);
21 stopTimerCallback_ = std::move(stopTimerCallback);
22
23
24 inference->RegisterDataCallback([this](ModelOutput result) {
25 std::cout << "New Gesture: " << LABELS.find(result)->second << '\n';
26
27
28 buzzer_->
PlayNote(PWM::NoteName::C, 7, 300);
29
30
31 auto mode = mode_manager_->GetMode();
32 bool landscape = mode_manager_->IsLandscape();
33
34
35 switch (result) {
36 case ModelOutput::TILT_RIGHT:
37
38 if (mode == ModeManager::Mode::TIMER &&
39 !mode_manager_->IsTimerRunning()) {
40 mode_manager_->AdjustTimer(+300);
41 }
42
43 else if (mode == ModeManager::Mode::TIME && !landscape) {
44 mode_manager_->SetLandscape(true);
45 }
46
47
48 else if (mode == ModeManager::Mode::TIMER && !landscape &&
49 mode_manager_->IsTimerRunning()) {
50 mode_manager_->SetLandscape(true);
51 gui_->SandDisable();
52 }
53 break;
54
55 case ModelOutput::TILT_LEFT:
56
57 if (mode == ModeManager::Mode::TIMER &&
58 !mode_manager_->IsTimerRunning()) {
59 mode_manager_->AdjustTimer(-300);
60 }
61
62 else if (mode == ModeManager::Mode::TIME && landscape) {
63 mode_manager_->SetLandscape(false);
64 }
65
66
67 else if (mode == ModeManager::Mode::TIMER && landscape &&
68 mode_manager_->IsTimerRunning()) {
69 mode_manager_->SetLandscape(false);
71 }
72 break;
73
74 case ModelOutput::SHAKE_FORWARD:
75
76 if (mode == ModeManager::Mode::TIMER &&
77 !mode_manager_->IsTimerRunning()) {
78 startTimerCallback_(mode_manager_->GetRemainingTimerSeconds());
79 }
80 break;
81
82 case ModelOutput::SHAKE_BACKWARD:
83
84 if (mode == ModeManager::Mode::TIMER) {
85 stopTimerCallback_();
87 }
88 break;
89
90 default:
91 break;
92 }
93 });
94 }
void SandDisable()
Disable sand simulation.
void SandEnable()
Enable sand simulation.
void PlayNote(NoteName note, uint32_t octave, uint32_t duration_ms)
Play a musical note based on note name and octave.