So, I changed my mind about which idea to pursue for my final project. I decided to use the instrument Gopika and I made a few weeks ago, and have users mimic a snippet of a song that was played by using the instrument.
Unfortunately I wasn’t able to complete user testing yet, however I have someone lined up after class, and I will update this post with their feedback.
The professor suggested that I use Sforzando and Processing to play the songs, so that they sound better than the buzzer on an Arduino board, and so that is what I will be doing this class.
However, I have a working version that uses the Piezo buzzer on the Arduino, which plays a section of Ode to Joy, which the user than then mimic by playing the instrument themselves.
String notes6[7] = {"C4", "D4", "E4", "F4", "G4", "A4", "B4"};
int notesLow[7] = {NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4};
char notes[] = "eefggfedccdeedd ";
int beats[] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,2};
pinMode(trigPinC, OUTPUT);
pinMode(echoPinC, INPUT);
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, LOW);
// put your main code here, to run repeatedly:
digitalWrite(trigPinC, LOW);
digitalWrite(trigPinC, HIGH);
digitalWrite(trigPinC, LOW);
durationC = pulseIn(echoPinC, HIGH);
distanceC = durationC * 0.034 / 2;
Serial.print("DistanceC: ");
Serial.print("mapped: ");
Serial.println("Button Not Pushed");
int constrainedInput=constrain(distanceC, 0, 70);
int mappedNoteC = map(constrainedInput, 1, 70, 0, 7);
tone(4, notesLow[mappedNoteC]);
Serial.println(notes6[mappedNoteC]);
if (digitalRead(buttonPin) == HIGH){
for (i = 0; i < songLength; i++){
duration = beats[i]*tempo;
tone(buzzer, frequency(notes[i]), duration);
int frequency(char note){
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int frequencies[] = {262, 294, 330, 349, 392, 440, 494, 523};
for (i = 0; i < numNotes; i++){
#define echoPinC 12
#define trigPinC 11
# include "pitches.h"
String notes6[7] = {"C4", "D4", "E4", "F4", "G4", "A4", "B4"};
int notesLow[7] = {NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4};
const int buttonPin = 2;
const int buzzer = 4;
int songLength = 17;
char notes[] = "eefggfedccdeedd ";
int beats[] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,2};
int tempo = 288;
long durationC;
int distanceC;
void setup() {
pinMode(trigPinC, OUTPUT);
pinMode(echoPinC, INPUT);
pinMode(buttonPin, INPUT);
pinMode(buzzer, OUTPUT);
digitalWrite(buttonPin, LOW);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(trigPinC, LOW);
delayMicroseconds(2);
digitalWrite(trigPinC, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinC, LOW);
durationC = pulseIn(echoPinC, HIGH);
distanceC = durationC * 0.034 / 2;
Serial.print("DistanceC: ");
Serial.print(distanceC);
Serial.print(" cm");
Serial.print("mapped: ");
digitalRead(buttonPin);
if(buttonPin == LOW){
Serial.println("Button Not Pushed");
}
int constrainedInput=constrain(distanceC, 0, 70);
int mappedNoteC = map(constrainedInput, 1, 70, 0, 7);
if(distanceC > 70){
noTone(4);
}else{
tone(4, notesLow[mappedNoteC]);
}
Serial.println(notes6[mappedNoteC]);
int i, duration;
if (digitalRead(buttonPin) == HIGH){
for (i = 0; i < songLength; i++){
duration = beats[i]*tempo;
if (notes[i] == ' '){
delay(duration);
}else{
tone(buzzer, frequency(notes[i]), duration);
delay(duration);
}
delay(tempo/10);
}
}
}
int frequency(char note){
int i;
const int numNotes = 8;
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int frequencies[] = {262, 294, 330, 349, 392, 440, 494, 523};
for (i = 0; i < numNotes; i++){
if (names[i] == note){
return(frequencies[i]);
}
}
return(0);
}
#define echoPinC 12
#define trigPinC 11
# include "pitches.h"
String notes6[7] = {"C4", "D4", "E4", "F4", "G4", "A4", "B4"};
int notesLow[7] = {NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4};
const int buttonPin = 2;
const int buzzer = 4;
int songLength = 17;
char notes[] = "eefggfedccdeedd ";
int beats[] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,2};
int tempo = 288;
long durationC;
int distanceC;
void setup() {
pinMode(trigPinC, OUTPUT);
pinMode(echoPinC, INPUT);
pinMode(buttonPin, INPUT);
pinMode(buzzer, OUTPUT);
digitalWrite(buttonPin, LOW);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(trigPinC, LOW);
delayMicroseconds(2);
digitalWrite(trigPinC, HIGH);
delayMicroseconds(10);
digitalWrite(trigPinC, LOW);
durationC = pulseIn(echoPinC, HIGH);
distanceC = durationC * 0.034 / 2;
Serial.print("DistanceC: ");
Serial.print(distanceC);
Serial.print(" cm");
Serial.print("mapped: ");
digitalRead(buttonPin);
if(buttonPin == LOW){
Serial.println("Button Not Pushed");
}
int constrainedInput=constrain(distanceC, 0, 70);
int mappedNoteC = map(constrainedInput, 1, 70, 0, 7);
if(distanceC > 70){
noTone(4);
}else{
tone(4, notesLow[mappedNoteC]);
}
Serial.println(notes6[mappedNoteC]);
int i, duration;
if (digitalRead(buttonPin) == HIGH){
for (i = 0; i < songLength; i++){
duration = beats[i]*tempo;
if (notes[i] == ' '){
delay(duration);
}else{
tone(buzzer, frequency(notes[i]), duration);
delay(duration);
}
delay(tempo/10);
}
}
}
int frequency(char note){
int i;
const int numNotes = 8;
char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
int frequencies[] = {262, 294, 330, 349, 392, 440, 494, 523};
for (i = 0; i < numNotes; i++){
if (names[i] == note){
return(frequencies[i]);
}
}
return(0);
}