This commit is contained in:
Drake Marino 2024-08-07 00:11:53 -05:00
parent c7af67df36
commit ee178f3340
6 changed files with 132 additions and 23 deletions

1
.gitignore vendored
View File

@ -3,3 +3,4 @@ build/
managed_components/ managed_components/
dependencies.lock dependencies.lock
sdkconfig.old sdkconfig.old
.cache/

View File

@ -24,14 +24,14 @@ typedef enum {
rfid = 10, rfid = 10,
keypad = 11, keypad = 11,
char_lcd = 12, char_lcd = 12,
s4 = 13, switch4 = 13,
s3 = 14, switch3 = 14,
s2 = 15, switch2 = 15,
s1 = 16, switch1 = 16,
b1 = 17, button1 = 17,
b2 = 18, button2 = 18,
b3 = 19, button3 = 19,
b4 = 20, button4 = 20,
} Led; } Led;
void init_leds(void); void init_leds(void);

View File

@ -8,18 +8,18 @@ void init_sseg() {
sseg = new TM1640(SSEG_PIN_DATA, SSEG_PIN_CLK, 8); sseg = new TM1640(SSEG_PIN_DATA, SSEG_PIN_CLK, 8);
} }
void set_game_sseg_raw(uint8_t* digits) { void set_game_sseg_raw(const uint8_t* digits) {
sseg->setSegments(0, digits[0]); sseg->setSegments(digits[0], 0);
sseg->setSegments(1, digits[1]); sseg->setSegments(digits[1], 1);
sseg->setSegments(2, digits[2]); sseg->setSegments(digits[2], 2);
sseg->setSegments(3, digits[3]); sseg->setSegments(digits[3], 3);
} }
void set_module_sseg_raw(uint8_t* digits) { void set_module_sseg_raw(const uint8_t* digits) {
sseg->setSegments(4, digits[0]); sseg->setSegments(digits[0], 4);
sseg->setSegments(5, digits[1]); sseg->setSegments(digits[1], 5);
sseg->setSegments(6, digits[2]); sseg->setSegments(digits[2], 6);
sseg->setSegments(7, digits[3]); sseg->setSegments(digits[3], 7);
} }
void set_game_sseg_num(unsigned int value, int dot_pos) { void set_game_sseg_num(unsigned int value, int dot_pos) {

View File

@ -17,14 +17,14 @@ void init_sseg();
/// the bits 0-6 map to segments A-G, and bit 7 is DP. /// the bits 0-6 map to segments A-G, and bit 7 is DP.
/// ///
/// `digits` must have len >= 4. /// `digits` must have len >= 4.
void set_game_sseg_raw(uint8_t* digits); void set_game_sseg_raw(const uint8_t* digits);
/// sets the module seven segment to the value of the digits /// sets the module seven segment to the value of the digits
/// ///
/// the bits 0-6 map to segments A-G, and bit 7 is DP. /// the bits 0-6 map to segments A-G, and bit 7 is DP.
/// ///
/// `digits` must have len >= 4. /// `digits` must have len >= 4.
void set_module_sseg_raw(uint8_t* digits); void set_module_sseg_raw(const uint8_t* digits);
/// sets the game timer to the given number, with the dot at position `dot_pos` from the right (0 => right-most digit). /// sets the game timer to the given number, with the dot at position `dot_pos` from the right (0 => right-most digit).
void set_game_sseg_num(unsigned int value, int dot_pos); void set_game_sseg_num(unsigned int value, int dot_pos);

View File

@ -1,10 +1,106 @@
#ifndef STEP_5_HPP #ifndef STEP_5_HPP
#define STEP_5_HPP #define STEP_5_HPP
#include "../drivers/bottom_half.h"
#include <iostream>
#include <random>
static const char *STEP5_TAG = "step5"; static const char *STEP5_TAG = "step5";
Led speaker_led = speaker;
const uint8_t SSEG_NUMS[10] = {0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111};
const uint8_t SSEG_MAPS[5][4] = {
{0b0101101, 0b1111010, 0b1000010, 0b1010100},
{0b01000101, 0b00100100, 0b00110110, 0b01111011},
{0b00101010, 0b00000010, 0b00010111, 0b00111100},
{0b00111000, 0b01010010, 0b00101011, 0b00111010},
{0b01000111, 0b00011001, 0b01111000, 0b00111110}
};
const int INDICATOR_RED[5] = {60, 0, 0, 35, 20};
const int INDICATOR_GREEN[5] = {0, 0, 60, 25, 20};
const int INDICATOR_BLUE[5] = {0, 60, 0, 0, 20};
// random number generators
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> answer_dist(0, 9);
std::uniform_int_distribution<> map_dist(0, 4);
std::uniform_int_distribution<> display_dist(0, 3);
std::uniform_int_distribution<> random_segment_dist(0, 127);
int answer = 0;
uint8_t answer_sseg = SSEG_NUMS[0];
char answer_char = '0';
uint8_t display_map[4] = {0b00000000, 0b00000000, 0b00000000, 0b00000000};
int chosen_map = 0;
void new_puzzle(void) {
// scramble lights
for (int i = 0; i < 5; i++) {
led_strip_set_pixel(leds, speaker_led, INDICATOR_RED[map_dist(gen)], INDICATOR_GREEN[map_dist(gen)], INDICATOR_BLUE[map_dist(gen)]);
led_strip_refresh(leds);
uint8_t random_segments[4] = {0, 0, 0, 0};
for (int i = 0; i < 4; i++) {
random_segments[i] = random_segment_dist(gen);
}
set_module_sseg_raw(random_segments);
vTaskDelay(pdMS_TO_TICKS(100));
}
answer = answer_dist(gen);
answer_sseg = SSEG_NUMS[answer];
answer_char = '0' + answer;
// ESP_LOGI(STEP5_TAG, "Answer: %i", answer);
chosen_map = map_dist(gen);
for (int i = 0; i < 4; ++i) {
display_map[i] = SSEG_MAPS[chosen_map][i];
}
// ESP_LOGI(STEP5_TAG, "Chosen Map: %i", chosen_map);
ESP_ERROR_CHECK(led_strip_set_pixel(leds, speaker_led, INDICATOR_RED[chosen_map], INDICATOR_GREEN[chosen_map], INDICATOR_BLUE[chosen_map]));
ESP_ERROR_CHECK(led_strip_refresh(leds));
for (int i = 0; i < 8; i++) {
bool bit = (answer_sseg >> i) & 1;
if (bit == 1) {
// choose display and flip bit
int display = display_dist(gen);
display_map[display] ^= (1 << i);
// ESP_LOGI(STEP5_TAG, "Flipping bit %i on display %i", i, display);
}
}
}
void step5(void) { void step5(void) {
KeypadKey key;
int solved_times = 0;
new_puzzle();
while(solved_times < 3) {
// for every bit in the answer-
set_module_sseg_raw(display_map);
if (get_pressed_keypad(&key)) {
char c = char_of_keypad_key(key);
// ESP_LOGI(STEP0_TAG, "Pressed: %c", c);
if (c == answer_char) {
solved_times++;
if (solved_times < 3) {
new_puzzle();
} else {
uint8_t display_tmp[4] = {0b00000000, 0b00000000, 0b00000000, 0b00000000};
set_module_sseg_raw(display_tmp);
}
} else {
strike("Incorrect Character!");
}
}
vTaskDelay(pdMS_TO_TICKS(10));
}
} }
#endif /* STEP_5_HPP */ #endif /* STEP_5_HPP */

View File

@ -1,6 +1,6 @@
# #
# Automatically generated file. DO NOT EDIT. # Automatically generated file. DO NOT EDIT.
# Espressif IoT Development Framework (ESP-IDF) 5.2.1 Project Configuration # Espressif IoT Development Framework (ESP-IDF) 5.2.2 Project Configuration
# #
CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000
CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 CONFIG_SOC_MPU_REGIONS_MAX_NUM=8
@ -331,6 +331,7 @@ CONFIG_SOC_WIFI_WAPI_SUPPORT=y
CONFIG_SOC_WIFI_CSI_SUPPORT=y CONFIG_SOC_WIFI_CSI_SUPPORT=y
CONFIG_SOC_WIFI_MESH_SUPPORT=y CONFIG_SOC_WIFI_MESH_SUPPORT=y
CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y CONFIG_SOC_WIFI_SUPPORT_VARIABLE_BEACON_WINDOW=y
CONFIG_SOC_WIFI_PHY_NEEDS_USB_WORKAROUND=y
CONFIG_SOC_BLE_SUPPORTED=y CONFIG_SOC_BLE_SUPPORTED=y
CONFIG_SOC_BLE_MESH_SUPPORTED=y CONFIG_SOC_BLE_MESH_SUPPORTED=y
CONFIG_SOC_BLE_50_SUPPORTED=y CONFIG_SOC_BLE_50_SUPPORTED=y
@ -435,6 +436,7 @@ CONFIG_ESP_ROM_HAS_RETARGETABLE_LOCKING=y
CONFIG_ESP_ROM_USB_OTG_NUM=3 CONFIG_ESP_ROM_USB_OTG_NUM=3
CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=4 CONFIG_ESP_ROM_USB_SERIAL_DEVICE_NUM=4
CONFIG_ESP_ROM_HAS_ERASE_0_REGION_BUG=y CONFIG_ESP_ROM_HAS_ERASE_0_REGION_BUG=y
CONFIG_ESP_ROM_HAS_ENCRYPTED_WRITES_USING_LEGACY_DRV=y
CONFIG_ESP_ROM_GET_CLK_FREQ=y CONFIG_ESP_ROM_GET_CLK_FREQ=y
CONFIG_ESP_ROM_HAS_HAL_WDT=y CONFIG_ESP_ROM_HAS_HAL_WDT=y
CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y
@ -557,6 +559,7 @@ CONFIG_APPTRACE_LOCK_ENABLE=y
# Bluetooth # Bluetooth
# #
# CONFIG_BT_ENABLED is not set # CONFIG_BT_ENABLED is not set
CONFIG_BT_ALARM_MAX_NUM=50
# end of Bluetooth # end of Bluetooth
# #
@ -744,7 +747,10 @@ CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y
# #
# GDB Stub # GDB Stub
# #
CONFIG_ESP_GDBSTUB_ENABLED=y
# CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set # CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set
CONFIG_ESP_GDBSTUB_SUPPORT_TASKS=y
CONFIG_ESP_GDBSTUB_MAX_TASKS=32
# end of GDB Stub # end of GDB Stub
# #
@ -909,6 +915,7 @@ CONFIG_ESP_PHY_RF_CAL_PARTIAL=y
# CONFIG_ESP_PHY_RF_CAL_NONE is not set # CONFIG_ESP_PHY_RF_CAL_NONE is not set
# CONFIG_ESP_PHY_RF_CAL_FULL is not set # CONFIG_ESP_PHY_RF_CAL_FULL is not set
CONFIG_ESP_PHY_CALIBRATION_MODE=0 CONFIG_ESP_PHY_CALIBRATION_MODE=0
# CONFIG_ESP_PHY_PLL_TRACK_DEBUG is not set
# end of PHY # end of PHY
# #
@ -1206,6 +1213,7 @@ CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0
CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=1 CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=1
# CONFIG_FREERTOS_USE_TRACE_FACILITY is not set # CONFIG_FREERTOS_USE_TRACE_FACILITY is not set
# CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set # CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set
# CONFIG_FREERTOS_USE_APPLICATION_TASK_TAG is not set
# end of Kernel # end of Kernel
# #
@ -1493,7 +1501,9 @@ CONFIG_MBEDTLS_CMAC_C=y
CONFIG_MBEDTLS_HARDWARE_AES=y CONFIG_MBEDTLS_HARDWARE_AES=y
CONFIG_MBEDTLS_AES_USE_INTERRUPT=y CONFIG_MBEDTLS_AES_USE_INTERRUPT=y
CONFIG_MBEDTLS_AES_INTERRUPT_LEVEL=0 CONFIG_MBEDTLS_AES_INTERRUPT_LEVEL=0
# CONFIG_MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER is not set
CONFIG_MBEDTLS_HARDWARE_MPI=y CONFIG_MBEDTLS_HARDWARE_MPI=y
# CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set
CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y
CONFIG_MBEDTLS_MPI_INTERRUPT_LEVEL=0 CONFIG_MBEDTLS_MPI_INTERRUPT_LEVEL=0
CONFIG_MBEDTLS_HARDWARE_SHA=y CONFIG_MBEDTLS_HARDWARE_SHA=y
@ -1580,7 +1590,7 @@ CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM=y
# CONFIG_MBEDTLS_CHACHA20_C is not set # CONFIG_MBEDTLS_CHACHA20_C is not set
# CONFIG_MBEDTLS_HKDF_C is not set # CONFIG_MBEDTLS_HKDF_C is not set
# CONFIG_MBEDTLS_THREADING_C is not set # CONFIG_MBEDTLS_THREADING_C is not set
# CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set CONFIG_MBEDTLS_ERROR_STRINGS=y
# end of mbedTLS # end of mbedTLS
# #
@ -2222,6 +2232,8 @@ CONFIG_ESP32_APPTRACE_LOCK_ENABLE=y
# CONFIG_EVENT_LOOP_PROFILING is not set # CONFIG_EVENT_LOOP_PROFILING is not set
CONFIG_POST_EVENTS_FROM_ISR=y CONFIG_POST_EVENTS_FROM_ISR=y
CONFIG_POST_EVENTS_FROM_IRAM_ISR=y CONFIG_POST_EVENTS_FROM_IRAM_ISR=y
CONFIG_GDBSTUB_SUPPORT_TASKS=y
CONFIG_GDBSTUB_MAX_TASKS=32
# CONFIG_OTA_ALLOW_HTTP is not set # CONFIG_OTA_ALLOW_HTTP is not set
# CONFIG_ESP_SYSTEM_PD_FLASH is not set # CONFIG_ESP_SYSTEM_PD_FLASH is not set
CONFIG_ESP32S3_DEEP_SLEEP_WAKEUP_DELAY=2000 CONFIG_ESP32S3_DEEP_SLEEP_WAKEUP_DELAY=2000