From 159b8201fecf25d505dd28403dc24736c2529d74 Mon Sep 17 00:00:00 2001 From: drake Date: Mon, 12 Aug 2024 13:41:35 -0500 Subject: [PATCH] step 3 fixes --- main/steps/step3.cpp | 126 +++++++++++++++++++++++++++---------------- 1 file changed, 80 insertions(+), 46 deletions(-) diff --git a/main/steps/step3.cpp b/main/steps/step3.cpp index 2c5a3d7..89f3f41 100644 --- a/main/steps/step3.cpp +++ b/main/steps/step3.cpp @@ -62,12 +62,14 @@ void step3(void) { int last_cycle_tick = xTaskGetTickCount(); int scrambled_times = 0; - std::vector led_options = all_leds; while (scrambled_times < 5) { - if (xTaskGetTickCount() - last_cycle_tick > 50) { + if ((xTaskGetTickCount() - last_cycle_tick) > pdMS_TO_TICKS(100)) { + clean_bomb(); + std::vector led_options = all_leds; set_unique_leds_random_color(led_options, led_number_dist(gen), INDICATOR_RED, INDICATOR_GREEN, INDICATOR_BLUE); - led_strip_refresh(leds); + ESP_ERROR_CHECK(led_strip_refresh(leds)); last_cycle_tick = xTaskGetTickCount(); + scrambled_times++; } } @@ -138,6 +140,8 @@ void step3(void) { const int INDICATOR_BLUE[6] = {0, 10, 0, 0, 5, 5}; set_unique_leds_random_color(indicator_options, indicators_num, INDICATOR_RED, INDICATOR_BLUE, INDICATOR_GREEN); + + ESP_ERROR_CHECK(led_strip_refresh(leds)); // ESP_LOGI(TAG, "puzzle 1 LEDs set (%i leds)", indicators_num); if (indicators_num < 18) { @@ -312,11 +316,11 @@ void step3(void) { set_module_time(20000); start_module_timer(); - const int COLOR_RED[4] = {0, 20, 10, 0}; - const int COLOR_GREEN[4] = {20, 0, 10, 0}; - const int COLOR_BLUE[4] = {0, 0, 0, 20}; + const int COLOR_RED[5] = {0, 20, 10, 0, 0}; + const int COLOR_GREEN[5] = {20, 0, 10, 0, 0}; + const int COLOR_BLUE[5] = {0, 0, 0, 20, 0}; - static std::uniform_int_distribution<> color_dist(0, 3); + static std::uniform_int_distribution<> color_dist(0, 4); int tft_color = color_dist(gen); int speaker_color = color_dist(gen); @@ -380,16 +384,11 @@ void step3(void) { const int BUTTON_COLOR_BLUE[4] = {0, 0, 0, 10}; static std::uniform_int_distribution<> button_color_dist(0, 3); + int button_colors[4] = {button_color_dist(gen), button_color_dist(gen), button_color_dist(gen), button_color_dist(gen)}; - int b1_color = button_color_dist(gen); - int b2_color = button_color_dist(gen); - int b3_color = button_color_dist(gen); - int b4_color = button_color_dist(gen); - - ESP_ERROR_CHECK(led_strip_set_pixel(leds, 20, BUTTON_COLOR_RED[b1_color], BUTTON_COLOR_GREEN[b1_color], BUTTON_COLOR_BLUE[b1_color])); - ESP_ERROR_CHECK(led_strip_set_pixel(leds, 19, BUTTON_COLOR_RED[b2_color], BUTTON_COLOR_GREEN[b2_color], BUTTON_COLOR_BLUE[b2_color])); - ESP_ERROR_CHECK(led_strip_set_pixel(leds, 18, BUTTON_COLOR_RED[b3_color], BUTTON_COLOR_GREEN[b3_color], BUTTON_COLOR_BLUE[b3_color])); - ESP_ERROR_CHECK(led_strip_set_pixel(leds, 17, BUTTON_COLOR_RED[b4_color], BUTTON_COLOR_GREEN[b4_color], BUTTON_COLOR_BLUE[b4_color])); + for (int i = 0; i < 4; i++) { + ESP_ERROR_CHECK(led_strip_set_pixel(leds, (20 - i), BUTTON_COLOR_RED[button_colors[i]], BUTTON_COLOR_GREEN[button_colors[i]], BUTTON_COLOR_BLUE[button_colors[i]])); + } // switches const int SWITCH_COLOR_RED[3] = {20, 0, 10}; @@ -406,47 +405,81 @@ void step3(void) { ESP_ERROR_CHECK(led_strip_refresh(leds)); ButtonKey button; + SwitchKey switch_key; uint8_t starting_switch_state = get_switch_state(); while (1) { if (get_pressed_button(&button)) { uint8_t button_state = get_button_state(); + for (int i = 0; i < 4; i++) { + if (((button_state >> i) & 0b1) == 0b1) { + button_colors[i]++; + if (button_colors[i] > 3) { + button_colors[i] = 0; + } + ESP_ERROR_CHECK(led_strip_set_pixel(leds, (20 - i), BUTTON_COLOR_RED[button_colors[i]], BUTTON_COLOR_GREEN[button_colors[i]], BUTTON_COLOR_BLUE[button_colors[i]])); + } - // change button colors - if ((button_state & 0b1) == 0b1) { - b1_color++; - if (b1_color > 3) { - b1_color = 0; - } - ESP_ERROR_CHECK(led_strip_set_pixel(leds, 20, BUTTON_COLOR_RED[b1_color], BUTTON_COLOR_GREEN[b1_color], BUTTON_COLOR_BLUE[b1_color])); - } - if ((button_state & 0b10) == 0b10) { - b2_color++; - if (b2_color > 3) { - b2_color = 0; - } - ESP_ERROR_CHECK(led_strip_set_pixel(leds, 19, BUTTON_COLOR_RED[b2_color], BUTTON_COLOR_GREEN[b2_color], BUTTON_COLOR_BLUE[b2_color])); - } - if ((button_state & 0b100) == 0b100) { - b3_color++; - if (b3_color > 3) { - b3_color = 0; - } - ESP_ERROR_CHECK(led_strip_set_pixel(leds, 18, BUTTON_COLOR_RED[b3_color], BUTTON_COLOR_GREEN[b3_color], BUTTON_COLOR_BLUE[b3_color])); - } - if ((button_state & 0b1000) == 0b1000) { - b4_color++; - if (b4_color > 3) { - b4_color = 0; - } - ESP_ERROR_CHECK(led_strip_set_pixel(leds, 17, BUTTON_COLOR_RED[b4_color], BUTTON_COLOR_GREEN[b4_color], BUTTON_COLOR_BLUE[b4_color])); } ESP_ERROR_CHECK(led_strip_refresh(leds)); + + if (button_colors[0] == 0 && button_colors[1] == 1 && button_colors[2] == 2 && button_colors[3] == 3) { + // check switch state + uint8_t switch_state = get_switch_state(); + bool correct = true; + + for (int i = 0; i < 4; i++) { + if (switch_colors[i] == 2) { + if ((((switch_state ^ starting_switch_state) >> i) & 0b1) != 1) { + correct = false; + break; + } + } else { + if (((switch_state >> i) & 0b1) != (switch_colors[i] & 0b1)) { + correct = false; + break; + } + } + } + + if (correct) { + solved_puzzles++; + solved_correctly = true; + break; + } + } + } + if (get_flipped_switch(&switch_key)) { + if (button_colors[0] == 0 && button_colors[1] == 1 && button_colors[2] == 2 && button_colors[3] == 3) { + // check switch state + uint8_t switch_state = get_switch_state(); + bool correct = true; + + for (int i = 0; i < 4; i++) { + if (switch_colors[i] == 2) { + if ((((switch_state ^ starting_switch_state) >> i) & 0b1) != 1) { + correct = false; + break; + } + } else { + if (((switch_state >> i) & 0b1) != (switch_colors[i] & 0b1)) { + correct = false; + break; + } + } + } + + if (correct) { + solved_puzzles++; + solved_correctly = true; + break; + } + } } if (get_module_time() <= 0) { // check button state - if (b1_color == 0 && b2_color == 1 && b3_color == 2 && b4_color == 3) { + if (button_colors[0] == 0 && button_colors[1] == 1 && button_colors[2] == 2 && button_colors[3] == 3) { // check switch state uint8_t switch_state = get_switch_state(); bool correct = true; @@ -680,9 +713,9 @@ void step3(void) { int expression_answer = -1; std::string display_expression; - std::vector possible_math_operations = {0, 1, 2, 3}; while (expression_answer < 0) { math_numbers = {static_cast(math_number_dist(gen)), static_cast(math_number_dist(gen)), static_cast(math_number_dist(gen)), static_cast(math_number_dist(gen))}; + std::vector possible_math_operations = {0, 1, 2, 3}; math_operations = unique_values(possible_math_operations, 3); display_expression = std::to_string(static_cast(math_numbers[0])); @@ -910,6 +943,7 @@ void step3(void) { } + stop_module_timer(); if (solved_correctly) { play_raw(MOUNT_POINT "/correct.pcm"); vTaskDelay(pdMS_TO_TICKS(500));