#include <Button.h>
#include <Tone.h>
#define ERROR_WINDOW 20
int whichButton;
int analogPin = 1;
int curNote=19;
int curNote2;
int curNote3;
unsigned long buttonLastChecked = 0;
unsigned long pt = 0;
Button btnred_in = Button(8,PULLDOWN);
Button btnred_dec = Button(12,PULLDOWN);
int btn=4;
int led =9;
int led2 =3;
int led3 =2;
boolean musicOn=false;
Tone stereo[2];
int chords1[]={
19,20,21,22,24,25,26,28,29,31,33,35};
int curOctave=3;
void setup(){
pinMode(led, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(btn,INPUT);
Serial.begin(9600);
stereo[0].begin(6);
stereo[1].begin(11);
Serial.println("ready");
}
void loop(){
if(curOctave==3){
digitalWrite(led2,HIGH);
}else{
digitalWrite(led2,LOW);
}
if(curOctave==10){
digitalWrite(led3,HIGH);
}else{
digitalWrite(led3,LOW);
}
if(btnred_in.uniquePress()){
raisingOctave();
}
if(btnred_dec.uniquePress()){
loweringOctave();
}
if(digitalRead(btn)){
musicOn=true;
digitalWrite(led,HIGH);
}
else{
musicOn=false;
digitalWrite(led,LOW);
}
if( millis() - buttonLastChecked > BUTTONDELAY ) {
if( int buttNum = buttonPushed(analogPin) ) {
Serial.print("Button ");
Serial.println(buttNum);
if(musicOn){
curNote=chords1[buttNum-1];
playIt();
}
}
else{
stereo[0].stop();
stereo[1].stop();
}
buttonLastChecked = millis();
}
}
void playIt(){
Serial.print("curOctave=");
Serial.println(curOctave);
Serial.print("note=");
Serial.println(curNote*int(pow(2,curOctave)));
stereo[0].play(curNote*int(pow(2,curOctave)));
}
int buttonPushed(int pinNum) {
int val = 0;
digitalWrite((14+pinNum), HIGH);
val = analogRead(pinNum);
#ifdef DEBUG_ON
int val2=map(val,0,1023,0,255);
analogWrite(ledPin, val2);
#endif
if ( val >= (941-ERROR_WINDOW) && val <= (941+ERROR_WINDOW) ) {
return 1;
}
else if ( val >= (863-ERROR_WINDOW) && val <= (863+ERROR_WINDOW) ) {
return 2;
}
else if ( val >= (786-ERROR_WINDOW) && val <= (786+ERROR_WINDOW) ) {
return 3;
}
else if( val >= (710-ERROR_WINDOW) && val <= (710+ERROR_WINDOW) ) {
return 4;
}
else if( val >= (635-ERROR_WINDOW) && val <= (635+ERROR_WINDOW) ) {
return 5;
}
else if( val >= (558-ERROR_WINDOW) && val <= (558+ERROR_WINDOW) ) {
return 6;
}
else if( val >= (479-ERROR_WINDOW) && val <= (479+ERROR_WINDOW) ) {
return 7;
}
else if( val >= (398-ERROR_WINDOW) && val <= (398+ERROR_WINDOW) ) {
return 8;
}
else if( val >= (311-ERROR_WINDOW) && val <= (311+ERROR_WINDOW) ) {
return 9;
}
else if( val >= (221-ERROR_WINDOW) && val <= (221+ERROR_WINDOW) ) {
return 10;
}
else if( val >= (122-ERROR_WINDOW) && val <= (122+ERROR_WINDOW) ) {
return 11;
}
else if( val >=0 && val <= (14+ERROR_WINDOW) ) {
return 12;
}
else
return 0;
}
void raisingOctave(){
if(curOctave<10){
curOctave++;
}else{
curOctave=10;
}
Serial.println(curOctave);
playIt();
}
void loweringOctave(){
if(curOctave>3){
curOctave--;
Serial.println(curOctave);
playIt();
}else{
curOctave=3;
}
}