//
// SongArray.cpp
//
//
// Created by Graham Gier on 10/9/12.
//
//
#include <Myro.h>
#include <math.h>
#include <stdio.h>
#include <iostream>
#include <cstdlib>
using namespace std;
void fightsong();
void eighteen();
void SingPokemon();
void storms();
void Viva();
void PlayNote(string note, string duration);
int main();
double a = 880;
double b= 987.77;
double c = 1046.5;
double d = 1174.66;
double e = 1318.51;
double f = 1396.9;
double g = 1567.98;
double beat = (60.0/176);
float D5 = 587.33;
float Eb5 = 622.25;
float E5 = 659.26;
float F5 = 698.46;
float Gb5 = 739.99;
float G5 = 783.99;
float Ab5 = 830.61;
float A5 = 880.00;
float Bb5 = 932.33;
float B5 = 984.77;
float C6 = 1046.50;
float Db6 = 1108.73;
float D6 = 1174.66;
float Eb6 = 1244.51;
float E6 = 1318.51;
float F6 = 1396.91;
float Gb6 = 1479.98;
float G6 = 1567.98;
float Ab6 = 1661.22;
float A6 = 1760.00;
float Bb6 = 1864.66;
float B6 = 1975.53;
float C7 = 2093.00;
float Db7 = 2217.46;
float D7 = 2349.32;
float Eb7 = 2489.02;
float E7 = 2637.02;
float F7 = 2793.83;
float uBPM;
const int MAX = 5;
const int MAX2 = 4;
void fightsong()
{
robot.beep((1.0/3.0)*beat,1046.50);
robot.beep((2.0/3.0)*beat,0.0);
//1
robot.beep((2.0)*beat,1046.50);
robot.beep((2.0/3.0)*beat,0.0);
robot.beep((1.0/3.0)*beat,880.000);
robot.beep((0)*beat,0.0);
robot.beep((1.0/3.0)*beat,932.328);
robot.beep((1.0/3.0)*beat,0.0);
robot.beep((1.0/3.0)*beat,783.991);
robot.beep((0)*beat,0.0);
//2
robot.beep((2)*beat,880.000);
robot.beep((2.0/3.0)*beat,0.0);
robot.beep((1.0/3.0)*beat,698.456);
robot.beep((0)*beat,0.0);
robot.beep((1.0/3.0)*beat,659.255);
robot.beep((1.0/3.0)*beat,0.0);
robot.beep((1.0/3.0)*beat,587.330);
robot.beep((0)*beat,0.0);
//3
robot.beep((2)*beat,523.251);
robot.beep((2.0/3.0)*beat,0.0);
robot.beep((1.0/3.0)*beat,880.000);
robot.beep((0)*beat,0.0);
robot.beep((1.0/3.0)*beat,932.328);
robot.beep((1.0/3.0)*beat,0.0);
robot.beep((1.0/3.0)*beat,659.255);
robot.beep((0)*beat,0.0);
//4
robot.beep((2)*beat,698.456);
robot.beep((1)*beat,0.0);
robot.beep((1.0/3.0)*beat,1046.50);
robot.beep((2.0/3.0)*beat,0.0);
//5
robot.beep((2)*beat,1046.50);
robot.beep((2.0/3.0)*beat,0.0);
robot.beep((1.0/3.0)*beat,880.000);
robot.beep((0)*beat,0.0);
robot.beep((1.0/3.0)*beat,932.328);
robot.beep((1.0/3.0)*beat,0.0);
robot.beep((1.0/3.0)*beat,783.991);
robot.beep((0)*beat,0.0);
//6
robot.beep((2)*beat,880.000);
robot.beep((2.0/3.0)*beat,0.0);
robot.beep((1.0/3.0)*beat,698.456);
robot.beep((0)*beat,0.0);
robot.beep((1.0/3.0)*beat,659.255);
robot.beep((1.0/3.0)*beat,0.0);
robot.beep((1.0/3.0)*beat,587.330);
robot.beep((0)*beat,0.0);
//7
robot.beep((2)*beat,523.251);
robot.beep((2.0/3.0)*beat,0.0);
robot.beep((1.0/3.0)*beat,880.000);
robot.beep((0)*beat,0.0);
robot.beep((1.0/3.0)*beat,932.328);
robot.beep((1.0/3.0)*beat,0.0);
robot.beep((1.0/3.0)*beat,659.255);
robot.beep((0)*beat,0.0);
//8
robot.beep((1.0/3.0)*beat,698.456);
robot.beep((1.0/3.0)*beat,0.0);
robot.beep((1.0/3.0)*beat,523.251);
robot.beep((0)*beat,0.0);
robot.beep((1.0/3.0)*beat,698.456);
robot.beep((1.0/3.0)*beat,0.0);
robot.beep((1.0/3.0)*beat,880.000);
robot.beep((0)*beat,0.0);
robot.beep((1.0/3.0)*beat,1046.50);
robot.beep((2.0/3.0)*beat,0.0);
robot.beep((5.0/6.0)*beat,659.255);
robot.beep((1.0/6.0)*beat,0.0);
//9
robot.beep((1.0/3.0)*beat,698.456);
robot.beep((1.0/3.0)*beat,0.0);
robot.beep((1.0/3.0)*beat,523.251);
robot.beep((0)*beat,0.0);
robot.beep((1.0/3.0)*beat,698.456);
robot.beep((1.0/3.0)*beat,0.0);
robot.beep((1.0/3.0)*beat,880.000);
robot.beep((0)*beat,0.0);
robot.beep((1.0/3.0)*beat,1046.50);
robot.beep((2.0/3.0)*beat,0.0);
robot.beep((5.0/6.0)*beat,659.255);
robot.beep((1.0/6.0)*beat,0.0);
//10
robot.beep((2)*beat,698.456);
return;
}
void eighteen()
{
robot.beep(.2, 783);
robot.beep(.2, 1046.5);
robot.beep(.2, 1174.66);
robot.beep(.2, 1318.5);
robot.beep(.2, 1174.66);
robot.beep(.2, c);
robot.beep(.2, 1174.66);
robot.beep(.4, e);
robot.beep(.4, c);
robot.beep(.8, c);
wait(.2);
robot.beep(.2, 783);
robot.beep(.2, 1046.5);
robot.beep(.2, 1174.66);
robot.beep(.2, 1318.5);
robot.beep(.2, 1174.66);
robot.beep(.2, c);
robot.beep(.2, 1174.66);
robot.beep(.4, e);
robot.beep(.4, c);
robot.beep(.8, c);
wait(.2);
robot.beep(.2, a);
robot.beep(.2, d);
robot.beep(.2, e);
robot.beep(.2, d);
robot.beep(.2, a);
robot.beep(.2, 698.46);
robot.beep(.2, a);
robot.beep(.2, d);
robot.beep(.2, a);
robot.beep(.2, 698.46);
robot.beep(.2, a);
robot.beep(.8,d);
wait(.2);
robot.beep(.2,783.99);
robot.beep(.2, c);
robot.beep(.2, d);
robot.beep(.2, e);
robot.beep(.2, d);
robot.beep(.2, c);
robot.beep(.2, d);
robot.beep(.4, e);
robot.beep(.4, c);
robot.beep(.8, c);
wait(.2);
robot.beep(.2, 783);
robot.beep(.2, 1046.5);
robot.beep(.2, 1174.66);
robot.beep(.2, 1318.5);
robot.beep(.2, 1174.66);
robot.beep(.2, c);
robot.beep(.2, 1174.66);
robot.beep(.4, e);
robot.beep(.4, c);
robot.beep(.8, c);
wait(.2);
robot.beep(.133333, a);
robot.beep(.133333, a);
robot.beep(.133333, a);
robot.beep(.4, c);
robot.beep(.4, a);
wait(.4);
robot.beep(.133333, a);robot.beep(.133333, a);robot.beep(.133333, a);
robot.beep(.4, b);
robot.beep(.4, 783.99);
wait(.4);
robot.beep(.133333, a);robot.beep(.133333, a);robot.beep(.133333, a);
robot.beep(.4, 932.33);
robot.beep(.4, a);
robot.beep(.4, c);
robot.beep(.4, b);
robot.beep(.4, d);
robot.beep(.4, c);
robot.beep(.2666666, g);
robot.beep(.2666666, 1479.98);
robot.beep(.2666666, f);
robot.beep(.2666666,e);
robot.beep(.2666666, 1244.51);
robot.beep(.2666666,d);
robot.beep(.2666666, 1108.73);
robot.beep(.2666666, c);
robot.beep(.2666666, b);
robot.beep(.2666666, 932.33);
robot.beep(.2666666, a);
robot.beep(.2666666, 830.61);
robot.beep(.2666666, 783.99);
wait(.4);
robot.beep(.4, 830.61);
wait(.4);
robot.beep(.4, a);
wait(.4);
robot.beep(.4, b);
wait(.4);
robot.beep(.2, c);
robot.beep(.2, 783.99);
robot.beep(.2, c);
robot.beep(.2, d);
robot.beep(.2, e);
robot.beep(.2, d);
robot.beep(.2, c);
robot.beep(.2, d);
robot.beep(.4, e);
wait(.4);
robot.beep(.4, e);
robot.beep(.6, c);
return;
}
void PlayNote(string note, string duration)
{
double freq;
double time;
// freq
if (note == "G5")
{
freq = 783.99;
}
else if (note == "B5")
{
freq = 987.77;
}
else if (note == "C6")
{
freq = 1046.50;
}
else if (note == "D6")
{
freq = 1174.66;
}
else if (note == "D#6")
{
freq = 1244.51;
}
else if (note == "E6")
{
freq = 1318.51;
}
else if (note == "F6")
{
freq = 1396.91;
}
else if (note == "G6")
{
freq = 1567.98;
}
else if (note == "A6")
{
freq = 1760.00;
}
else if (note == "A#6")
{
freq = 1864.66;
}
else if (note == "B6")
{
freq = 1975.53;
}
else if (note == "C7")
{
freq = 2093.00;
}
else if (note == "C#7")
{
freq = 2217.46;
}
else if (note == "D7")
{
freq = 2349.32;
}
else if (note == "Rest")
{
freq = 0.0;
}
// time
if (duration == "1/16")
{
time = 0.1;
}
else if (duration == "1/8")
{
time = 0.2;
}
else if (duration == "1/4")
{
time = 0.4;
}
else if (duration == "3/8")
{
time = 0.6;
}
else if (duration == "1/2")
{
time = 0.8;
}
else if (duration == "5/8")
{
time = 1.0;
}
else if (duration == "3/4")
{
time = 1.2;
}
else if (duration == "1")
{
time = 1.6;
}
else if (duration == "2")
{
time = 3.2;
}
robot.beep(time, freq);
}
void SingPokemon()
{
PlayNote("G5", "3/8");
PlayNote("B5", "1/16");
PlayNote("D6", "1");
PlayNote("F6", "3/8");
PlayNote("E6", "1/16");
PlayNote("D#6", "1/16");
PlayNote("D6", "1");
PlayNote("Rest", "1");
PlayNote("G5", "3/8");
PlayNote("B5", "1/16");
PlayNote("D6", "1");
PlayNote("F6", "1/4");
PlayNote("E6", "1/8");
PlayNote("F6", "1/8");
PlayNote("G6", "3/8");
PlayNote("A6", "1/4");
PlayNote("G6", "1");
PlayNote("Rest", "1");
return;
}
void Viva()
{
for(int i = 0; i < 2; i++)
{
robot.beep(0.3,698.46);
robot.beep(0.3,698.46);
robot.beep(0.2,698.46);
robot.beep(0.2,659.26);
robot.beep(0.2,698.46);
robot.beep(0.5,659.26);
robot.beep(0.2,698.46);
robot.beep(0.3,493.88);
robot.beep(1,554.37);
wait(1);
robot.beep(0.3,659.26);
robot.beep(0.3,659.26);
robot.beep(0.2,659.26);
robot.beep(0.2,493.88);
robot.beep(0.2,659.26);
robot.beep(0.5,493.88);
robot.beep(0.2,369.99);
robot.beep(0.3,415.30);
wait(1);
}
robot.beep(0.3,698.46);
robot.beep(0.3,698.46);
robot.beep(0.2,698.46);
robot.beep(0.2,659.26);
robot.beep(0.5,783.99);
robot.beep(0.2,783.99);
robot.beep(0.2,783.99);
robot.beep(0.5,783.99);
wait(1);
robot.beep(0.3,659.26);
robot.beep(0.3,659.26);
robot.beep(0.3,659.26);
robot.beep(0.2,587.33);
robot.beep(0.2,554.37);
robot.beep(0.5,554.37);
wait(1);
robot.beep(0.2,659.26);
robot.beep(0.3,554.37);
robot.beep(0.3,554.37);
robot.beep(0.5,554.37);
robot.beep(0.2,587.33);
robot.beep(1,493.88);
wait(1);
robot.beep(0.2,369.99);
robot.beep(0.2,493.88);
robot.beep(0.2,440.00);
robot.beep(0.2,369.99);
robot.beep(0.5,369.99);
robot.beep(0.5,493.88);
robot.beep(0.2,369.99);
robot.beep(1,440.00);
wait(5);
return;
}
void storms()
{
float qNote = 60/uBPM;
float eNote = 30/uBPM;
float hNote = 120/uBPM;
float dqNote = 180/uBPM;
wait(2); //Begin song of storms
robot.beep(eNote, D6);//Measure 1
robot.beep(eNote, F6);
robot.beep(hNote, D7);
robot.beep(eNote, D6);
robot.beep(eNote, F6);
robot.beep(hNote, D7);
robot.beep(qNote, E7);
wait(eNote);
robot.beep(eNote, F7);
robot.beep(eNote, E7);
robot.beep(eNote, F7);
robot.beep(eNote, E7);
robot.beep(eNote, C7);
robot.beep(hNote, A6);//end of line 3
robot.beep(qNote, A6);
robot.beep(qNote, D6);
robot.beep(eNote, F6);
robot.beep(eNote, G6);
robot.beep(dqNote, A6);
robot.beep(qNote, A6);
robot.beep(qNote, D6);
robot.beep(eNote, F6);
robot.beep(eNote, G6);
robot.beep(dqNote, E6);//first ending
robot.beep(eNote, D6);//Measure 1, second repeat
robot.beep(eNote, F6);
robot.beep(hNote, D7);
robot.beep(eNote, D6);
robot.beep(eNote, F6);
robot.beep(hNote, D7);
robot.beep(qNote, E7);
wait(eNote);
robot.beep(eNote, F7);
robot.beep(eNote, E7);
robot.beep(eNote, F7);
robot.beep(eNote, E7);
robot.beep(eNote, C7);
robot.beep(hNote, A6);//end of line 3, second repeat
robot.beep(qNote, A6);
robot.beep(qNote, D6);
robot.beep(eNote, F6);
robot.beep(eNote, G6);
robot.beep(hNote, A6);
robot.beep(qNote, A6);
robot.beep(dqNote, D6);
wait(dqNote*3); //end of Section 1, Rehearsal B
robot.beep(eNote, D5);//Rehearsal C
robot.beep(eNote, F5);
robot.beep(hNote, D6);
robot.beep(eNote, D5);
robot.beep(eNote, F5);
robot.beep(hNote, D6);
robot.beep(qNote, E6);
wait(eNote);
robot.beep(eNote, F6);
robot.beep(eNote, E6);
robot.beep(eNote, F6);
robot.beep(eNote, E6);
robot.beep(eNote, C6);
robot.beep(hNote, A5);//end of line 3, second page
robot.beep(qNote, A5);
robot.beep(qNote, D5);
robot.beep(eNote, F5);
robot.beep(eNote, G5);
robot.beep(dqNote, A5);
robot.beep(qNote, A5);
robot.beep(qNote, D5);
robot.beep(eNote, F5);
robot.beep(eNote, G5);
robot.beep(dqNote, E5);//first ending, second page
robot.beep(eNote, D5);//Rehearsal C, second repeat
robot.beep(eNote, F5);
robot.beep(hNote, D6);
robot.beep(eNote, D5);
robot.beep(eNote, F5);
robot.beep(hNote, D6);
robot.beep(qNote, E6);
wait(eNote);
robot.beep(eNote, F6);
robot.beep(eNote, E6);
robot.beep(eNote, F6);
robot.beep(eNote, E6);
robot.beep(eNote, C6);
robot.beep(hNote, A5);//end of line 3, second repeat, second page
robot.beep(qNote, A5);
robot.beep(qNote, D5);
robot.beep(eNote, F5);
robot.beep(eNote, G5);
robot.beep(hNote, A5);
robot.beep(qNote, A5);
robot.beep(dqNote, D5);
wait(2);
return;
}
void stickman()
{
//legs
robot.forward(1, 1);
robot.turnRight(1, 1);
robot.forward(1, 1);
robot.turnLeft(1, 1.55);
robot.forward(1, 1);
robot.turnRight(1, .3);
//body
robot.forward(1, 1.25);
//arms
robot.turnRight(1, 1);
robot.forward(1,.7);
robot.turnLeft(1, 1.55);
robot.forward(1,.7);
robot.turnRight(1, .55);
robot.turnLeft(1,1);
robot.forward(1,.7);
robot.turnRight(1, 1.55);
robot.forward(1,.7);
//head
robot.motors(-.5, 1);
wait(4);
robot.motors(0,0);
return;
}
void heart()
{
connect("/dev/rfcomm0");
robot.motors(1.0, 1.0);
wait(1);
robot.motors(0, 1.0);
wait(3.0);
robot.motors(1.0, -1.0);
wait(0.8);
robot.motors(0, 1.0);
wait(3.2);
robot.motors(1.0, 1.0);
wait(1.1);
cout << "Disconnecting" << endl;
disconnect();
return;
}
void DrawPokeball()
{
cout << "Moving\n";
robot.motors(1.0/7.0, 1);
wait(7.0*3.14159/3.0);
robot.turnLeft(1, 0.75);
robot.forward(1, 0.4);
robot.turnRight(1, 0.75);
robot.motors(-.5, 1);
wait(2.0*3.14159);
robot.turnRight(1, 0.75);
robot.forward(1, 0.4);
robot.stop();
return;
}
void randomdraw()
{
for(int i=0; i<20; i++)
{
robot.forward(rand());
robot.turnRight((double) rand());
robot.backward(rand());
}
}
int main()
{
srand (time(NULL));
connect("/dev/tty.Fluke2-0221-Fluke2");
int playlist[MAX];
int drawlist[MAX2];
for(int i =0; i<MAX; i++)
{
cout << "Choose a song. 0= fight song, 1= 1812 overture, 2 = pokemon, 3= viva la vida, 4 = song of storms" << endl;
cin >> playlist[i];
}
for(int i=0; i<MAX; i++)
{
cout << "Song " << i << " is:";
if (playlist[i] == 0) cout<< "The Trojan Fight Song"<<endl;
else if (playlist[i] == 1) cout<< "The 1812 Overture"<<endl;
else if (playlist[i] == 2) cout<<"The Pokémon Fight Song"<<endl;
else if (playlist[i] == 3) cout<<"Viva la Vida"<<endl;
else if (playlist[i] == 4) cout<<"The Song of Storms"<<endl;
else cout << "invalid choice"<< endl;
}
for( int i = 0; i<MAX; i++)
{
if (playlist[i] == 0) fightsong();
if (playlist[i] == 1) eighteen();
if (playlist[i] == 2) SingPokemon();
if (playlist[i] == 3) Viva();
if (playlist[i] == 4) storms();
}
for (int i = 0; i<MAX2; i++)
{
cout << "Choose a drawing. 0= Stick figure, 1 = heart, 2 = pokéball 3= random"<<endl;
cin>>drawlist[i];
}
for(int i = 0; i<MAX2; i++)
{
cout << "Drawing " << i << " is:";
if (drawlist[i] == 0) cout<<"A stick figure"<<endl;
else if (drawlist[i] == 1) cout <<"A heart"<<endl;
else if (drawlist[i] == 2) cout <<"A Pokéball"<<endl;
else if (drawlist[i] == 3) cout <<"Random"<<endl;
else cout<<"invalid"<<endl;
}
for (int i =0; i<MAX2; i++)
{
switch (drawlist[i])
{
case 0:stickman();
break;
case 1: heart();
break;
case 2: DrawPokeball();
break;
case 3: randomdraw();
break;
default: cout<<"invalid"<<endl;
break;
}
}
disconnect();
return 0;
}