#define LED_PIN 11 // Pb2
#define LED_COUNT 2
const int latchPin = 5; // Pa5
const int clockPin = 6; // Pa6
const int dataPin = 4; // Pa4
const int LATCH_PIN = A1; // 74HC595 pin 12 ST_CP PA1
const int DATA_PIN = A0; // 74HC595pin 14 DS Pa0
const int CLOCK_PIN = A2; // 74HC595 pin 11 SHCP Pa2
const int Knop1 = 8; // PA8
const int Knop2 = 9; // PA9
const int Knop3 = 10; // PA10
const int Knop4 = 11; // PA11
const int numLeds = 7;
const int DELAY_MS = 6000; // Delay for 5 seconds
const int Buzzer = 13; // PB1
long previousMillis = 0; // The last time the function was called
int Groen = 0;
int Rood = 0;
int Groen2 = 0;
int Rood2 = 0;
int randomValue = 0;
int Links = 0;
int Rechts = 0;
int code1 = 0;
int code2 = 0;
int code3 = 0;
int code4 = 0;
int potmeter = A5; // Pb3
int potValue; // Waarde van potmeter
int Helderheid;
int Ledspeed;
int i = 0;
int j = 0;
byte ledPattern = 0; //
byte ledPattern2 = 0;
bool Functie = false;
int Knop1status = digitalRead(Knop1);
int dec_digits [10] {1, 79, 18, 6, 76, 36, 32, 15, 0, 4};
void setup() {
Serial.begin(115200);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(LATCH_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(DATA_PIN, OUTPUT);
pinMode(Buzzer, OUTPUT);
pinMode(Knop1, INPUT_PULLUP);
pinMode(Knop2, INPUT_PULLUP);
pinMode(Knop3, INPUT_PULLUP);
pinMode(Knop4, INPUT_PULLUP);
randomSeed(analogRead(0)); // Weghalen bij pcb
digitalWrite(LATCH_PIN, LOW);
shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, dec_digits[i]);
shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, dec_digits[j]);
digitalWrite(LATCH_PIN, HIGH);
}
bool startCondition = false;
int timeToWaitButton = 3000;
int scorePoints = 0;
void loop() {
if (!startCondition)
{ // Start wait button
if (!digitalRead(Knop1) ||
!digitalRead(Knop2) ||
!digitalRead(Knop3) ||
!digitalRead(Knop4))
{
Serial.println("START");
delay(1000);
startCondition = true;
}
}
else
{ // Start game
int LEDScore = random(1, 5);
Serial.print("LEDScore: ");
Serial.println(LEDScore);
ledPattern = 1 << LEDScore;
updateShiftRegister();
for(int i=0; i<timeToWaitButton; i++)
{
delay(1);
if (!digitalRead(Knop1) && (LEDScore == 1)){Iets(); Scoor();}
if (!digitalRead(Knop2) && (LEDScore == 2)){Iets(); Scoor();}
if (!digitalRead(Knop3) && (LEDScore == 3)){Iets(); Scoor();}
if (!digitalRead(Knop4) && (LEDScore == 4)){Iets(); Scoor();}
if (!digitalRead(Knop1) && (LEDScore == 2)){Lose();}
if (!digitalRead(Knop1) && (LEDScore == 3)){Lose();}
if (!digitalRead(Knop1) && (LEDScore == 4)){Lose();}
if (!digitalRead(Knop2) && (LEDScore == 1)){Lose();}
if (!digitalRead(Knop2) && (LEDScore == 3)){Lose();}
if (!digitalRead(Knop2) && (LEDScore == 4)){Lose();}
if (!digitalRead(Knop3) && (LEDScore == 1)){Lose();}
if (!digitalRead(Knop3) && (LEDScore == 2)){Lose();}
if (!digitalRead(Knop3) && (LEDScore == 4)){Lose();}
if (!digitalRead(Knop4) && (LEDScore == 1)){Lose();}
if (!digitalRead(Knop4) && (LEDScore == 2)){Lose();}
if (!digitalRead(Knop4) && (LEDScore == 3)){Lose();}
}
}
}
void Iets()
{
scorePoints++;
Serial.print("Score: ");
Serial.println(scorePoints);
// startCondition = false;
if (timeToWaitButton > 250)
{
timeToWaitButton -= 250;
}
else if (timeToWaitButton > 150)
{
timeToWaitButton -= 150;
}
else if (timeToWaitButton > 50)
{
timeToWaitButton -= 50;
}
else
{
//victory
}
ledPattern = 0;
updateShiftRegister();
delay(200);
}
void Generate()
{
randomValue = random(1, 5);
delay(200);
Serial.println("Generating");
previousMillis = millis();
Reset();
}
void updateShiftRegister()
{
delay(Ledspeed);
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, ledPattern);
digitalWrite(latchPin, HIGH);
}
void Lose()
{
delay(500);
Serial.println("LOSE");
randomValue = 0;
sadBuz();
Reset();
updateShiftRegister();
delay(500);
Functie = false;
i = 0;
j = 0;
digitalWrite(LATCH_PIN, LOW);
shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, dec_digits[i]);
shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, dec_digits[j]);
digitalWrite(LATCH_PIN, HIGH);
}
void Scoor()
{
tone(Buzzer, 500, 200);
delay(150);
tone(Buzzer, 500, 500);
delay(150);
tone(Buzzer, 800, 150);
delay(150);
tone(Buzzer, 600, 900);
delay(500);
noTone(Buzzer);
Serial.println("Scoor");
if (i >= 9)
{
i = 0;
j += 1;
}
else
{
i += 1;
}
delay(1000);
digitalWrite(LATCH_PIN, LOW);
shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, dec_digits[i]);
shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, dec_digits[j]);
digitalWrite(LATCH_PIN, HIGH);
Generate();
delay(200);
}
void Reset()
{
delay(200);
Rechts = 0;
Links = 0;
code1 = 0;
code2 = 0;
code3 = 0;
code4 = 0;
Groen = 0;
Rood = 0;
Groen2 = 0;
Rood2 = 0;
}
void sadBuz()
{
tone(Buzzer, 622);
delay(300);
tone(Buzzer, 587);
delay(300);
tone(Buzzer, 554);
delay(300);
for (byte ic = 0; ic < 10; ic++) {
for (int pitch = -10; pitch <= 10; pitch++) {
tone(Buzzer, 523 + pitch);
delay(5);
}
}
noTone(Buzzer);
}