Created
January 28, 2018 08:05
-
-
Save fbrosser/61cb974c679c202b28c5afa77eed1a76 to your computer and use it in GitHub Desktop.
Piezo piano
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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