#include <Adafruit_NeoPixel.h>
#define LED_PIN 25 // Pin for LED-stripen (endre til din pin)
#define BUTTON_PIN 26 // Pin for knappen (endre til din pin)
#define NUM_LEDS 60 // Antall LEDs i stripen
Adafruit_NeoPixel strip(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
int score = 0; // Poengsum
int speed = 100; // Start hastighet (millisekunder delay, lavere = raskere)
int targetPos; // Posisjon for den faste lysende LED-en
int movingPos = 0; // Startposisjon for de bevegelige LEDs
bool gameOver = false; // Flagg for spill slutt
bool buttonPressed = false; // Flagg for knappetrykk
void setup() {
strip.begin();
strip.show(); // Initialiser alle LEDs til av
pinMode(BUTTON_PIN, INPUT_PULLUP); // Knapp med intern pull-up
Serial.begin(9600);
randomSeed(analogRead(0)); // Tilfeldig seed
startGame();
}
void loop() {
if (gameOver) {
delay(2000); // Vent litt før restart
startGame();
return;
}
// Vis den faste target LED-en (rød f.eks.)
strip.clear();
strip.setPixelColor(targetPos, strip.Color(255, 0, 0)); // Rød for target
// Vis de 3 bevegelige LEDs (grønn f.eks.)
for (int i = 0; i < 3; i++) {
if (movingPos + i < NUM_LEDS) {
strip.setPixelColor(movingPos + i, strip.Color(0, 255, 0)); // Grønn for bevegelig
}
}
strip.show();
// Sjekk om knappen trykkes
if (digitalRead(BUTTON_PIN) == LOW && !buttonPressed) {
buttonPressed = true;
checkHit();
} else if (digitalRead(BUTTON_PIN) == HIGH) {
buttonPressed = false;
}
// Beveg de bevegelige LEDs
movingPos++;
if (movingPos > NUM_LEDS - 3) {
// Hvis de bevegelige har passert enden uten treff, bom
endGame();
}
delay(speed);
}
void startGame() {
score = 0;
speed = 100;
targetPos = random(0, NUM_LEDS); // Tilfeldig posisjon for target
movingPos = 0;
gameOver = false;
Serial.println("Nytt spill startet!");
}
void checkHit() {
// Sjekk om de bevegelige overlapper target
if (movingPos <= targetPos && movingPos + 2 >= targetPos) {
score++;
speed = max(10, speed - 10); // Øk hastighet (reduser delay), minimum 10ms
Serial.print("Treff! Poeng: ");
Serial.println(score);
movingPos = 0; // Reset bevegelig til start
targetPos = random(0, NUM_LEDS); // Ny target
} else {
endGame();
}
}
void endGame() {
gameOver = true;
Serial.print("Spill over! Poengsum: ");
Serial.println(score);
strip.clear();
strip.show();
}