Skip to content

Instantly share code, notes, and snippets.

@fbrosser
Created January 28, 2018 08:05
Show Gist options
  • Save fbrosser/61cb974c679c202b28c5afa77eed1a76 to your computer and use it in GitHub Desktop.
Save fbrosser/61cb974c679c202b28c5afa77eed1a76 to your computer and use it in GitHub Desktop.
Piezo piano
int IMLength = 70;
String IMNotes[] = {"G4","G4", "G4", "D#4/Eb4", "A#4/Bb4", "G4", "D#4/Eb4","A#4/Bb4", "G4", "D5", "D5", "D5", "D#5/Eb5", "A#4/Bb4", "F#4/Gb4", "D#4/Eb4","A#4/Bb4", "G4", "G5","G4","G4","G5","F#5/Gb5", "F5","E5","D#5/Eb5","E5", "rest", "G4", "rest","C#5/Db5","C5","B4","A#4/Bb4","A4","A#4/Bb4", "rest", "D#4/Eb4", "rest", "F#4/Gb4", "D#4/Eb4","A#4/Bb4", "G4" ,"D#4/Eb4","A#4/Bb4", "G4"};
int IMBeats[] = {8, 8, 8, 6, 2, 8, 6, 2, 16, 8, 8, 8, 6, 2, 8, 6, 2, 16, 8, 6, 2, 8, 6, 2, 2, 2, 2, 6, 2, 2, 8, 6, 2, 2, 2, 2, 6, 2, 2, 9, 6, 2, 8, 6, 2, 16};
int IMTempo = 50;
int RTLength = 19;
String RTNotes[] = {"F4", "F4", "F4", "A#4/Bb4", "F5", "D#5/Eb5", "D5", "C5", "A#5/Bb5", "F5", "D#5/Eb5", "D5", "C5", "A#5/Bb5", "F5", "D#5/Eb5", "D5", "D#5/Eb5", "C5"};
int RTBeats[] = {21, 21, 21, 128, 128, 21, 21, 21, 128, 64, 21, 21, 21, 128, 64, 21, 21, 21, 128};
int RTTempo = 50;
String noteNames[] = { "D#4/Eb4", "E4", "F4", "F#4/Gb4", "G4", "G#4/Ab4", "A4", "A#4/Bb4", "B4", "C5", "C#5/Db5", "D5", "D#5/Eb5", "E5", "F5", "F#5/Gb5", "G5", "G#5/Ab5", "A5", "A#5/Bb5", "B5", "C6", "C#6/Db6", "D6", "D#6/Eb6", "E6", "F6", "F#6/Gb6", "G6" };
int tones[] = { 1607, 1516, 1431, 1351, 1275, 1203, 1136, 1072, 1012, 955, 901, 851, 803, 758, 715, 675, 637, 601, 568, 536, 506, 477, 450, 425, 401, 379, 357, 337, 318 };
int blueLEDPin = 0;
int redLEDPin = 1;
int buttonCPin = 2;
int buttonDPin = 3;
int buttonEPin = 4;
int buttonFPin = 5;
int buttonGPin = 6;
int buttonAPin = 7;
int buttonBPin = 8;
int buttonCupPin = 9;
int imperialPin = 10;
int rebelPin. = 11;
int speakerPin = 12;
int buttonstates[10];
//NOTES 'c' , 'd', 'e', 'f', 'g', 'a', 'b', 'C'
int buttonTones[] = {1915, 1700, 1519, 1432, 1275, 1136, 1014, 956};
int curTone = 0;
void playToneOnce(int tone) {
digitalWrite(speakerPin, HIGH);
delayMicroseconds(tone);
digitalWrite(speakerPin, LOW);
delayMicroseconds(tone);
}
void playTone(int tone, int duration) {
for (long i = 0; i < duration * 1000L; i += tone * 2)
playToneOnce(tone);
}
void playNote(String note, int duration) {
for (int i = 0; i < 29; i++)
if (noteNames[i] == note)
playTone(tones[i], duration);
}
void imperialMarch() {
for (int i = 0; i < IMLength; i++) {
if (IMNotes[i] == "rest") {
delay(IMBeats[i] * IMTempo);
}
else {
digitalWrite(redLEDPin, HIGH);
playNote(IMNotes[i], IMBeats[i] * IMTempo);
}
digitalWrite(redLEDPin, LOW);
delay(IMTempo / 2);
}
}
void rebelTheme() {
for (int i = 0; i < RTLength; i++) {
if (RTNotes[i] == "rest") {
delay(RTBeats[i] * RTTempo);
}
else {
digitalWrite(blueLEDPin, HIGH);
playNote(RTNotes[i], RTBeats[i] * RTTempo);
}
digitalWrite(blueLEDPin, LOW);
delay(RTTempo / 2);
}
}
void setup() {
pinMode(buttonCPin, INPUT);
pinMode(buttonDPin, INPUT);
pinMode(buttonEPin, INPUT);
pinMode(buttonFPin, INPUT);
pinMode(buttonGPin, INPUT);
pinMode(buttonAPin, INPUT);
pinMode(buttonBPin, INPUT);
pinMode(buttonCupPin, INPUT);
pinMode(imperialPin, INPUT);
pinMode(rebelPin, INPUT);
pinMode(speakerPin, OUTPUT);
pinMode(blueLEDPin, OUTPUT);
pinMode(redLEDPin, OUTPUT);
}
void loop() {
digitalWrite(blueLEDPin, LOW);
digitalWrite(redLEDPin, LOW);
digitalWrite(speakerPin, LOW);
buttonstates[0] = digitalRead(buttonCPin);
buttonstates[1] = digitalRead(buttonDPin);
buttonstates[2] = digitalRead(buttonEPin);
buttonstates[3] = digitalRead(buttonFPin);
buttonstates[4] = digitalRead(buttonGPin);
buttonstates[5] = digitalRead(buttonAPin);
buttonstates[6] = digitalRead(buttonBPin);
buttonstates[7] = digitalRead(buttonCupPin);
buttonstates[8] = digitalRead(imperialPin);
buttonstates[9] = digitalRead(rebelPin);
for (i = 0; i<8; i++) {
if (buttonstates[i] == HIGH) {
playToneOnce(tones[i]);
break;
}
}
if (buttonstates[8] == HIGH) {
imperialMarch();
} else if (buttonstate[9] == HIGH) {
rebelTheme();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment