diff options
| -rw-r--r-- | main/puzzle/neo/arduino-neopuzzle/arduino-neopuzzle.ino | 84 | ||||
| -rw-r--r-- | main/puzzle/neo/esp-neopuzzle/.devcontainer/Dockerfile | 47 | ||||
| -rw-r--r-- | main/puzzle/neo/esp-neopuzzle/.devcontainer/devcontainer.json | 45 | ||||
| -rw-r--r-- | main/puzzle/neo/esp-neopuzzle/.vscode/c_cpp_properties.json | 27 | ||||
| -rw-r--r-- | main/puzzle/neo/esp-neopuzzle/.vscode/launch.json | 10 | ||||
| -rw-r--r-- | main/puzzle/neo/esp-neopuzzle/.vscode/settings.json | 17 | ||||
| -rw-r--r-- | main/puzzle/neo/esp-neopuzzle/.vscode/tasks.json | 259 | ||||
| -rw-r--r-- | main/puzzle/neo/esp-neopuzzle/CMakeLists.txt | 8 | ||||
| -rw-r--r-- | main/puzzle/neo/esp-neopuzzle/README.md | 35 | ||||
| -rw-r--r-- | main/puzzle/neo/esp-neopuzzle/main/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | main/puzzle/neo/esp-neopuzzle/main/main.c | 85 | ||||
| -rw-r--r-- | main/puzzle/neo/neo.cpp | 100 | 
12 files changed, 0 insertions, 719 deletions
diff --git a/main/puzzle/neo/arduino-neopuzzle/arduino-neopuzzle.ino b/main/puzzle/neo/arduino-neopuzzle/arduino-neopuzzle.ino deleted file mode 100644 index 8febdea..0000000 --- a/main/puzzle/neo/arduino-neopuzzle/arduino-neopuzzle.ino +++ /dev/null @@ -1,84 +0,0 @@ -#include <Wire.h> -#include <Adafruit_NeoTrellis.h> - -#define MATRIX_SIZE 8 -#define INT_PIN 5 // Interrupt pin for the NeoTrellis - -enum NeoState { -    NEO_UNINITIALIZED, -    NEO_PLAYING, -    NEO_SOLVED -}; - -Adafruit_NeoTrellis trellis; -NeoState neoState = NEO_UNINITIALIZED; - -// Initialize the NeoTrellis matrix -void initializeNeoMatrix() { -    if (!trellis.begin()) { -        Serial.println("Failed to initialize NeoTrellis"); -        while (1); // Hold here if initialization fails -    } - -    // Set all buttons to listen for presses and releases -    for (int i = 0; i < MATRIX_SIZE; i++) { -        for (int j = 0; j < MATRIX_SIZE; j++) { -            trellis.activateKey(i * MATRIX_SIZE + j, SEESAW_KEYPAD_EDGE_RISING, true); -            trellis.activateKey(i * MATRIX_SIZE + j, SEESAW_KEYPAD_EDGE_FALLING, true); -            trellis.setPixelColor(i * MATRIX_SIZE + j, 0x000000); // Turn off LED -        } -    } -    trellis.show(); -    neoState = NEO_PLAYING; -} - -// Callback to handle button presses -void buttonCallback(uint8_t x) { -    uint8_t i = x / MATRIX_SIZE; -    uint8_t j = x % MATRIX_SIZE; - -    // Toggle the central button and adjacent LEDs -    toggleAdjacentLEDs(i, j); -    if (isNeoPuzzleSolved()) { -        neoState = NEO_SOLVED; -        Serial.println("The NeoTrellis puzzle is solved!"); -        // Additional actions upon solving the puzzle can go here -    } -    trellis.show(); -} - -void toggleAdjacentLEDs(int x, int y) { -    int idx = x * MATRIX_SIZE + y; -    trellis.setPixelColor(idx, trellis.getPixelColor(idx) ^ 0xFFFFFF); // Toggle LED color - -    // Toggle adjacent LEDs -    if (x > 0) trellis.setPixelColor((x-1) * MATRIX_SIZE + y, trellis.getPixelColor((x-1) * MATRIX_SIZE + y) ^ 0xFFFFFF); -    if (x < MATRIX_SIZE - 1) trellis.setPixelColor((x+1) * MATRIX_SIZE + y, trellis.getPixelColor((x+1) * MATRIX_SIZE + y) ^ 0xFFFFFF); -    if (y > 0) trellis.setPixelColor(x * MATRIX_SIZE + (y-1), trellis.getPixelColor(x * MATRIX_SIZE + (y-1)) ^ 0xFFFFFF); -    if (y < MATRIX_SIZE - 1) trellis.setPixelColor(x * MATRIX_SIZE + (y+1), trellis.getPixelColor(x * MATRIX_SIZE + (y+1)) ^ 0xFFFFFF); -} - -bool isNeoPuzzleSolved() { -    for (int i = 0; i < MATRIX_SIZE; i++) { -        for (int j = 0; j < MATRIX_SIZE; j++) { -            if (trellis.getPixelColor(i * MATRIX_SIZE + j) != 0x000000) return false; // If any LED is on, puzzle is not solved -        } -    } -    return true; -} - -void setup() { -    Serial.begin(115200); -    trellis.begin(INT_PIN); -    trellis.setBrightness(50); // Set brightness of LEDs (0-255) -    initializeNeoMatrix(); -    trellis.registerCallback(buttonCallback); -} - -void loop() { -    if (neoState == NEO_PLAYING) { -        if (trellis.read()) { // If there was a button event -            trellis.show(); // Update the display -        } -    } -} diff --git a/main/puzzle/neo/esp-neopuzzle/.devcontainer/Dockerfile b/main/puzzle/neo/esp-neopuzzle/.devcontainer/Dockerfile deleted file mode 100644 index 1fe78dc..0000000 --- a/main/puzzle/neo/esp-neopuzzle/.devcontainer/Dockerfile +++ /dev/null @@ -1,47 +0,0 @@ -FROM espressif/idf - -ARG DEBIAN_FRONTEND=nointeractive -ARG CONTAINER_USER=esp -ARG USER_UID=1000 -ARG USER_GID=$USER_UID - -RUN apt-get update \ -  && apt install -y -q \ -  cmake \ -  git \ -  libglib2.0-0 \ -  libnuma1 \ -  libpixman-1-0 \ -  && rm -rf /var/lib/apt/lists/* - -# QEMU -ENV QEMU_REL=esp_develop_8.2.0_20240122 -ENV QEMU_SHA256=e7c72ef5705ad1444d391711088c8717fc89f42e9bf6d1487f9c2a326b8cfa83 -ENV QEMU_DIST=qemu-xtensa-softmmu-${QEMU_REL}-x86_64-linux-gnu.tar.xz -ENV QEMU_URL=https://github.com/espressif/qemu/releases/download/esp-develop-8.2.0-20240122/${QEMU_DIST} - -ENV LC_ALL=C.UTF-8 -ENV LANG=C.UTF-8 - -RUN wget --no-verbose ${QEMU_URL} \ -  && echo "${QEMU_SHA256} *${QEMU_DIST}" | sha256sum --check --strict - \ -  && tar -xf $QEMU_DIST -C /opt \ -  && rm ${QEMU_DIST} - -ENV PATH=/opt/qemu/bin:${PATH} - -RUN groupadd --gid $USER_GID $CONTAINER_USER \ -  && adduser --uid $USER_UID --gid $USER_GID --disabled-password --gecos "" ${CONTAINER_USER} \ -  && usermod -a -G root $CONTAINER_USER && usermod -a -G dialout $CONTAINER_USER - -RUN chmod -R 775 /opt/esp/python_env/ - -USER ${CONTAINER_USER} -ENV USER=${CONTAINER_USER} -WORKDIR /home/${CONTAINER_USER} - -RUN echo "source /opt/esp/idf/export.sh > /dev/null 2>&1" >> ~/.bashrc - -ENTRYPOINT [ "/opt/esp/entrypoint.sh" ] - -CMD ["/bin/bash", "-c"]
\ No newline at end of file diff --git a/main/puzzle/neo/esp-neopuzzle/.devcontainer/devcontainer.json b/main/puzzle/neo/esp-neopuzzle/.devcontainer/devcontainer.json deleted file mode 100644 index 1d913ec..0000000 --- a/main/puzzle/neo/esp-neopuzzle/.devcontainer/devcontainer.json +++ /dev/null @@ -1,45 +0,0 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: -// https://github.com/microsoft/vscode-dev-containers/tree/v0.183.0/containers/ubuntu -{ -	"name": "ESP-IDF QEMU", -	"build": { -		"dockerfile": "Dockerfile" -	}, -	// Add the IDs of extensions you want installed when the container is created -	"workspaceMount": "source=${localWorkspaceFolder},target=${localWorkspaceFolder},type=bind", -	/* the path of workspace folder to be opened after container is running -	 */ -	"workspaceFolder": "${localWorkspaceFolder}", -	"mounts": [ -		"source=extensionCache,target=/root/.vscode-server/extensions,type=volume" -	], -	"customizations": { -		"vscode": { -			"settings": { -				"terminal.integrated.defaultProfile.linux": "bash", -				"idf.espIdfPath": "/opt/esp/idf", -				"idf.customExtraPaths": "", -				"idf.pythonBinPath": "/opt/esp/python_env/idf5.3_py3.10_env/bin/python", -				"idf.toolsPath": "/opt/esp", -				"idf.gitPath": "/usr/bin/git" -			}, -			"extensions": [ -				"espressif.esp-idf-extension" -			], -		}, -		"codespaces": { -			"settings": { -				"terminal.integrated.defaultProfile.linux": "bash", -				"idf.espIdfPath": "/opt/esp/idf", -				"idf.customExtraPaths": "", -				"idf.pythonBinPath": "/opt/esp/python_env/idf5.3_py3.10_env/bin/python", -				"idf.toolsPath": "/opt/esp", -				"idf.gitPath": "/usr/bin/git" -			}, -			"extensions": [ -				"espressif.esp-idf-extension" -			], -		} -	}, -	"runArgs": ["--privileged"] -}
\ No newline at end of file diff --git a/main/puzzle/neo/esp-neopuzzle/.vscode/c_cpp_properties.json b/main/puzzle/neo/esp-neopuzzle/.vscode/c_cpp_properties.json deleted file mode 100644 index ee1cac1..0000000 --- a/main/puzzle/neo/esp-neopuzzle/.vscode/c_cpp_properties.json +++ /dev/null @@ -1,27 +0,0 @@ -{ -    "configurations": [ -        { -            "name": "ESP-IDF", -            "compilerPath": "${config:idf.toolsPathWin}\\tools\\xtensa-esp-elf\\esp-13.2.0_20230928\\xtensa-esp-elf\\bin\\xtensa-esp32-elf-gcc.exe", -            "compileCommands": "${workspaceFolder}/build/compile_commands.json", -            "includePath": [ -                "${config:idf.espIdfPath}/components/**", -                "${config:idf.espIdfPathWin}/components/**", -                "${config:idf.espAdfPath}/components/**", -                "${config:idf.espAdfPathWin}/components/**", -                "${workspaceFolder}/**" -            ], -            "browse": { -                "path": [ -                    "${config:idf.espIdfPath}/components", -                    "${config:idf.espIdfPathWin}/components", -                    "${config:idf.espAdfPath}/components/**", -                    "${config:idf.espAdfPathWin}/components/**", -                    "${workspaceFolder}" -                ], -                "limitSymbolsToIncludedHeaders": false -            } -        } -    ], -    "version": 4 -} diff --git a/main/puzzle/neo/esp-neopuzzle/.vscode/launch.json b/main/puzzle/neo/esp-neopuzzle/.vscode/launch.json deleted file mode 100644 index 6d2236f..0000000 --- a/main/puzzle/neo/esp-neopuzzle/.vscode/launch.json +++ /dev/null @@ -1,10 +0,0 @@ -{ -  "version": "0.2.0", -  "configurations": [ -    { -      "type": "espidf", -      "name": "Launch", -      "request": "launch" -    } -  ] -}
\ No newline at end of file diff --git a/main/puzzle/neo/esp-neopuzzle/.vscode/settings.json b/main/puzzle/neo/esp-neopuzzle/.vscode/settings.json deleted file mode 100644 index 49f00b0..0000000 --- a/main/puzzle/neo/esp-neopuzzle/.vscode/settings.json +++ /dev/null @@ -1,17 +0,0 @@ -{ -    "C_Cpp.intelliSenseEngine": "default", -    "idf.adapterTargetName": "esp32", -    "idf.customExtraPaths": "C:\\Users\\Elwin\\.espressif\\tools\\xtensa-esp-elf-gdb\\12.1_20231023\\xtensa-esp-elf-gdb\\bin;C:\\Users\\Elwin\\.espressif\\tools\\riscv32-esp-elf-gdb\\12.1_20231023\\riscv32-esp-elf-gdb\\bin;C:\\Users\\Elwin\\.espressif\\tools\\xtensa-esp-elf\\esp-13.2.0_20230928\\xtensa-esp-elf\\bin;C:\\Users\\Elwin\\.espressif\\tools\\riscv32-esp-elf\\esp-13.2.0_20230928\\riscv32-esp-elf\\bin;C:\\Users\\Elwin\\.espressif\\tools\\esp32ulp-elf\\2.35_20220830\\esp32ulp-elf\\bin;C:\\Users\\Elwin\\.espressif\\tools\\cmake\\3.24.0\\bin;C:\\Users\\Elwin\\.espressif\\tools\\openocd-esp32\\v0.12.0-esp32-20230921\\openocd-esp32\\bin;C:\\Users\\Elwin\\.espressif\\tools\\ninja\\1.11.1;C:\\Users\\Elwin\\.espressif\\tools\\idf-exe\\1.0.3;C:\\Users\\Elwin\\.espressif\\tools\\ccache\\4.8\\ccache-4.8-windows-x86_64;C:\\Users\\Elwin\\.espressif\\tools\\dfu-util\\0.11\\dfu-util-0.11-win64;C:\\Users\\Elwin\\.espressif\\tools\\esp-rom-elfs\\20230320", -    "idf.customExtraVars": { -        "OPENOCD_SCRIPTS": "C:\\Users\\Elwin\\.espressif\\tools\\openocd-esp32\\v0.12.0-esp32-20230921/openocd-esp32/share/openocd/scripts", -        "IDF_CCACHE_ENABLE": "1", -        "ESP_ROM_ELF_DIR": "C:\\Users\\Elwin\\.espressif\\tools\\esp-rom-elfs\\20230320/" -    }, -    "idf.espIdfPathWin": "C:\\Users\\Elwin\\esp\\v5.2.1\\esp-idf", -    "idf.openOcdConfigs": [ -        "interface/ftdi/esp32_devkitj_v1.cfg", -        "target/esp32.cfg" -    ], -    "idf.pythonBinPathWin": "C:\\Users\\Elwin\\.espressif\\python_env\\idf5.2_py3.11_env\\Scripts\\python.exe", -    "idf.toolsPathWin": "C:\\Users\\Elwin\\.espressif" -} diff --git a/main/puzzle/neo/esp-neopuzzle/.vscode/tasks.json b/main/puzzle/neo/esp-neopuzzle/.vscode/tasks.json deleted file mode 100644 index 1dc7915..0000000 --- a/main/puzzle/neo/esp-neopuzzle/.vscode/tasks.json +++ /dev/null @@ -1,259 +0,0 @@ -{ -  "version": "2.0.0", -  "tasks": [ -    { -      "label": "Build - Build project", -      "type": "shell", -      "command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py build", -      "windows": { -        "command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py build", -        "options": { -          "env": { -            "PATH": "${env:PATH};${config:idf.customExtraPaths}" -          } -        } -      }, -      "options": { -        "env": { -          "PATH": "${env:PATH}:${config:idf.customExtraPaths}" -        } -      }, -      "problemMatcher": [ -        { -          "owner": "cpp", -          "fileLocation": [ -            "autoDetect", -            "${workspaceFolder}" -          ], -          "pattern": { -            "regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$", -            "file": 1, -            "line": 2, -            "column": 3, -            "severity": 4, -            "message": 5 -          } -        } -      ], -      "group": { -        "kind": "build", -        "isDefault": true -      } -    }, -    { -      "label": "Set ESP-IDF Target", -      "type": "shell", -      "command": "${command:espIdf.setTarget}", -      "problemMatcher": { -        "owner": "cpp", -        "fileLocation": [ -          "autoDetect", -          "${workspaceFolder}" -        ], -        "pattern": { -          "regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$", -          "file": 1, -          "line": 2, -          "column": 3, -          "severity": 4, -          "message": 5 -        } -      } -    }, -    { -      "label": "Clean - Clean the project", -      "type": "shell", -      "command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py fullclean", -      "windows": { -        "command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py fullclean", -        "options": { -          "env": { -            "PATH": "${env:PATH};${config:idf.customExtraPaths}" -          } -        } -      }, -      "options": { -        "env": { -          "PATH": "${env:PATH}:${config:idf.customExtraPaths}" -        } -      }, -      "problemMatcher": [ -        { -          "owner": "cpp", -          "fileLocation": [ -            "autoDetect", -            "${workspaceFolder}" -          ], -          "pattern": { -            "regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$", -            "file": 1, -            "line": 2, -            "column": 3, -            "severity": 4, -            "message": 5 -          } -        } -      ] -    }, -    { -      "label": "Flash - Flash the device", -      "type": "shell", -      "command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py -p ${config:idf.port} -b ${config:idf.flashBaudRate} flash", -      "windows": { -        "command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py flash -p ${config:idf.portWin} -b ${config:idf.flashBaudRate}", -        "options": { -          "env": { -            "PATH": "${env:PATH};${config:idf.customExtraPaths}" -          } -        } -      }, -      "options": { -        "env": { -          "PATH": "${env:PATH}:${config:idf.customExtraPaths}" -        } -      }, -      "problemMatcher": [ -        { -          "owner": "cpp", -          "fileLocation": [ -            "autoDetect", -            "${workspaceFolder}" -          ], -          "pattern": { -            "regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$", -            "file": 1, -            "line": 2, -            "column": 3, -            "severity": 4, -            "message": 5 -          } -        } -      ] -    }, -    { -      "label": "Monitor: Start the monitor", -      "type": "shell", -      "command": "${config:idf.pythonBinPath} ${config:idf.espIdfPath}/tools/idf.py -p ${config:idf.port} monitor", -      "windows": { -        "command": "${config:idf.pythonBinPathWin} ${config:idf.espIdfPathWin}\\tools\\idf.py -p ${config:idf.portWin} monitor", -        "options": { -          "env": { -            "PATH": "${env:PATH};${config:idf.customExtraPaths}" -          } -        } -      }, -      "options": { -        "env": { -          "PATH": "${env:PATH}:${config:idf.customExtraPaths}" -        } -      }, -      "problemMatcher": [ -        { -          "owner": "cpp", -          "fileLocation": [ -            "autoDetect", -            "${workspaceFolder}" -          ], -          "pattern": { -            "regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$", -            "file": 1, -            "line": 2, -            "column": 3, -            "severity": 4, -            "message": 5 -          } -        } -      ], -      "dependsOn": "Flash - Flash the device" -    }, -    { -      "label": "OpenOCD: Start openOCD", -      "type": "shell", -      "presentation": { -        "echo": true, -        "reveal": "never", -        "focus": false, -        "panel": "new" -      }, -      "command": "openocd -s ${command:espIdf.getOpenOcdScriptValue} ${command:espIdf.getOpenOcdConfigs}", -      "windows": { -        "command": "openocd.exe -s ${command:espIdf.getOpenOcdScriptValue} ${command:espIdf.getOpenOcdConfigs}", -        "options": { -          "env": { -            "PATH": "${env:PATH};${config:idf.customExtraPaths}" -          } -        } -      }, -      "options": { -        "env": { -          "PATH": "${env:PATH}:${config:idf.customExtraPaths}" -        } -      }, -      "problemMatcher": { -        "owner": "cpp", -        "fileLocation": [ -          "autoDetect", -          "${workspaceFolder}" -        ], -        "pattern": { -          "regexp": "^(.*?):(\\d+):(\\d*):?\\s+(?:fatal\\s+)?(warning|error):\\s+(.*)$", -          "file": 1, -          "line": 2, -          "column": 3, -          "severity": 4, -          "message": 5 -        } -      } -    }, -    { -      "label": "adapter", -      "type": "shell", -      "command": "${config:idf.pythonBinPath}", -      "isBackground": true, -      "options": { -        "env": { -          "PATH": "${env:PATH}:${config:idf.customExtraPaths}", -          "PYTHONPATH": "${command:espIdf.getExtensionPath}/esp_debug_adapter/debug_adapter" -        } -      }, -      "problemMatcher": { -        "background": { -          "beginsPattern": "\bDEBUG_ADAPTER_STARTED\b", -          "endsPattern": "DEBUG_ADAPTER_READY2CONNECT", -          "activeOnStart": true -        }, -        "pattern": { -          "regexp": "(\\d+)-(\\d+)-(\\d+)\\s(\\d+):(\\d+):(\\d+),(\\d+)\\s-(.+)\\s(ERROR)", -          "file": 8, -          "line": 2, -          "column": 3, -          "severity": 4, -          "message": 9 -        } -      }, -      "args": [ -        "${command:espIdf.getExtensionPath}/esp_debug_adapter/debug_adapter_main.py", -        "-e", -        "${workspaceFolder}/build/${command:espIdf.getProjectName}.elf", -        "-s", -        "$OPENOCD_SCRIPTS", -        "-dn", -        "esp32", -        "-om", -        "connect_to_instance", -        "-t", -        "xtensa-esp32-elf-" - -      ], -      "windows": { -        "command": "${config:idf.pythonBinPathWin}", -        "options": { -          "env": { -            "PATH": "${env:PATH};${config:idf.customExtraPaths}", -            "PYTHONPATH": "${command:espIdf.getExtensionPath}/esp_debug_adapter/debug_adapter" -          } -        } -      } -    } -  ] -}
\ No newline at end of file diff --git a/main/puzzle/neo/esp-neopuzzle/CMakeLists.txt b/main/puzzle/neo/esp-neopuzzle/CMakeLists.txt deleted file mode 100644 index fb90ef1..0000000 --- a/main/puzzle/neo/esp-neopuzzle/CMakeLists.txt +++ /dev/null @@ -1,8 +0,0 @@ -# For more information about build system see -# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html -# The following five lines of boilerplate have to be in your project's -# CMakeLists in this exact order for cmake to work correctly -cmake_minimum_required(VERSION 3.16) - -include($ENV{IDF_PATH}/tools/cmake/project.cmake) -project(esp-neopuzzle) diff --git a/main/puzzle/neo/esp-neopuzzle/README.md b/main/puzzle/neo/esp-neopuzzle/README.md deleted file mode 100644 index 2bd3097..0000000 --- a/main/puzzle/neo/esp-neopuzzle/README.md +++ /dev/null @@ -1,35 +0,0 @@ -| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C6 | ESP32-H2 | ESP32-P4 | ESP32-S2 | ESP32-S3 | -| ----------------- | ----- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | - -# _Sample project_ - -(See the README.md file in the upper level 'examples' directory for more information about examples.) - -This is the simplest buildable example. The example is used by command `idf.py create-project` -that copies the project to user specified path and set it's name. For more information follow the [docs page](https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html#start-a-new-project) - - - -## How to use example -We encourage the users to use the example as a template for the new projects. -A recommended way is to follow the instructions on a [docs page](https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html#start-a-new-project). - -## Example folder contents - -The project **sample_project** contains one source file in C language [main.c](main/main.c). The file is located in folder [main](main). - -ESP-IDF projects are built using CMake. The project build configuration is contained in `CMakeLists.txt` -files that provide set of directives and instructions describing the project's source files and targets -(executable, library, or both).  - -Below is short explanation of remaining files in the project folder. - -``` -├── CMakeLists.txt -├── main -│   ├── CMakeLists.txt -│   └── main.c -└── README.md                  This is the file you are currently reading -``` -Additionally, the sample project contains Makefile and component.mk files, used for the legacy Make based build system.  -They are not used or needed when building with CMake and idf.py. diff --git a/main/puzzle/neo/esp-neopuzzle/main/CMakeLists.txt b/main/puzzle/neo/esp-neopuzzle/main/CMakeLists.txt deleted file mode 100644 index cf2c455..0000000 --- a/main/puzzle/neo/esp-neopuzzle/main/CMakeLists.txt +++ /dev/null @@ -1,2 +0,0 @@ -idf_component_register(SRCS "main.c" -                    INCLUDE_DIRS ".") diff --git a/main/puzzle/neo/esp-neopuzzle/main/main.c b/main/puzzle/neo/esp-neopuzzle/main/main.c deleted file mode 100644 index 0210748..0000000 --- a/main/puzzle/neo/esp-neopuzzle/main/main.c +++ /dev/null @@ -1,85 +0,0 @@ -#include <stdio.h> -#include <Wire.h> -#include "Adafruit_NeoTrellis.h" - -#define MATRIX_SIZE 8 -#define INT_PIN 5 // Interrupt pin for the NeoTrellis - -enum NeoState { -    NEO_UNINITIALIZED, -    NEO_PLAYING, -    NEO_SOLVED -}; - -Adafruit_NeoTrellis trellis; -NeoState neoState = NEO_UNINITIALIZED; - -// Initialize the NeoTrellis matrix -void initializeNeoMatrix() { -    if (!trellis.begin()) { -        Serial.println("Failed to initialize NeoTrellis"); -        while (1); -    } - -    // Set all buttons to listen for presses and releases -    for (int i = 0; i < MATRIX_SIZE; i++) { -        for (int j = 0; j < MATRIX_SIZE; j++) { -            trellis.activateKey(i * MATRIX_SIZE + j, SEESAW_KEYPAD_EDGE_RISING, true); -            trellis.activateKey(i * MATRIX_SIZE + j, SEESAW_KEYPAD_EDGE_FALLING, true); -            trellis.setPixelColor(i * MATRIX_SIZE + j, 0x000000); // Turn off LED -        } -    } -    trellis.show(); -    neoState = NEO_PLAYING; -} - -// Callback to handle button presses -void buttonCallback(uint8_t x) { -    uint8_t i = x / MATRIX_SIZE; -    uint8_t j = x % MATRIX_SIZE; - -    // Toggle the central button and adjacent LEDs -    toggleAdjacentLEDs(i, j); -    if (isNeoPuzzleSolved()) { -        neoState = NEO_SOLVED; -        Serial.println("The NeoTrellis puzzle is solved!"); -        // Additional actions upon solving the puzzle can go here -    } -    trellis.show(); -} - -void toggleAdjacentLEDs(int x, int y) { -    int idx = x * MATRIX_SIZE + y; -    trellis.setPixelColor(idx, trellis.getPixelColor(idx) ^ 0xFFFFFF); // Toggle - -    // Adjacent LEDs -    if (x > 0) trellis.setPixelColor((x-1) * MATRIX_SIZE + y, trellis.getPixelColor((x-1) * MATRIX_SIZE + y) ^ 0xFFFFFF); -    if (x < MATRIX_SIZE - 1) trellis.setPixelColor((x+1) * MATRIX_SIZE + y, trellis.getPixelColor((x+1) * MATRIX_SIZE + y) ^ 0xFFFFFF); -    if (y > 0) trellis.setPixelColor(x * MATRIX_SIZE + (y-1), trellis.getPixelColor(x * MATRIX_SIZE + (y-1)) ^ 0xFFFFFF); -    if (y < MATRIX_SIZE - 1) trellis.setPixelColor(x * MATRIX_SIZE + (y+1), trellis.getPixelColor(x * MATRIX_SIZE + (y+1)) ^ 0xFFFFFF); -} - -bool isNeoPuzzleSolved() { -    for (int i = 0; i < MATRIX_SIZE; i++) { -        for (int j = 0; j < MATRIX_SIZE; j++) { -            if (trellis.getPixelColor(i * MATRIX_SIZE + j) != 0x000000) return false; // If any LED is on, puzzle is not solved -        } -    } -    return true; -} - -void setup() { -    Serial.begin(115200); -    trellis.begin(INT_PIN); -    trellis.setBrightness(50); // Set brightness of LEDs (0-255) -    initializeNeoMatrix(); -    trellis.registerCallback(buttonCallback); -} - -void loop() { -    if (neoState == NEO_PLAYING) { -        if (trellis.read()) { // If there was a button event -            trellis.show(); // Update the display -        } -    } -} diff --git a/main/puzzle/neo/neo.cpp b/main/puzzle/neo/neo.cpp deleted file mode 100644 index 56d90f7..0000000 --- a/main/puzzle/neo/neo.cpp +++ /dev/null @@ -1,100 +0,0 @@ -#include <iostream> -#include <array> - -#define MATRIX_SIZE 8 - -enum NeoState { -    NEO_UNINITIALIZED, -    NEO_PLAYING, -    NEO_SOLVED -}; - -// Simulate the 8x8 LED matrix with a 2D array -std::array<std::array<bool, MATRIX_SIZE>, MATRIX_SIZE> neoMatrix; - -NeoState neoState = NEO_UNINITIALIZED; - -// Helper function to toggle LEDs if within bounds -void toggleIfValid(int x, int y) { -    if (x >= 0 && x < MATRIX_SIZE && y >= 0 && y < MATRIX_SIZE) { -        neoMatrix[x][y] = !neoMatrix[x][y]; -    } -} - -void initializeNeoMatrix() { -    // The initial pattern from the Appendix A example (assuming red is 'true'/on and white is 'false'/off) -    std::array<std::array<bool, MATRIX_SIZE>, MATRIX_SIZE> initialPattern = {{ -        {false, true, false, true, false, true, false, true}, -        {true, false, true, false, true, false, true, false}, -        {false, true, false, true, false, true, false, true}, -        {true, false, true, false, true, false, true, false}, -        {false, true, false, true, false, true, false, true}, -        {true, false, true, false, true, false, true, false}, -        {false, true, false, true, false, true, false, true}, -        {true, false, true, false, true, false, true, false} -    }}; - -    for (int i = 0; i < MATRIX_SIZE; i++) { -        for (int j = 0; j < MATRIX_SIZE; j++) { -            neoMatrix[i][j] = initialPattern[i][j]; -        } -    } - -    neoState = NEO_PLAYING; -} - - -void printNeoMatrix() { -    // Print the matrix state to the console -    for (int i = 0; i < MATRIX_SIZE; i++) { -        for (int j = 0; j < MATRIX_SIZE; j++) { -            std::cout << (neoMatrix[i][j] ? 1 : 0) << " "; -        } -        std::cout << std::endl; -    } -} - -void toggleAdjacentLEDs(int x, int y) { -    // Toggle the LED at (x, y) and adjacent LEDs -    toggleIfValid(x, y);     // Center -    toggleIfValid(x - 1, y); // Up -    toggleIfValid(x + 1, y); // Down -    toggleIfValid(x, y - 1); // Left -    toggleIfValid(x, y + 1); // Right -} - - -bool isNeoPuzzleSolved() { -    for (int i = 0; i < MATRIX_SIZE; i++) { -        for (int j = 0; j < MATRIX_SIZE; j++) { -            if (neoMatrix[i][j]) return false; // If any LED is on, puzzle is not solved -        } -    } -    return true; -} - -/// Integration needed -int main() { -    initializeNeoMatrix(); -    printNeoMatrix(); - -    while (neoState != NEO_SOLVED) { -        int x, y; -        std::cout << "Enter the coordinates of the button pressed (x y): "; -        std::cin >> x >> y; - -        if (x >= 0 && x < MATRIX_SIZE && y >= 0 && y < MATRIX_SIZE) { -            toggleAdjacentLEDs(x, y); -            printNeoMatrix(); - -            if (isNeoPuzzleSolved()) { -                neoState = NEO_SOLVED; -                std::cout << "The NeoTrellis puzzle is solved!\n"; -            } -        } else { -            std::cout << "Invalid coordinates. Please enter values between 0 and " << MATRIX_SIZE - 1 << ".\n"; -        } -    } - -    return 0; -}  |