IDEA:
I would have the pads laid on the floor and use longer wires to create a bigger space.
user testing:
THINGS TO WORK ON
- User testing feedback
- shorten the melody line
- allow players to practice and familiarize the notes
- Display ranking
- Aesthetics and physical decorations
- wooden box to contain the breadboard and Arduino Uno
- square pieces to package the pads
//Processing codes /* 1. fix the melody 2. display ranking 3. aesthetics and physical decoration */ /* name: Chi-Ting Tsai assignment: final project date: 12/07/2021 "Smash Your Memory" */ import processing.sound.*; SoundFile demoMelody; SoundFile recC; SoundFile recD; SoundFile recE; SoundFile recG; SoundFile recA; int size = 200; color frame = color(237, 168, 17); int stage = 0; int noteC = 1; int noteD = 2; int noteE = 3; int noteG = 5; int noteA = 6; int[] correctMelody = {noteD, noteC, noteE, noteD, noteG, noteA, noteG, noteE, noteD, noteC}; void setup() { size (1024, 768); printArray(Serial.list()); String portname=Serial.list()[3]; println(portname); myPort = new Serial(this, portname, 9600); myPort.clear(); myPort.bufferUntil('\n'); demoMelody = new SoundFile (this, "/Users/chi-tingtsai/Downloads/10.wav"); recC = new SoundFile (this, "/Users/chi-tingtsai/Downloads/C.wav"); recD = new SoundFile (this, "/Users/chi-tingtsai/Downloads/D.wav"); recE = new SoundFile (this, "/Users/chi-tingtsai/Downloads/E.wav"); recG = new SoundFile (this, "/Users/chi-tingtsai/Downloads/G.wav"); recA = new SoundFile (this, "/Users/chi-tingtsai/Downloads/A.wav"); } void draw() { if (stage == 0) { ranking(); } else if (stage == 1) { rules(); } else if (stage == 2) { game(); } else if (stage == 3) { lose(); } else if (stage ==4) { win(); } } //display ranking void ranking() { background(color(99, 144, 130)); PFont F = createFont("PatuaOne-Regular", 1); fill(255); textAlign(CENTER); //Game title textFont(F, 50); text("Smash Your Memory", width/2, height/2-50); //explain how to start textFont(F, 30); text("Smash Covid to Begin Game", width/2, height*3/4); //frame noStroke(); rectMode(CENTER); fill(frame); rect(width/2, 10, width, 20); rect(width/2, height-10, width, 20); rect(10, height/2, 20, height); rect(width-10, height/2, 20, height); } void rules() { background(color(99, 144, 130)); PFont F = createFont("PatuaOne-Regular", 1); fill(255); textAlign(CENTER); //explain how to play textFont(F, 50); text("RULES", width/2, height/4); textFont(F, 30); text("Listen to the pentatonic melody played after this scene.\n It's only going to play once!\n Smash the corresponding pads to recreate the melody!\nC: COVID\nD: Deadlines\nE: course Enrollment\nG: GPA\nA: Anxiety", width/2, height/2-120); textFont(F, 30); text("Smash course Enrollment to listen to the melody and begin!", width/2, height-110); //frame noStroke(); rectMode(CENTER); fill(frame); rect(width/2, 10, width, 20); rect(width/2, height-10, width, 20); rect(10, height/2, 20, height); rect(width-10, height/2, 20, height); } import processing.serial.*; Serial myPort; int aSignal = 0; int prevASignal = 3; int val = 0; void game() { //background background(color(99, 144, 130)); fill(255); PFont F = createFont("PatuaOne-Regular", 1); textAlign(CENTER); textFont(F, 50); text("Listen Carefully and Recreate!", width/2, height/2-50); } void serialEvent(Serial myPort) { String s=myPort.readStringUntil('\n'); s=trim(s); if (s!= null) { aSignal = parseInt(s); //println("signal from arduino: " + s); //scene transition if (stage == 0 && aSignal == noteC) { recC.play(); stage = 1; } //if (stage == 1 && aSignal == noteD) { // demoMelody.play(); //} if (stage == 1 && aSignal == noteE) { stage = 2; demoMelody.play(); } if ((stage == 3 || stage == 4) && aSignal == noteG) { recG.play(); stage = 0; } //note playing and verification if (stage == 2 && prevASignal!= aSignal) { println("number stored in the array: " + aSignal); if (aSignal == noteC) { recC.play(); } else if (aSignal == noteD) { recD.play(); } else if (aSignal == noteE) { recE.play(); } else if (aSignal == noteG) { recG.play(); } else if (aSignal == noteA) { recA.play(); } //verify note in array if (correctMelody[val] == aSignal) { //change circle color val++; prevASignal = aSignal; if (val == 10) { stage = 4; } } else { //change circle color delay(5000); stage = 3; } } } myPort.write('\n'); } void lose() { background(color(99, 144, 130)); PFont F = createFont("PatuaOne-Regular", 1); noStroke(); fill(255); textFont(F, 80); text("Not the right note!", width/2, height/2); textFont(F, 50); text("Awwww... Smash GPA to see your ranking and restart.", width/2, height/2+50); } void win() { background(color(99, 144, 130)); PFont F = createFont("PatuaOne-Regular", 1); noStroke(); fill(255); textFont(F, 80); text("Congratulations! You have done it!", width/2, height/2); textFont(F, 50); text("Have you found your peace by smashing those that give off negative energy?", width/2, height/2-50); textFont(F, 30); text("Smash GPA to see your ranking", width/2, height/2+50); }
//Arduino codes //variable declaration const int C = 1; const int D = 2; const int E = 3; const int G = 5; const int A = 6; const int in_C = 2; const int in_D = 3; const int in_E = 4; const int in_G = 5; const int in_A = 6; const int speaker_Pin = 8; const int led_C = 9; const int led_D = 10; const int led_E = 11; const int led_G = 12; const int led_A = 13; int switch_C, switch_D, switch_E, switch_G, switch_A = 0; int smash = 0; void setup() { // put your setup code here, to run once: pinMode(in_C, INPUT); pinMode(in_D, INPUT); pinMode(in_E, INPUT); pinMode(in_G, INPUT); pinMode(in_A, INPUT); pinMode(speaker_Pin, OUTPUT); pinMode(led_C, OUTPUT); pinMode(led_D, OUTPUT); pinMode(led_E, OUTPUT); pinMode(led_G, OUTPUT); pinMode(led_A, OUTPUT); Serial.begin(9600); Serial.println("0"); } void loop() { // put your main code here, to run repeatedly: switch_C = digitalRead(in_C); switch_D = digitalRead(in_D); switch_E = digitalRead(in_E); switch_G = digitalRead(in_G); switch_A = digitalRead(in_A); while (Serial.available()) { if (Serial.read() == '\n') { //Note C if (switch_C == 1) { //released, if the two aluminum foils touch digitalWrite(led_C, HIGH); //turns on LED smash = C; } else if (switch_C && switch_D && switch_E && switch_G && switch_A == 0) { //released, if the two aluminum foils part digitalWrite (led_C, LOW); //turns off LED smash = 0; }; //Note D if (switch_D == 1) { //released, if the two aluminum foils touch digitalWrite(led_D, HIGH); //turns on LED smash = D; } else if (switch_C && switch_D && switch_E && switch_G && switch_A == 0) { //released, if the two aluminum foils part digitalWrite (led_D, LOW); //turns off LED smash = 0; }; //Note E if (switch_E == 1) { //released, if the two aluminum foils touch digitalWrite(led_E, HIGH); //turns on LED smash = E; } else if (switch_C && switch_D && switch_E && switch_G && switch_A == 0) { //released, if the two aluminum foils part digitalWrite (led_E, LOW); //turns off LED smash = 0; }; //Note G if (switch_G == 1) { //released, if the two aluminum foils touch digitalWrite(led_G, HIGH); //turns on LED smash = G; } else if (switch_C && switch_D && switch_E && switch_G && switch_A == 0) { //released, if the two aluminum foils part digitalWrite (led_G, LOW); //turns off LED smash = 0; }; //Note A if (switch_A == 1) { //released, if the two aluminum foils touch digitalWrite(led_A, HIGH); //turns on LED smash = A; } else if (switch_C && switch_D && switch_E && switch_G && switch_A == 0) { //released, if the two aluminum foils part digitalWrite (led_A, LOW); //turns off LED smash = 0; } Serial.println(smash); } } // Serial.print("smash: "); // Serial.println(smash); // Serial.print("C: "); // Serial.println(switch_C); // Serial.print("D: "); // Serial.println(smash); // Serial.print("E: "); // Serial.println(smash); // Serial.print("G: "); // Serial.println(smash); // Serial.print("A: "); // Serial.println(smash); }