Step 5
This commit is contained in:
parent
c7af67df36
commit
ee178f3340
1
.gitignore
vendored
1
.gitignore
vendored
@ -3,3 +3,4 @@ build/
|
|||||||
managed_components/
|
managed_components/
|
||||||
dependencies.lock
|
dependencies.lock
|
||||||
sdkconfig.old
|
sdkconfig.old
|
||||||
|
.cache/
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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 */
|
||||||
16
sdkconfig
16
sdkconfig
@ -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
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user