diff options
| author | Elwin <elwinhammer@gmail.com> | 2024-06-23 11:31:15 +0200 | 
|---|---|---|
| committer | Elwin <elwinhammer@gmail.com> | 2024-06-23 11:34:16 +0200 | 
| commit | 9664deb3e817b616dd1e8f73a89c0703a0771464 (patch) | |
| tree | 2eec7a1b473958db42057e60597ca0f2e6474c2c /puzzle/neo/arduino-neopuzzle | |
| parent | a9eb2013e6b7297cfce4116179f4ab2d58d1c8d6 (diff) | |
Neotrellis Freertos support
Diffstat (limited to 'puzzle/neo/arduino-neopuzzle')
| -rw-r--r-- | puzzle/neo/arduino-neopuzzle/arduino-neopuzzle.ino | 95 | 
1 files changed, 0 insertions, 95 deletions
diff --git a/puzzle/neo/arduino-neopuzzle/arduino-neopuzzle.ino b/puzzle/neo/arduino-neopuzzle/arduino-neopuzzle.ino deleted file mode 100644 index b334677..0000000 --- a/puzzle/neo/arduino-neopuzzle/arduino-neopuzzle.ino +++ /dev/null @@ -1,95 +0,0 @@ -#include <Wire.h> -#include <Adafruit_NeoTrellis.h> - -#define MATRIX_SIZE 8 -#define LED_COLOR_ON 0xFFFFFF // Color of the LEDs in ON state -#define LED_COLOR_OFF 0x000000 // Color of the LEDs in OFF state - -Adafruit_NeoTrellis t_array[MATRIX_SIZE / 4][MATRIX_SIZE / 4] = { -    {Adafruit_NeoTrellis(0x2E), Adafruit_NeoTrellis(0x2F)}, -    {Adafruit_NeoTrellis(0x30), Adafruit_NeoTrellis(0x32)} -}; - -Adafruit_MultiTrellis trellis((Adafruit_NeoTrellis *)t_array, MATRIX_SIZE / 4, MATRIX_SIZE / 4); - -bool neoMatrix[MATRIX_SIZE][MATRIX_SIZE]; // To track state of each pixel - -enum NeoState { -    NEO_UNINITIALIZED, -    NEO_PLAYING, -    NEO_SOLVED -}; - -NeoState neoState = NEO_UNINITIALIZED; - -void setup() { -    Serial.begin(115200); -    while (!Serial); // Wait for Serial to be ready - -    if (!trellis.begin()) { -        Serial.println("Failed to initialize NeoTrellis"); -        while (1) delay(1); -    } - -    // Initialize the matrix with a checkerboard pattern -    bool toggle = false; -    for (int i = 0; i < MATRIX_SIZE; i++) { -        for (int j = 0; j < MATRIX_SIZE; j++) { -            neoMatrix[i][j] = toggle; -            toggle = !toggle; -            trellis.setPixelColor(i * MATRIX_SIZE + j, neoMatrix[i][j] ? LED_COLOR_ON : LED_COLOR_OFF); -        } -        toggle = !toggle; -    } -    trellis.show(); -    neoState = NEO_PLAYING; - -    // Register the callback for each key -    for (int i = 0; i < MATRIX_SIZE * MATRIX_SIZE; i++) { -        trellis.activateKey(i, SEESAW_KEYPAD_EDGE_RISING, true); -        trellis.activateKey(i, SEESAW_KEYPAD_EDGE_FALLING, true); -        trellis.registerCallback(i, buttonCallback); -    } -} - -void loop() { -    trellis.read(); // Process button events -    delay(20); -} - -TrellisCallback buttonCallback(keyEvent evt) { -    int x = evt.bit.NUM / MATRIX_SIZE; -    int y = evt.bit.NUM % MATRIX_SIZE; - -    if (evt.bit.EDGE == SEESAW_KEYPAD_EDGE_RISING) { -        toggleAdjacentLEDs(x, y); -        trellis.show(); -        if (isNeoPuzzleSolved()) { -            neoState = NEO_SOLVED; -            Serial.println("The NeoTrellis puzzle is solved!"); -        } -    } -    return 0; -} - -void toggleAdjacentLEDs(int x, int y) { -    for (int dx = -1; dx <= 1; ++dx) { -        for (int dy = -1; dy <= 1; ++dy) { -            if (dx == 0 && dy == 0) continue; // Skip the center button itself -            int nx = x + dx, ny = y + dy; -            if (nx >= 0 && nx < MATRIX_SIZE && ny >= 0 && ny < MATRIX_SIZE) { -                neoMatrix[nx][ny] = !neoMatrix[nx][ny]; -                trellis.setPixelColor(nx * MATRIX_SIZE + ny, neoMatrix[nx][ny] ? LED_COLOR_ON : LED_COLOR_OFF); -            } -        } -    } -} - -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; -}  |