Compare commits
5 Commits
54ffd02ab4
...
64cde85752
| Author | SHA1 | Date | |
|---|---|---|---|
| 64cde85752 | |||
| 26ee30d1e9 | |||
| 9df16a82c4 | |||
| 9f964f63d3 | |||
| 3ac09781e5 |
@ -1,7 +1,7 @@
|
|||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <Wire.h>
|
#include <Wire.h>
|
||||||
|
|
||||||
void resetPuzzles();
|
void resetPuzzles(bool easy);
|
||||||
|
|
||||||
/* ========================================================= */
|
/* ========================================================= */
|
||||||
const uint8_t ARCHIV_ADDR = 0x10;
|
const uint8_t ARCHIV_ADDR = 0x10;
|
||||||
@ -70,21 +70,25 @@ ISR(PCINT1_vect)
|
|||||||
}
|
}
|
||||||
lastState = state;
|
lastState = state;
|
||||||
}
|
}
|
||||||
|
uint8_t inputPattern = 0;
|
||||||
void handleEncoderMovement()
|
void handleEncoderMovement()
|
||||||
{
|
{
|
||||||
long diff = encoderPostion - lastClickPosition;
|
long diff = encoderPostion - lastClickPosition;
|
||||||
if (abs(diff) >= stepsPerClick)
|
if (abs(diff) >= stepsPerClick)
|
||||||
{
|
{
|
||||||
resetPuzzles();
|
|
||||||
if (diff > 0)
|
if (diff > 0)
|
||||||
{
|
{
|
||||||
|
// right turn
|
||||||
selectedIndex = (selectedIndex + 1) % 8;
|
selectedIndex = (selectedIndex + 1) % 8;
|
||||||
|
inputPattern = ((inputPattern << 1) | 1) & 0xFF;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
//left turn
|
||||||
selectedIndex = (selectedIndex + 7) % 8;
|
selectedIndex = (selectedIndex + 7) % 8;
|
||||||
|
inputPattern = ((inputPattern << 1) | 0) & 0xFF;
|
||||||
}
|
}
|
||||||
|
resetPuzzles(inputPattern == 0b10101010);
|
||||||
setDrawerLight(selectedIndex);
|
setDrawerLight(selectedIndex);
|
||||||
lastClickPosition = encoderPostion;
|
lastClickPosition = encoderPostion;
|
||||||
}
|
}
|
||||||
@ -133,13 +137,16 @@ const int puzzleResetPins[3] = {7, 8, 9};
|
|||||||
bool puzzlesSolved[3] = {false, false, false};
|
bool puzzlesSolved[3] = {false, false, false};
|
||||||
bool allSolvedSent = false;
|
bool allSolvedSent = false;
|
||||||
|
|
||||||
void resetPuzzles()
|
void resetPuzzles(bool easy)
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < 3; i++)
|
for (size_t i = 0; i < 3; i++)
|
||||||
{
|
{
|
||||||
puzzlesSolved[i] = false;
|
|
||||||
digitalWrite(puzzleResetPins[i], HIGH);
|
digitalWrite(puzzleResetPins[i], HIGH);
|
||||||
delay(30);
|
puzzlesSolved[i] = false;
|
||||||
|
}
|
||||||
|
delay(30 * (easy * 10)); //delay 30 or 300ms
|
||||||
|
for (size_t i = 0; i < 3; i++)
|
||||||
|
{
|
||||||
digitalWrite(puzzleResetPins[i], LOW);
|
digitalWrite(puzzleResetPins[i], LOW);
|
||||||
}
|
}
|
||||||
allSolvedSent = false;
|
allSolvedSent = false;
|
||||||
|
|||||||
@ -211,7 +211,7 @@ NormalizedRGB generateRandomNormalizedRGB(const Section *section, uint8_t from,
|
|||||||
}
|
}
|
||||||
|
|
||||||
GameBoard finishedBoard;
|
GameBoard finishedBoard;
|
||||||
void generateTargetGameBoard()
|
void generateTargetGameBoard(bool easy)
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < 6; i++)
|
for (size_t i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
@ -221,20 +221,37 @@ void generateTargetGameBoard()
|
|||||||
strip.begin();
|
strip.begin();
|
||||||
strip.clear();
|
strip.clear();
|
||||||
GameBoard board;
|
GameBoard board;
|
||||||
// left
|
if (easy)
|
||||||
board.left = generateRandomNormalizedRGB(pot3, 0, 3);
|
{
|
||||||
finishedLeft = false;
|
// left
|
||||||
strip.setPixelColor(3, strip.Color(board.left.r, board.left.g, board.left.b, 0)); // left
|
board.left = generateRandomNormalizedRGB(pot3, 2, 3);
|
||||||
// middle
|
finishedLeft = false;
|
||||||
board.middle = generateRandomNormalizedRGB(pot4, 0, 4);
|
strip.setPixelColor(3, strip.Color(board.left.r, board.left.g, board.left.b, 0)); // left
|
||||||
finishedMiddle = false;
|
// middle
|
||||||
strip.setPixelColor(4, strip.Color(board.middle.r, board.middle.g, board.middle.b, 0)); // middle
|
board.middle = generateRandomNormalizedRGB(pot4, 3, 4);
|
||||||
// right
|
finishedMiddle = false;
|
||||||
board.right = generateRandomNormalizedRGB(pot5, 1, 5);
|
strip.setPixelColor(4, strip.Color(board.middle.r, board.middle.g, board.middle.b, 0)); // middle
|
||||||
finishedRight = false;
|
// right
|
||||||
strip.setPixelColor(5, strip.Color(board.right.r, board.right.g, board.right.b, 0)); // left
|
board.right = generateRandomNormalizedRGB(pot5, 4, 5);
|
||||||
//------------------
|
finishedRight = false;
|
||||||
|
strip.setPixelColor(5, strip.Color(board.right.r, board.right.g, board.right.b, 0)); // left
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// left
|
||||||
|
board.left = generateRandomNormalizedRGB(pot3, 0, 3);
|
||||||
|
finishedLeft = false;
|
||||||
|
strip.setPixelColor(3, strip.Color(board.left.r, board.left.g, board.left.b, 0)); // left
|
||||||
|
// middle
|
||||||
|
board.middle = generateRandomNormalizedRGB(pot4, 0, 4);
|
||||||
|
finishedMiddle = false;
|
||||||
|
strip.setPixelColor(4, strip.Color(board.middle.r, board.middle.g, board.middle.b, 0)); // middle
|
||||||
|
// right
|
||||||
|
board.right = generateRandomNormalizedRGB(pot5, 1, 5);
|
||||||
|
finishedRight = false;
|
||||||
|
strip.setPixelColor(5, strip.Color(board.right.r, board.right.g, board.right.b, 0)); // left
|
||||||
|
//------------------
|
||||||
|
}
|
||||||
finishedBoard = board;
|
finishedBoard = board;
|
||||||
strip.show();
|
strip.show();
|
||||||
}
|
}
|
||||||
@ -261,7 +278,7 @@ void setup()
|
|||||||
if (powerOnState)
|
if (powerOnState)
|
||||||
{
|
{
|
||||||
strip.begin();
|
strip.begin();
|
||||||
generateTargetGameBoard();
|
generateTargetGameBoard(false);
|
||||||
strip.show();
|
strip.show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -298,7 +315,7 @@ void loop()
|
|||||||
// Detecting turn-on
|
// Detecting turn-on
|
||||||
if (!powerOnState && digitalRead(POWER_PIN) == HIGH)
|
if (!powerOnState && digitalRead(POWER_PIN) == HIGH)
|
||||||
{
|
{
|
||||||
generateTargetGameBoard();
|
generateTargetGameBoard(false);
|
||||||
powerOnState = true;
|
powerOnState = true;
|
||||||
}
|
}
|
||||||
if (!powerOnState)
|
if (!powerOnState)
|
||||||
@ -309,8 +326,12 @@ void loop()
|
|||||||
|
|
||||||
if (digitalRead(REGENERATE_PIN) == HIGH)
|
if (digitalRead(REGENERATE_PIN) == HIGH)
|
||||||
{
|
{
|
||||||
generateTargetGameBoard();
|
unsigned long resetTimer = millis();
|
||||||
delay(50); // Puls kurz blockieren
|
while (digitalRead(REGENERATE_PIN) == HIGH)
|
||||||
|
{
|
||||||
|
delay(10);
|
||||||
|
}
|
||||||
|
generateTargetGameBoard(millis() - resetTimer > 150);
|
||||||
}
|
}
|
||||||
|
|
||||||
strip.begin();
|
strip.begin();
|
||||||
|
|||||||
@ -36,9 +36,15 @@ int ledIndex(int logical) {
|
|||||||
return (NUM_LEDS - 1) - logical;
|
return (NUM_LEDS - 1) - logical;
|
||||||
}
|
}
|
||||||
|
|
||||||
void generateNewSequence() {
|
void generateNewSequence(bool easy) {
|
||||||
for (int i = 0; i < NUM_LEDS; i++) {
|
for (int i = 0; i < NUM_LEDS; i++) {
|
||||||
sequence[i] = random(0, 2);
|
if (easy)
|
||||||
|
{
|
||||||
|
sequence[i] = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
sequence[i] = random(0, 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,10 +116,12 @@ void setup() {
|
|||||||
strip.show();
|
strip.show();
|
||||||
|
|
||||||
randomSeed(millis());
|
randomSeed(millis());
|
||||||
generateNewSequence();
|
generateNewSequence(false);
|
||||||
resetGame();
|
resetGame();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool reset = false;
|
||||||
void loop() {
|
void loop() {
|
||||||
//Detecting turn-off
|
//Detecting turn-off
|
||||||
if (powerOnState && digitalRead(POWER_PIN) == LOW) {
|
if (powerOnState && digitalRead(POWER_PIN) == LOW) {
|
||||||
@ -129,10 +137,16 @@ void loop() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Master-D2 HIGH → neue Sequenz
|
// Master-D2 HIGH → neue Sequenz
|
||||||
if (digitalRead(randomizer_master_pin) == HIGH) {
|
if (digitalRead(randomizer_master_pin) == HIGH)
|
||||||
generateNewSequence();
|
{
|
||||||
|
unsigned long resetTimer = millis();
|
||||||
|
while (digitalRead(randomizer_master_pin) == HIGH)
|
||||||
|
{
|
||||||
|
delay(10);
|
||||||
|
}
|
||||||
|
generateNewSequence(millis() - resetTimer > 150);
|
||||||
resetGame();
|
resetGame();
|
||||||
delay(50); // Puls kurz blockieren
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int currentButton1State = digitalRead(BUTTON1_PIN);
|
int currentButton1State = digitalRead(BUTTON1_PIN);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user