diff --git a/labW5barnestr/Inc/piezoSpeaker.h b/labW5barnestr/Inc/piezoSpeaker.h index e1adb99..010f239 100644 --- a/labW5barnestr/Inc/piezoSpeaker.h +++ b/labW5barnestr/Inc/piezoSpeaker.h @@ -41,11 +41,11 @@ #define PB4_AF_V 0b10 #define PB4_AF_P 9 -#define mil 1000000 +#define pitchDivisor 1000000 typedef struct{ - double noteFrequency; - double noteDuration; + unsigned int noteFrequency; + unsigned int noteDuration; } Note; void piezo_init(); @@ -57,111 +57,213 @@ void play_song(Note *songToPlay); // Note Frequency Symbols // Rest technically = 0 -#define r 0 -#define C0 16.35 -#define Db0 17.32 -#define D0 18.35 -#define Eb0 19.45 -#define E0 20.60 -#define F0 21.83 -#define Gb0 23.12 -#define G0 24.50 -#define Ab0 25.96 -#define A0 27.50 -#define Bb0 29.14 -#define B0 30.87 -#define C1 32.70 -#define Db1 34.65 -#define D1 36.71 -#define Eb1 38.89 -#define E1 41.20 -#define F1 43.65 -#define Gb1 46.25 -#define G1 49.00 -#define Ab1 51.91 -#define A1 55.00 -#define Bb1 58.27 -#define B1 61.74 -#define C2 65.41 -#define Db2 69.30 -#define D2 73.42 -#define Eb2 77.78 -#define E2 82.41 -#define F2 87.31 -#define Gb2 92.50 -#define G2 98.00 -#define Ab2 103.83 -#define A2 110.00 -#define Bb2 116.54 -#define B2 123.47 -#define C3 130.81 -#define Db3 138.59 -#define D3 146.83 -#define Eb3 155.56 -#define E3 164.81 -#define F3 174.61 -#define Gb3 185.00 -#define G3 196.00 -#define Ab3 207.65 -#define A3 220.00 -#define Bb3 233.08 -#define B3 246.94 -#define C4 261.63 -#define Db4 277.18 -#define D4 293.66 -#define Eb4 311.13 -#define E4 329.63 -#define F4 349.23 -#define Gb4 369.99 -#define G4 392.00 -#define Ab4 415.30 -#define A4 440.00 -#define Bb4 466.16 -#define B4 493.88 -#define C5 523.25 -#define Db5 554.37 -#define D5 587.33 -#define Eb5 622.25 -#define E5 659.26 -#define F5 698.46 -#define Gb5 739.99 -#define G5 783.99 -#define Ab5 830.61 -#define A5 880.00 -#define Bb5 932.33 -#define B5 987.77 -#define C6 1046.50 -#define Db6 1108.73 -#define D6 1174.66 -#define Eb6 1244.51 -#define E6 1318.51 -#define F6 1396.91 -#define Gb6 1479.98 -#define G6 1567.98 -#define Ab6 1661.22 -#define A6 1760.00 -#define Bb6 1864.66 -#define B6 1975.53 -#define C7 2093.00 -#define Db7 2217.46 -#define D7 2349.32 -#define Eb7 2489.02 -#define E7 2637.02 -#define F7 2793.83 -#define Gb7 2959.96 -#define G7 3135.96 -#define Ab7 3322.44 -#define A7 3520.01 -#define Bb7 3729.31 -#define B7 3951.07 -#define C8 4186.01 -#define Db8 4434.92 -#define D8 4698.64 -#define Eb8 4978.03 +//#define r 0 +//#define C0 16.35 +//#define Db0 17.32 +//#define D0 18.35 +//#define Eb0 19.45 +//#define E0 20.60 +//#define F0 21.83 +//#define Gb0 23.12 +//#define G0 24.50 +//#define Ab0 25.96 +//#define A0 27.50 +//#define Bb0 29.14 +//#define B0 30.87 +//#define C1 32.70 +//#define Db1 34.65 +//#define D1 36.71 +//#define Eb1 38.89 +//#define E1 41.20 +//#define F1 43.65 +//#define Gb1 46.25 +//#define G1 49.00 +//#define Ab1 51.91 +//#define A1 55.00 +//#define Bb1 58.27 +//#define B1 61.74 +//#define C2 65.41 +//#define Db2 69.30 +//#define D2 73.42 +//#define Eb2 77.78 +//#define E2 82.41 +//#define F2 87.31 +//#define Gb2 92.50 +//#define G2 98.00 +//#define Ab2 103.83 +//#define A2 110.00 +//#define Bb2 116.54 +//#define B2 123.47 +//#define C3 130.81 +//#define Db3 138.59 +//#define D3 146.83 +//#define Eb3 155.56 +//#define E3 164.81 +//#define F3 174.61 +//#define Gb3 185.00 +//#define G3 196.00 +//#define Ab3 207.65 +//#define A3 220.00 +//#define Bb3 233.08 +//#define B3 246.94 +//#define C4 261.63 +//#define Db4 277.18 +//#define D4 293.66 +//#define Eb4 311.13 +//#define E4 329.63 +//#define F4 349.23 +//#define Gb4 369.99 +//#define G4 392.00 +//#define Ab4 415.30 +//#define A4 440.00 +//#define Bb4 466.16 +//#define B4 493.88 +//#define C5 523.25 +//#define Db5 554.37 +//#define D5 587.33 +//#define Eb5 622.25 +//#define E5 659.26 +//#define F5 698.46 +//#define Gb5 739.99 +//#define G5 783.99 +//#define Ab5 830.61 +//#define A5 880.00 +//#define Bb5 932.33 +//#define B5 987.77 +//#define C6 1046.50 +//#define Db6 1108.73 +//#define D6 1174.66 +//#define Eb6 1244.51 +//#define E6 1318.51 +//#define F6 1396.91 +//#define Gb6 1479.98 +//#define G6 1567.98 +//#define Ab6 1661.22 +//#define A6 1760.00 +//#define Bb6 1864.66 +//#define B6 1975.53 +//#define C7 2093.00 +//#define Db7 2217.46 +//#define D7 2349.32 +//#define Eb7 2489.02 +//#define E7 2637.02 +//#define F7 2793.83 +//#define Gb7 2959.96 +//#define G7 3135.96 +//#define Ab7 3322.44 +//#define A7 3520.01 +//#define Bb7 3729.31 +//#define B7 3951.07 +//#define C8 4186.01 +//#define Db8 4434.92 +//#define D8 4698.64 +//#define Eb8 4978.03 + + #define r 0 + #define C0 1635 + #define Db0 1732 + #define D0 1835 + #define Eb0 1945 + #define E0 2060 + #define F0 2183 + #define Gb0 2312 + #define G0 2450 + #define Ab0 2596 + #define A0 2750 + #define Bb0 2914 + #define B0 3087 + #define C1 3270 + #define Db1 3465 + #define D1 3671 + #define Eb1 3889 + #define E1 4120 + #define F1 4365 + #define Gb1 4625 + #define G1 4900 + #define Ab1 5191 + #define A1 5500 + #define Bb1 5827 + #define B1 6174 + #define C2 6541 + #define Db2 6930 + #define D2 7342 + #define Eb2 7778 + #define E2 8241 + #define F2 8731 + #define Gb2 9250 + #define G2 9800 + #define Ab2 10383 + #define A2 11000 + #define Bb2 11654 + #define B2 12347 + #define C3 13081 + #define Db3 13859 + #define D3 14683 + #define Eb3 15556 + #define E3 16481 + #define F3 17461 + #define Gb3 18500 + #define G3 19600 + #define Ab3 20765 + #define A3 22000 + #define Bb3 23308 + #define B3 24694 + #define C4 26163 + #define Db4 27718 + #define D4 29366 + #define Eb4 31113 + #define E4 32963 + #define F4 34923 + #define Gb4 36999 + #define G4 39200 + #define Ab4 41530 + #define A4 44000 + #define Bb4 46616 + #define B4 49388 + #define C5 52325 + #define Db5 55437 + #define D5 58733 + #define Eb5 62225 + #define E5 65926 + #define F5 69846 + #define Gb5 73999 + #define G5 78399 + #define Ab5 83061 + #define A5 88000 + #define Bb5 93233 + #define B5 98777 + #define C6 104650 + #define Db6 110873 + #define D6 117466 + #define Eb6 124451 + #define E6 131851 + #define F6 139691 + #define Gb6 147998 + #define G6 156798 + #define Ab6 166122 + #define A6 176000 + #define Bb6 186466 + #define B6 197553 + #define C7 209300 + #define Db7 221746 + #define D7 234932 + #define Eb7 248902 + #define E7 263702 + #define F7 279383 + #define Gb7 295996 + #define G7 313596 + #define Ab7 332244 + #define A7 352001 + #define Bb7 372931 + #define B7 395107 + #define C8 418601 + #define Db8 443492 + #define D8 469864 + #define Eb8 497803 // Ending "termination" value indicating end of a song -#define T 5000.00 +#define T 5000 // Tempo value set at 120 beats per min -#define BPM 240 +#define BPM 120 #define H 2*Q #define Q 60000/BPM #define E Q/2 diff --git a/labW5barnestr/Src/main.c b/labW5barnestr/Src/main.c index bc0c22b..1668aca 100644 --- a/labW5barnestr/Src/main.c +++ b/labW5barnestr/Src/main.c @@ -19,104 +19,110 @@ // Super Mario "Flagpole Fanfare" Note songSMFF[66]= { {G3, S/3}, {Ab3,S/3}, {A3, S/3}, {Bb3,S/3}, {B3,S/3}, - {C4, S/3}, {Db4,S/3}, {D4, S/3}, {Eb4,S/3}, {E4,S/3}, - {F4, S/3}, {Gb4,S/3}, {G4, S/3}, {Ab4,S/3}, {A4,S/3}, - {Bb4,S/3}, {B4, S/3}, {C5, S/3}, {Db5,S/3}, {D5,S/3}, - {Eb5,S/3}, {E5, S/3}, {F5, S/3}, {Gb5,S/3}, {G5,S/3}, - {Ab5,S/3}, {A5, S/3}, {Bb5,S/3}, {B5, S/3}, {C6,S/3}, - {Db6,S/3}, {D6, S/3}, {Eb6,S/3}, {E6, S/3}, {F6,S/3}, - {Eb6,S/3}, {G6, S/3}, {r, 7*S}, {G3, Q}, {C4, Q}, - {E4, Q}, {G4, Q}, {C5, Q}, {E5, Q}, {G5, H}, - {E5, H}, {Ab3, Q}, {C4, Q}, {Eb4, Q}, {Ab4, Q}, - {C5, Q}, {Eb5, Q}, {Ab6, H}, {Eb5, H}, {Bb3, Q}, - {D4, Q}, {F4, Q}, {Bb4, Q}, {D5, Q}, {F5, Q}, - {Bb5, W}, {B5, Q}, {B5, Q}, {B5, Q}, {C6, W}, {T, Q} }; + {C4, S/3}, {Db4,S/3}, {D4, S/3}, {Eb4,S/3}, {E4,S/3}, + {F4, S/3}, {Gb4,S/3}, {G4, S/3}, {Ab4,S/3}, {A4,S/3}, + {Bb4,S/3}, {B4, S/3}, {C5, S/3}, {Db5,S/3}, {D5,S/3}, + {Eb5,S/3}, {E5, S/3}, {F5, S/3}, {Gb5,S/3}, {G5,S/3}, + {Ab5,S/3}, {A5, S/3}, {Bb5,S/3}, {B5, S/3}, {C6,S/3}, + {Db6,S/3}, {D6, S/3}, {Eb6,S/3}, {E6, S/3}, {F6,S/3}, + {Eb6,S/3}, {G6, S/3}, {r, 7*S}, {G3, Q}, {C4, Q}, + {E4, Q}, {G4, Q}, {C5, Q}, {E5, Q}, {G5, H}, + {E5, H}, {Ab3, Q}, {C4, Q}, {Eb4, Q}, {Ab4, Q}, + {C5, Q}, {Eb5, Q}, {Ab6, H}, {Eb5, H}, {Bb3, Q}, + {D4, Q}, {F4, Q}, {Bb4, Q}, {D5, Q}, {F5, Q}, + {Bb5, W}, {B5, Q}, {B5, Q}, {B5, Q}, {C6, W}, {T} + }; // Imperial March -Note songIM[138] = { {A3, Q}, {A3, Q}, {A3, Q}, {r, Q}, - {F3,E+S}, {r, E+S}, {C4, S}, {r, S}, {A3, Q}, {r, Q}, - {F3,E+S}, {r, E+S}, {C4, S}, {r, S}, {A3, H}, {r, H}, - {E4, Q}, {r, Q}, {E4, Q}, {r, Q}, {E4, Q}, {r, Q}, - {F4,E+S}, {r, E+S}, {C4, S}, {r, S}, {Ab3, Q}, {r, Q}, - {F3,E+S}, {r, E+S}, {C4, S}, {r, S}, {A3, H}, {r, H}, - {A4, Q}, {r, Q}, {A3, E+S}, {r, E+S}, {A3, S}, {r, S}, - {A4, Q}, {r, Q}, {Ab4,E+S}, {r, E+S}, {G4, S}, {r, S}, - {Gb4, Q}, {r, S}, {E4, S}, {r, S}, {F4, E}, {r, E}, - {r, E}, {Bb3, E}, {r, E}, {Eb4, Q}, {r, Q}, {D4,E+S}, - {r, E+S}, {Db4, S}, {r, H}, {C4, S}, {r, S}, {B3, S}, - {r, S}, {C4, E}, {r, E}, {r, E}, {F3, E}, {r, E}, - {Ab3, Q}, {r, Q}, {F3, E+S}, {r, E+S}, {A3, S}, {r, S}, - {C4, Q}, {r, Q}, {A3, E+S}, {r, E+S}, {C4, S}, {r, S}, - {E4, H}, {r, H}, {A4, Q}, {r, Q}, {A3, E+S}, {r, E+S}, - {A3, S}, {r, S}, {A4, Q}, {r, S}, {Ab4,E+S}, {r, E+S}, - {G4, S}, {r, S}, {Gb4, S}, {r, S}, {E4, S}, {r, S}, - {F4, E}, {r, E}, {r, E}, {Bb3, E}, {r, E}, {Eb4, Q}, - {r, Q}, {D4,E+S}, {r, E+S}, {Db4, S}, {r, S}, {C4, S}, - {r, S}, {B3, S}, {r, S}, {C4, E}, {r, E}, {r, E}, - {F3, E}, {r, E}, {Ab3, Q}, {r, Q}, {F3, E+S}, {r, E+S}, - {C4, S}, {r, S}, {A3, Q}, {r, Q}, {F3, E+S}, {r, E+S}, - {C4, S}, {r, S}, {A3, H}, {r, H}, {T, Q} }; +Note songIMold[138] = { {A3, Q}, {A3, Q}, {A3, Q}, {r, Q}, + {F3,E+S}, {r, E+S}, {C4, S}, {r, S}, {A3, Q}, {r, Q}, + {F3,E+S}, {r, E+S}, {C4, S}, {r, S}, {A3, H}, {r, H}, + {E4, Q}, {r, Q}, {E4, Q}, {r, Q}, {E4, Q}, {r, Q}, + {F4,E+S}, {r, E+S}, {C4, S}, {r, S}, {Ab3, Q}, {r, Q}, + {F3,E+S}, {r, E+S}, {C4, S}, {r, S}, {A3, H}, {r, H}, + {A4, Q}, {r, Q}, {A3, E+S}, {r, E+S}, {A3, S}, {r, S}, + {A4, Q}, {r, Q}, {Ab4,E+S}, {r, E+S}, {G4, S}, {r, S}, + {Gb4, Q}, {r, S}, {E4, S}, {r, S}, {F4, E}, {r, E}, + {r, E}, {Bb3, E}, {r, E}, {Eb4, Q}, {r, Q}, {D4,E+S}, + {r, E+S}, {Db4, S}, {r, H}, {C4, S}, {r, S}, {B3, S}, + {r, S}, {C4, E}, {r, E}, {r, E}, {F3, E}, {r, E}, + {Ab3, Q}, {r, Q}, {F3, E+S}, {r, E+S}, {A3, S}, {r, S}, + {C4, Q}, {r, Q}, {A3, E+S}, {r, E+S}, {C4, S}, {r, S}, + {E4, H}, {r, H}, {A4, Q}, {r, Q}, {A3, E+S}, {r, E+S}, + {A3, S}, {r, S}, {A4, Q}, {r, S}, {Ab4,E+S}, {r, E+S}, + {G4, S}, {r, S}, {Gb4, S}, {r, S}, {E4, S}, {r, S}, + {F4, E}, {r, E}, {r, E}, {Bb3, E}, {r, E}, {Eb4, Q}, + {r, Q}, {D4,E+S}, {r, E+S}, {Db4, S}, {r, S}, {C4, S}, + {r, S}, {B3, S}, {r, S}, {C4, E}, {r, E}, {r, E}, + {F3, E}, {r, E}, {Ab3, Q}, {r, Q}, {F3, E+S}, {r, E+S}, + {C4, S}, {r, S}, {A3, Q}, {r, Q}, {F3, E+S}, {r, E+S}, + {C4, S}, {r, S}, {A3, H}, {r, H}, {T, Q} + }; + +Note songIM[138] = { + {A3, Q}, {A3, Q}, {A3, Q}, {F3, S*3}, {C4, S}, {A3, Q}, {F3, S*3}, {C4, S}, {A3, H}, + {E4, Q}, {E4, Q}, {E4, Q}, {F4, S*3}, {C4, S}, {Ab3, Q}, {F3, S*3}, {C4, S}, {A3, H}, {T} + }; void printHelp() { - printf("*Commands*\n\r"); - printf("'rmw {hex address}' - Reads mem at a given address\n\r"); - printf("'wmw {hex address} {value}' - Writes the given value as a word to the given address\n\r"); - printf("'dm {hex address} {length}' - Dumps the memory at a given address. Defaults to 16 B if no " - "length is given\n\r"); - printf("'ps {song choice}' - Plays a song with the given selection\n\r"); - printf("'songs' - Prints info about each song selection\n\r"); + printf("*Commands*\n\r"); + printf("'rmw {hex address}' - Reads mem at a given address\n\r"); + printf("'wmw {hex address} {value}' - Writes the given value as a word to the given address\n\r"); + printf("'dm {hex address} {length}' - Dumps the memory at a given address. Defaults to 16 B if no " + "length is given\n\r"); + printf("'ps {song choice}' - Plays a song with the given selection\n\r"); + printf("'songs' - Prints info about each song selection\n\r"); } void songInfo() { - printf("Type 1 or 2 to play a song!\n\r"); - printf("Song 1: Imperial March\n\r"); - printf("Song 2: Super Mario Bros Flagpole Fanfare\n\r"); + printf("Type 1 or 2 to play a song!\n\r"); + printf("Song 1: Imperial March\n\r"); + printf("Song 2: Super Mario Bros Flagpole Fanfare\n\r"); } int main(void) { - init_usart2(57600, F_CPU); - piezo_init(); - led_init(); -// char line[50]; -// char command[10]; -// int address; -// int data; -// int length; -// int songSelection; - // play_note(261.63, 10000.00); -// for(;;) { -// // Get command from user -// fgets(line, 100, stdin); -// // Parse only the command for strcmp -// sscanf(line, "%s", command); -// if (!strcmp(command, "help")) { -// printHelp(); -// } else if (!strcmp(command, "songs")) { -// songInfo(); -// } else if (!strcmp(command, "rmw")) { -// sscanf(line, "%s %X", command, &address); -// readMem(address); -// } else if (!strcmp(command, "wmw")) { -// sscanf(line, "%s %X %u", command, &address, &data); -// writeMem(address, data); -// } else if (!strcmp(command, "dm")) { -// sscanf(line, "%s %X %u", command, &address, &length); -// dumpMem(address, length); -// } else if (!strcmp(command, "ps")) { -// sscanf(line, "%s %u", command, &songSelection); -// switch(songSelection) { -// case 1: -// printf("Playing Imperial March\n\r"); - play_song(&songIM[0]); -// break; -// case 2: -// printf("Playing Super Mario Bros Flagpole Fanfare\n\r"); -// play_song(&songSMFF[0]); -// break; -// default: -// break; -// } -// } else { -// printf("Invalid input, type 'help' for instructions\n\r"); -// } -// } + init_usart2(57600, F_CPU); + piezo_init(); + led_init(); + char line[50]; + char command[10]; + int address; + int data; + int length; + int songSelection; + for(;;) { + // Get command from user + fgets(line, 100, stdin); + // Parse only the command for strcmp + sscanf(line, "%s", command); + if (!strcmp(command, "help")) { + printHelp(); + } else if (!strcmp(command, "songs")) { + songInfo(); + } else if (!strcmp(command, "rmw")) { + sscanf(line, "%s %X", command, &address); + readMem(address); + } else if (!strcmp(command, "wmw")) { + sscanf(line, "%s %X %u", command, &address, &data); + writeMem(address, data); + } else if (!strcmp(command, "dm")) { + sscanf(line, "%s %X %u", command, &address, &length); + dumpMem(address, length); + } else if (!strcmp(command, "ps")) { + sscanf(line, "%s %u", command, &songSelection); + switch(songSelection) { + case 1: + printf("Playing Imperial March\n\r"); + play_song(songIM); + break; + case 2: + printf("Playing Super Mario Bros Flagpole Fanfare\n\r"); + play_song(songSMFF); + break; + default: + break; + } + } else { + printf("Invalid input, type 'help' for instructions\n\r"); + } + } } diff --git a/labW5barnestr/Src/memory.c b/labW5barnestr/Src/memory.c index 68d38d8..4a1d295 100644 --- a/labW5barnestr/Src/memory.c +++ b/labW5barnestr/Src/memory.c @@ -26,7 +26,7 @@ void readMem(uint32_t addr) { // Formatted print with both hex and decimal values printf("Memory Value at %#08x\n\r" "Hex: %#08x\n\r" - "Decimal: %d\n\r", addr, *memPtr, *memPtr); + "Decimal: %u\n\r", (int)addr, (int)*memPtr, (int)*memPtr); return; } @@ -36,7 +36,7 @@ void writeMem(uint32_t addr, uint32_t data) { // Write data *memPtr = data; // Confirmation printout showing the new value and address - printf("Value written at %#08x: %u \n\r", addr, data); + printf("Value written at %#08x: %u \n\r", (int)addr, (int)data); return; } diff --git a/labW5barnestr/Src/piezoSpeaker.c b/labW5barnestr/Src/piezoSpeaker.c index edbb8f9..46c6e48 100644 --- a/labW5barnestr/Src/piezoSpeaker.c +++ b/labW5barnestr/Src/piezoSpeaker.c @@ -46,10 +46,10 @@ void play_note(Note noteToPlay) { *TIM3_PSC = 15; //Divisor controls pitch - *TIM3_ARR = mil/(noteToPlay.noteFrequency); + *TIM3_ARR = (pitchDivisor)/(noteToPlay.noteFrequency/100); //Loudness (Smaller dividend = louder sound) - double freq = noteToPlay.noteFrequency/10; + double freq = (noteToPlay.noteFrequency/100)/10; //clear ccr1 *TIM3_CCR1 = (*TIM3_CCR1&~(0xFFFF));