#include "pitches.h"
#include <IRremote.h>
#define PIN_RECEIVER 2
IRrecv receiver(PIN_RECEIVER);
const uint8_t laserPins[] = {53, 51, 49, 47, 45};
const uint8_t strobePin = 43;
const uint8_t winPin = A2;
const uint8_t ouchPin = A6;
#define SPEAKER_PIN 4
int difficulty = 6;
uint8_t lifes = 3;
uint8_t winLose = 0;
uint8_t winSong() {
for (byte i = 0; i < 5; i++) {
digitalWrite(laserPins[i], HIGH);
digitalWrite(47, LOW);
tone(SPEAKER_PIN, NOTE_G3);
delay(133);
digitalWrite(53, LOW);
tone(SPEAKER_PIN, NOTE_C4);
delay(133);
digitalWrite(51, LOW);
tone(SPEAKER_PIN, NOTE_E4);
delay(133);
digitalWrite(laserPins[i], HIGH);
digitalWrite(45, LOW);
tone(SPEAKER_PIN, NOTE_G4);
delay(133);
tone(SPEAKER_PIN, NOTE_C5);
digitalWrite(53, LOW);
delay(133);
tone(SPEAKER_PIN, NOTE_E5);
digitalWrite(51, LOW);
delay(133);
tone(SPEAKER_PIN, NOTE_G5);
digitalWrite(laserPins[i], HIGH);
digitalWrite(strobePin, HIGH);
delay(400);
tone(SPEAKER_PIN, NOTE_E5);
digitalWrite(laserPins[i], LOW);
digitalWrite(strobePin, LOW);
delay(400);
tone(SPEAKER_PIN, NOTE_FS3);
digitalWrite(laserPins[i], HIGH);
digitalWrite(45, LOW);
delay(133);
tone(SPEAKER_PIN, NOTE_C4);
digitalWrite(47, LOW);
delay(133);
tone(SPEAKER_PIN, NOTE_DS4);
digitalWrite(49, LOW);
delay(133);
digitalWrite(laserPins[i], HIGH);
digitalWrite(51, LOW);
tone(SPEAKER_PIN, NOTE_GS4);
delay(133);
digitalWrite(53, LOW);
tone(SPEAKER_PIN, NOTE_C5);
delay(133);
digitalWrite(45, LOW);
tone(SPEAKER_PIN, NOTE_DS5);
delay(133);
digitalWrite(laserPins[i], HIGH);
digitalWrite(strobePin, HIGH);
tone(SPEAKER_PIN, NOTE_GS5);
delay(400);
digitalWrite(laserPins[i], LOW);
digitalWrite(strobePin, LOW);
tone(SPEAKER_PIN, NOTE_DS5);
delay(400);
tone(SPEAKER_PIN, NOTE_E3);
digitalWrite(laserPins[i], LOW);
delay(133);
tone(SPEAKER_PIN, NOTE_D4);
digitalWrite(laserPins[i], HIGH);
delay(133);
tone(SPEAKER_PIN, NOTE_F4);
digitalWrite(laserPins[i], LOW);
delay(133);
tone(SPEAKER_PIN, NOTE_AS4);
digitalWrite(laserPins[i], HIGH);
delay(133);
tone(SPEAKER_PIN, NOTE_D5);
digitalWrite(laserPins[i], LOW);
delay(133);
tone(SPEAKER_PIN, NOTE_F5);
digitalWrite(laserPins[i], HIGH);
delay(133);
tone(SPEAKER_PIN, NOTE_AS5);
digitalWrite(laserPins[i], LOW);
delay(300);
noTone(SPEAKER_PIN);
digitalWrite(laserPins[i], HIGH);
delay(100);
tone(SPEAKER_PIN, NOTE_AS5);
delay(33);
noTone(SPEAKER_PIN);
delay(100);
tone(SPEAKER_PIN, NOTE_AS5);
delay(33);
noTone(SPEAKER_PIN);
delay(100);
tone(SPEAKER_PIN, NOTE_AS5);
delay(33);
noTone(SPEAKER_PIN);
delay(100);
tone(SPEAKER_PIN, NOTE_C6);
digitalWrite(strobePin, HIGH);
digitalWrite(laserPins[i], LOW);
delay(800);
noTone(SPEAKER_PIN);
digitalWrite(strobePin, LOW);
digitalWrite(laserPins[i], HIGH);
}
}
uint64_t loseSong() {
for (byte i = 0; i < 5; i++) {
digitalWrite(laserPins[i], HIGH);
}
delay(200);
tone(SPEAKER_PIN, NOTE_C5);
delay(200);
noTone(SPEAKER_PIN);
delay(200);
tone(SPEAKER_PIN, NOTE_G4);
delay(200);
noTone(SPEAKER_PIN);
delay(200);
tone(SPEAKER_PIN, NOTE_E4);
delay(200);
noTone(SPEAKER_PIN);
delay(100);
tone(SPEAKER_PIN, NOTE_A4);
delay(200);
tone(SPEAKER_PIN, NOTE_B4);
delay(210);
tone(SPEAKER_PIN, NOTE_A4);
delay(220);
tone(SPEAKER_PIN, NOTE_GS4);
delay(230);
tone(SPEAKER_PIN, NOTE_AS4);
delay(230);
tone(SPEAKER_PIN, NOTE_GS4);
delay(230);
tone(SPEAKER_PIN, NOTE_G4);
delay(230);
tone(SPEAKER_PIN, NOTE_DS4);
delay(230);
tone(SPEAKER_PIN, NOTE_E4);
digitalWrite(strobePin, HIGH);
delay(400);
noTone(SPEAKER_PIN);
digitalWrite(strobePin, LOW);
}
int startUp() {
delay(500);
tone(SPEAKER_PIN, NOTE_E4);
for (byte i = 0; i < 5; i++) {
digitalWrite(laserPins[i], HIGH);
}
delay(150);
digitalWrite(53, LOW);
tone(SPEAKER_PIN, NOTE_G4);
delay(150);
digitalWrite(51, LOW);
tone(SPEAKER_PIN, NOTE_E5);
delay(150);
digitalWrite(49, LOW);
tone(SPEAKER_PIN, NOTE_C5);
delay(150);
digitalWrite(47, LOW);
tone(SPEAKER_PIN, NOTE_D5);
delay(150);
digitalWrite(45, LOW);
tone(SPEAKER_PIN, NOTE_G5);
delay(150);
digitalWrite(43, LOW);
noTone(SPEAKER_PIN);
delay(500);
for (byte i = 0; i < 5; i++) {
digitalWrite(laserPins[i], HIGH);
}
digitalWrite(strobePin, HIGH);
tone(SPEAKER_PIN, NOTE_B0);
delay(1250);
noTone(SPEAKER_PIN);
digitalWrite(strobePin, LOW);
}
int level() {
while (difficulty > 5) {
receiver.enableIRIn();
delay(1000);
if (receiver.decode()) {
if (receiver.decodedIRData.decodedRawData == 0xCF30FF00) {
difficulty = (1);
}
if (receiver.decodedIRData.decodedRawData == 0xE718FF00) {
difficulty = (2);
}
if (receiver.decodedIRData.decodedRawData == 0x857AFF00) {
difficulty = (3);
}
if (receiver.decodedIRData.decodedRawData == 0xEF10FF00) {
difficulty = (4);
}
if (receiver.decodedIRData.decodedRawData == 0xC738FF00) {
difficulty = (5);
}
delay(1500);
Serial.println(difficulty);
}
}
}
int game() {
for (byte i = 0; i < difficulty ; i++) {
digitalWrite(laserPins[i], LOW);
}
while (lifes > 0) {
if (digitalRead(ouchPin) == LOW)
{ digitalWrite(strobePin, HIGH);
tone(SPEAKER_PIN, NOTE_DS2);
delay(100);
tone(SPEAKER_PIN, NOTE_D2);
delay(100);
tone(SPEAKER_PIN, NOTE_CS2);
delay(100);
digitalWrite(strobePin, LOW);
noTone(SPEAKER_PIN);
lifes = lifes - 1;
winLose = 0;
}
if (digitalRead(winPin) == LOW)
{
lifes = lifes - lifes;
winLose == 1;
}
}
if (winLose == 0) {
loseSong();
}
else {
winSong();
}
}
void setup() {
Serial.begin(9600);
for (byte i = 0; i < 5; i++) {
pinMode(laserPins[i], OUTPUT);
}
pinMode(SPEAKER_PIN, OUTPUT);
pinMode(strobePin, OUTPUT);
pinMode(winPin, INPUT_PULLUP);
pinMode(ouchPin, INPUT_PULLUP);
pinMode(52, OUTPUT);
digitalWrite(52, HIGH);
delay(1500);
}
void loop() {
startUp();
level();
game();
digitalWrite(laserPins[5], HIGH);
delay(4000);
lifes = 3;
difficulty = 6;
}
// put your main code here, to run repeatedly: