#include "step4.h" static const char *TAG = "step4"; static int tone = 0; static int times = 0; static std::random_device rd; static std::mt19937 gen(rd()); static std::uniform_int_distribution<> tone_dist(0, 5); static std::uniform_int_distribution<> color_dist(0, 5); static uint8_t NEOPIXEL_COLORS[6][3] = { {20, 0, 0}, // red {20, 10, 0}, // orange {20, 20, 0}, // yellow {0, 20, 0}, // green {0, 0, 20}, // blue {20, 0, 20}, // purple }; static void play_tone(); static bool one_second(); static bool three_second(); static bool six_second(); void step4(void) { // start counting down module timer immediatly set_module_time(10*1000); start_module_timer(); while (get_module_time() > 0) vTaskDelay(pdMS_TO_TICKS(100)); while (times < 4) { tone = tone_dist(gen); play_tone(); switch (tone % 3) { case 0: if (one_second()) { times++; } break; case 1: if (three_second()) { times++; } break; case 2: if (six_second()) { times++; } break; } vTaskDelay(pdMS_TO_TICKS(1000)); } } static bool one_second() { set_module_time(30*1000); start_module_timer(); int speaker_indicator_color = color_dist(gen); while (get_module_time() > 0) { } return false; } static bool three_second() { return false; } static bool six_second() { return false; } static void play_tone() { switch (tone) { case 0: play_raw(MOUNT_POINT "/low-1.pcm"); break; case 1: play_raw(MOUNT_POINT "/low-3.pcm"); break; case 2: play_raw(MOUNT_POINT "/low-6.pcm"); break; case 3: play_raw(MOUNT_POINT "/high-1.pcm"); break; case 4: play_raw(MOUNT_POINT "/high-3.pcm"); break; case 5: play_raw(MOUNT_POINT "/high-6.pcm"); break; } }