blk_box_tc/main/steps/step6.hpp
2024-08-06 23:47:47 -05:00

66 lines
1.6 KiB
C++

#ifndef STEP_6_HPP
#define STEP_6_HPP
#include "wires_puzzle.h"
#include "drivers/wires.h"
#include "drivers/bottom_half.h"
static const char *STEP6_TAG = "step6";
static uint8_t cut_wires = 0;
static void correct_wire_task(void *arg);
void step6(void) {
get_cut_wires();
clear_all_pressed_released();
WireColor wires[NUM_WIRES];
load_wires_from_sd_card(wires);
bool solution[NUM_WIRES] = {0};
solve_wires(wires, solution);
while (1) {
uint8_t new_cut_wires = get_cut_wires();
uint8_t just_cut_wires = new_cut_wires & ~cut_wires;
cut_wires |= new_cut_wires;
for (int i = 0; i < NUM_WIRES; i++) {
if (just_cut_wires & (1<<i)) {
// ESP_LOGI(STEP6_TAG, "Wire %d cut", i);
if (solution[i]) {
xTaskCreate(correct_wire_task, "correct_wire", 4096, NULL, 5, NULL);
// ESP_LOGI(STEP6_TAG, "correct wire");
} else {
strike("Cut wrong wire");
}
}
}
if (get_touch_pressed()) {
bool correct = true;
for (int i = 0; i < NUM_WIRES; i++) {
bool wire_cut = (cut_wires & (1<<i)) != 0;
if (solution[i] && !wire_cut) {
correct = false;
}
}
if (correct) {
return;
} else {
strike("Not all wires are cut!");
}
}
vTaskDelay(pdMS_TO_TICKS(10));
}
}
static void correct_wire_task(void *arg) {
ESP_LOGI(STEP6_TAG, "Correct!");
vTaskDelete(NULL);
}
#endif /* STEP_6_HPP */