diff options
| author | Loek Le Blansch <loek@pipeframe.xyz> | 2024-06-22 18:24:07 +0200 | 
|---|---|---|
| committer | Loek Le Blansch <loek@pipeframe.xyz> | 2024-06-22 18:24:07 +0200 | 
| commit | d6440954806d381dae5b3df65b43192f897018c6 (patch) | |
| tree | 0f16b75795d9926c5ea4a8ef52a695365837a8e4 /puzzle/vault/arduino-vaultpuzzle | |
| parent | 9a24fe708770d717ecb8cbe45fe24922d21b5838 (diff) | |
| parent | 9c255363bb578ada6bb53d15e5ca12fa8b39986b (diff) | |
Merge branch 'prot/vault-puzzle' of github.com:lonkaars/puzzelbox
Diffstat (limited to 'puzzle/vault/arduino-vaultpuzzle')
| -rw-r--r-- | puzzle/vault/arduino-vaultpuzzle/arduino-vaultpuzzle.ino | 150 | 
1 files changed, 0 insertions, 150 deletions
| diff --git a/puzzle/vault/arduino-vaultpuzzle/arduino-vaultpuzzle.ino b/puzzle/vault/arduino-vaultpuzzle/arduino-vaultpuzzle.ino deleted file mode 100644 index 4dd8ac8..0000000 --- a/puzzle/vault/arduino-vaultpuzzle/arduino-vaultpuzzle.ino +++ /dev/null @@ -1,150 +0,0 @@ -#include <Wire.h> -#include <TM1637Display.h> - -// Definitions for GPIO numbers, change these according to your hardware setup -#define TOTAL_LEVELS 5 -#define TAG "VaultPuzzle" - -// Key Matrix Pin Configuration -#define ROWS 4 -#define COLS 3 - -// Module connection pins (Digital Pins for TM1637) -#define CLK 2 -#define DIO 3 - -// Pin to indicate puzzle solved state -#define SOLVED_PIN 53 - -// Initialize the TM1637 display -TM1637Display display(CLK, DIO); - -//TODO Update these pin numbers based on your Arduino setup -const int ROW_PINS[ROWS] = {7, 6, 5, 4};  -const int COL_PINS[COLS] = {10, 9, 8};  - -typedef enum { -    STATE_UNINITIALIZED = 0x00, -    STATE_RESET = 0x01, -    STATE_PLAYING = 0x02, -    STATE_SOLVED = 0x03, -    STATE_ERROR = 0x04 -} PuzzleState; - -const char* validButtons[TOTAL_LEVELS] = {"A2", "B1", "D3", "C2", "C1"}; -PuzzleState puzzleState = STATE_UNINITIALIZED; -int currentLevel = 0; - -// Function prototypes -void display_code(int level); -void initialize_system(); -void check_button_press(); -void update_state_after_button_press(bool validPress); -void play_error_sound(); -void blink_display(); - -void setup() { -  Serial.begin(115200); // Initialize default Serial for debug messages -  pinMode(SOLVED_PIN, OUTPUT); // Initialize the solved indicator pin -  digitalWrite(SOLVED_PIN, LOW); // Start with the solved pin LOW - -  display.setBrightness(0x0f); // Set the brightness of the TM1637 display -  initialize_system(); -  Serial.println("GPIO and display initialized."); - -  // Test to light up all segments -  uint8_t allOn[] = {0xFF, 0xFF, 0xFF, 0xFF}; // All segments on -  display.setSegments(allOn); -  delay(2000); // Keep it on for 2 seconds before proceeding - -  // Initialize the game -  if (true) { // Simulating isVaultClosed -      puzzleState = STATE_RESET; -      currentLevel = 0; -      display_code(currentLevel); -  } else { -      Serial.println("Vault door is open. Please close the door to start the puzzle."); -  } -} - -void initialize_system() { -    // Configure the rows as input with pull-up -    for (int i = 0; i < ROWS; i++) { -      pinMode(ROW_PINS[i], INPUT_PULLUP); -    } -     -    // Configure the columns as output -    for (int i = 0; i < COLS; i++) { -      pinMode(COL_PINS[i], OUTPUT); -      digitalWrite(COL_PINS[i], HIGH); -    } -} - -void loop() { -  while (puzzleState != STATE_SOLVED) { -      check_button_press(); -      delay(100); // Non-blocking delay -  } -  // When puzzle is solved, you might want to display a final message and set the solved pin high -  if (puzzleState == STATE_SOLVED) { -      digitalWrite(SOLVED_PIN, HIGH); // Set the solved pin high -      display.showNumberDec(currentLevel, true); // Show final level or a special message -      Serial.println("Final display shown. Puzzle complete."); -      while (1) { delay(1000); } // Hold on the final display -  } -} - -void display_code(int level) { -    Serial.print("Displaying code for level "); Serial.println(level); -    // Display the level on the TM1637 4-digit 7-segment display -    display.showNumberDec(level, true); // True to show leading zeros -    Serial.print("Code for level "); Serial.print(level); Serial.println(" displayed successfully."); -} - -void check_button_press() { -    char keyPress[3] = {0}; -    for (int col = 0; col < COLS; col++) { -        digitalWrite(COL_PINS[col], LOW); // Activate column -        for (int row = 0; row < ROWS; row++) { -            if (digitalRead(ROW_PINS[row]) == LOW) { // Detect if any row is activated -                delay(50); // Debounce delay -                if (digitalRead(ROW_PINS[row]) == LOW) { // Confirm the button is still pressed -                    keyPress[0] = 'A' + row; -                    keyPress[1] = '1' + col; -                    keyPress[2] = '\0'; -                    Serial.print("Keypress detected: "); Serial.println(keyPress); -                    if (strcmp(keyPress, validButtons[currentLevel]) == 0) { -                        currentLevel++; -                        if (currentLevel >= TOTAL_LEVELS) { -                            puzzleState = STATE_SOLVED; -                            Serial.println("Puzzle solved!"); -                            display.showNumberDec(currentLevel + 1, true);  // Display the final level -                            digitalWrite(SOLVED_PIN, HIGH); // Set the solved pin high -                        } else { -                            puzzleState = STATE_PLAYING; -                            display_code(currentLevel); -                        } -                    } else { -                        play_error_sound(); -                        blink_display(); -                        puzzleState = STATE_ERROR; -                        currentLevel = 0; -                        display_code(currentLevel); -                    } -                    while (digitalRead(ROW_PINS[row]) == LOW) {} // Wait for release -                } -            } -        } -        digitalWrite(COL_PINS[col], HIGH); // Deactivate column -    } -} - -void play_error_sound() { -    // Simulate error sound - connect a buzzer to play actual sound -    Serial.println("Playing error sound."); -} - -void blink_display() { -    // Simulate blinking the display - use LEDs or other methods to show visual feedback -    Serial.println("7-segment display is blinking to indicate an error."); -} |