Fixed to work with paper potentiometer

Dependencies:   mbed

Committer:
halea
Date:
Mon Sep 19 17:19:59 2016 +0000
Revision:
0:dcdfee042939
Added speaker note control via paper potentiometer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
halea 0:dcdfee042939 1 #include "Music.h"
halea 0:dcdfee042939 2
halea 0:dcdfee042939 3 /**
halea 0:dcdfee042939 4 * @param mySpeaker is the DigitalOut that is input into the Music class (in Music.cpp).
halea 0:dcdfee042939 5 * @param _mySpeaker is the private DigitalOut used by the Music class (in Music.cpp).
halea 0:dcdfee042939 6 */
halea 0:dcdfee042939 7 Music::Music(PinName mySpeaker) : _mySpeaker(mySpeaker){
halea 0:dcdfee042939 8 // The Music class is constructed.
halea 0:dcdfee042939 9 }
halea 0:dcdfee042939 10
halea 0:dcdfee042939 11 Music::~Music(void){
halea 0:dcdfee042939 12 // The Music class is deconstructed.
halea 0:dcdfee042939 13 }
halea 0:dcdfee042939 14
halea 0:dcdfee042939 15 /**
halea 0:dcdfee042939 16 * @param note plays a note from the standard piano.
halea 0:dcdfee042939 17 * Input notes range from 1 to 88.
halea 0:dcdfee042939 18 * Set to zero to turn off the note.
halea 0:dcdfee042939 19 * Sourced from: https://en.wikipedia.org/wiki/Piano_key_frequencies
halea 0:dcdfee042939 20 * @returns
halea 0:dcdfee042939 21 * 1 on success.
halea 0:dcdfee042939 22 * 0 on error, typically outside of the max range of 88.
halea 0:dcdfee042939 23 */
halea 0:dcdfee042939 24 int Music::playNote(int note) {
halea 0:dcdfee042939 25
halea 0:dcdfee042939 26 /* Notes are defined as followed, {off, A0, A0#, B0, C1, C1#, D1#, E1, .... A7, A7#, B7, C8} */
halea 0:dcdfee042939 27 float noteFrequencies [89] = {0,
halea 0:dcdfee042939 28 //A=1 A# B
halea 0:dcdfee042939 29 /* 0 Octave */ 27.5, 29.1352, 30.8677, // notes 1-3
halea 0:dcdfee042939 30 //C=4 C# D D# E F F# G G# A A# B
halea 0:dcdfee042939 31 /* 1 Octave */ 32.7032, 34.6478, 36.7081, 38.8909, 41.2034, 43.6535, 46.2493, 48.9994, 51.9131, 55, 58.2705, 61.7354, // notes 4 - 15
halea 0:dcdfee042939 32 /* 2 Octave */ 65.4064, 69.2957, 73.4162, 77.7817, 82.4069, 87.3071, 92.4986, 97.9989, 103.826, 110, 116.541, 123.471, // notes 16 - 27
halea 0:dcdfee042939 33 /* 3 Octave */ 130.813, 138.591, 146.832, 155.563, 164.814, 174.614, 184.997, 195.998, 207.652, 220, 233.082, 246.942, // notes 28 - 39
halea 0:dcdfee042939 34 /* 4 Octave */ 261.626, 277.183, 293.665, 311.127, 329.628, 349.228, 369.994, 391.995, 415.305, 440, 466.164, 493.883, // notes 40 - 51
halea 0:dcdfee042939 35 /* 5 Octave */ 523.251, 554.365, 587.33, 622.254, 659.255, 698.456, 739.989, 783.991, 830.609, 880, 932.328, 987.767, // notes 52 - 63
halea 0:dcdfee042939 36 /* 6 Octave */ 1046.5, 1108.73, 1174.66, 1244.51, 1318.51, 1396.91, 1479.98, 1567.98, 1661.22, 1760, 1864.66, 1975.53, // notes 64 - 75
halea 0:dcdfee042939 37 /* 7 Octave */ 2093, 2217.46, 2349.32, 2489.02, 2637.02, 2793.83, 2959.96, 3135.96, 3322.44, 3520, 3729.31, 3951.07, // notes 76 - 87
halea 0:dcdfee042939 38 /* 8 Octave */ 4186.01
halea 0:dcdfee042939 39 }; // note 88
halea 0:dcdfee042939 40
halea 0:dcdfee042939 41 float period = 1/noteFrequencies[note];
halea 0:dcdfee042939 42
halea 0:dcdfee042939 43 // Divide the period by two to get a square wave at the corrct frequency.
halea 0:dcdfee042939 44 wait(period/2.0f);
halea 0:dcdfee042939 45 _mySpeaker.write(!_mySpeaker.read()); // read the current _mySpeaker output and then toggle it.
halea 0:dcdfee042939 46
halea 0:dcdfee042939 47 if(note>88)
halea 0:dcdfee042939 48 return 1;
halea 0:dcdfee042939 49 else
halea 0:dcdfee042939 50 return 0;
halea 0:dcdfee042939 51 }; //end of playNote