yumaowei 201377547

Dependencies:   mbed ELEC2645_Project_el17my

Committer:
yumaowei
Date:
Tue May 26 07:24:21 2020 +0000
Revision:
2:5e54476c518f
Final Submission. I have read and agreed with Statement of Academic Integrity.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yumaowei 2:5e54476c518f 1 #ifndef GAMEPAD_H
yumaowei 2:5e54476c518f 2 #define GAMEPAD_H
yumaowei 2:5e54476c518f 3
yumaowei 2:5e54476c518f 4 #include <bitset>
yumaowei 2:5e54476c518f 5
yumaowei 2:5e54476c518f 6 // Forward declaration of the classes that we use from the mbed library
yumaowei 2:5e54476c518f 7 // This avoids the need for us to include the huge mbed.h header inside our
yumaowei 2:5e54476c518f 8 // own library API
yumaowei 2:5e54476c518f 9 namespace mbed
yumaowei 2:5e54476c518f 10 {
yumaowei 2:5e54476c518f 11 class AnalogIn;
yumaowei 2:5e54476c518f 12 class InterruptIn;
yumaowei 2:5e54476c518f 13 class PwmOut;
yumaowei 2:5e54476c518f 14 class AnalogOut;
yumaowei 2:5e54476c518f 15 class Ticker;
yumaowei 2:5e54476c518f 16 class Timeout;
yumaowei 2:5e54476c518f 17 }
yumaowei 2:5e54476c518f 18
yumaowei 2:5e54476c518f 19 #define TOL 0.1f
yumaowei 2:5e54476c518f 20 #define RAD2DEG 57.2957795131f
yumaowei 2:5e54476c518f 21 #define PI 3.14159265359
yumaowei 2:5e54476c518f 22
yumaowei 2:5e54476c518f 23
yumaowei 2:5e54476c518f 24 /** Enum for direction */
yumaowei 2:5e54476c518f 25 enum Direction {
yumaowei 2:5e54476c518f 26 CENTRE, /**< joystick centred */
yumaowei 2:5e54476c518f 27 N, /**< pushed North (0)*/
yumaowei 2:5e54476c518f 28 NE, /**< pushed North-East (45) */
yumaowei 2:5e54476c518f 29 E, /**< pushed East (90) */
yumaowei 2:5e54476c518f 30 SE, /**< pushed South-East (135) */
yumaowei 2:5e54476c518f 31 S, /**< pushed South (180) */
yumaowei 2:5e54476c518f 32 SW, /**< pushed South-West (225) */
yumaowei 2:5e54476c518f 33 W, /**< pushed West (270) */
yumaowei 2:5e54476c518f 34 NW /**< pushed North-West (315) */
yumaowei 2:5e54476c518f 35 };
yumaowei 2:5e54476c518f 36
yumaowei 2:5e54476c518f 37 /** Vector 2D structure */
yumaowei 2:5e54476c518f 38 struct POS2D {
yumaowei 2:5e54476c518f 39 float x; /**< float for x value */
yumaowei 2:5e54476c518f 40 float y; /**< float for y value */
yumaowei 2:5e54476c518f 41 };
yumaowei 2:5e54476c518f 42
yumaowei 2:5e54476c518f 43 /** Polar coordinate struct */
yumaowei 2:5e54476c518f 44 struct Polar {
yumaowei 2:5e54476c518f 45 float mag; /**< float for magnitude */
yumaowei 2:5e54476c518f 46 float angle; /**< float for angle (in degrees) */
yumaowei 2:5e54476c518f 47 };
yumaowei 2:5e54476c518f 48
yumaowei 2:5e54476c518f 49 /** Gamepad Class
yumaowei 2:5e54476c518f 50 * @brief Library for interfacing with ELEC2645 Gamepad PCB, University of Leeds
yumaowei 2:5e54476c518f 51 * @author Dr Craig A. Evans
yumaowei 2:5e54476c518f 52 * @author Dr Alex Valavanis
yumaowei 2:5e54476c518f 53 * @author Joshua Davy
yumaowei 2:5e54476c518f 54 */
yumaowei 2:5e54476c518f 55 class Gamepad
yumaowei 2:5e54476c518f 56 {
yumaowei 2:5e54476c518f 57
yumaowei 2:5e54476c518f 58 private:
yumaowei 2:5e54476c518f 59 mbed::PwmOut *_led1;
yumaowei 2:5e54476c518f 60 mbed::PwmOut *_led2;
yumaowei 2:5e54476c518f 61 mbed::PwmOut *_led3;
yumaowei 2:5e54476c518f 62 mbed::PwmOut *_led4;
yumaowei 2:5e54476c518f 63 mbed::PwmOut *_led5;
yumaowei 2:5e54476c518f 64 mbed::PwmOut *_led6;
yumaowei 2:5e54476c518f 65
yumaowei 2:5e54476c518f 66 mbed::InterruptIn *_button_A;
yumaowei 2:5e54476c518f 67 mbed::InterruptIn *_button_B;
yumaowei 2:5e54476c518f 68 mbed::InterruptIn *_button_X;
yumaowei 2:5e54476c518f 69 mbed::InterruptIn *_button_Y;
yumaowei 2:5e54476c518f 70 mbed::InterruptIn *_button_start;
yumaowei 2:5e54476c518f 71
yumaowei 2:5e54476c518f 72 mbed::AnalogIn *_vert;
yumaowei 2:5e54476c518f 73 mbed::AnalogIn *_horiz;
yumaowei 2:5e54476c518f 74
yumaowei 2:5e54476c518f 75 mbed::AnalogIn *_pot1;
yumaowei 2:5e54476c518f 76 mbed::AnalogIn *_pot2;
yumaowei 2:5e54476c518f 77
yumaowei 2:5e54476c518f 78 mbed::AnalogOut *dac;
yumaowei 2:5e54476c518f 79 mbed::Ticker *ticker;
yumaowei 2:5e54476c518f 80 mbed::Timeout *timeout;
yumaowei 2:5e54476c518f 81 mbed::Timeout *note_timeout;
yumaowei 2:5e54476c518f 82
yumaowei 2:5e54476c518f 83 // centred x,y values
yumaowei 2:5e54476c518f 84 float _x0;
yumaowei 2:5e54476c518f 85 float _y0;
yumaowei 2:5e54476c518f 86
yumaowei 2:5e54476c518f 87 float *_sample_array;
yumaowei 2:5e54476c518f 88 const int *_notes;
yumaowei 2:5e54476c518f 89 const int *_durations;
yumaowei 2:5e54476c518f 90
yumaowei 2:5e54476c518f 91 int _n;
yumaowei 2:5e54476c518f 92 int _melody_length;
yumaowei 2:5e54476c518f 93 volatile unsigned int _sample;
yumaowei 2:5e54476c518f 94 volatile unsigned int _note;
yumaowei 2:5e54476c518f 95 float _bpm;
yumaowei 2:5e54476c518f 96 bool _repeat;
yumaowei 2:5e54476c518f 97
yumaowei 2:5e54476c518f 98
yumaowei 2:5e54476c518f 99 public:
yumaowei 2:5e54476c518f 100 /** Constructor */
yumaowei 2:5e54476c518f 101 Gamepad();
yumaowei 2:5e54476c518f 102
yumaowei 2:5e54476c518f 103 /** Initialise all peripherals and configure interrupts */
yumaowei 2:5e54476c518f 104 void init();
yumaowei 2:5e54476c518f 105
yumaowei 2:5e54476c518f 106 /** Turn all LEDs on */
yumaowei 2:5e54476c518f 107 void leds_on();
yumaowei 2:5e54476c518f 108
yumaowei 2:5e54476c518f 109 /** Turn all LEDs off */
yumaowei 2:5e54476c518f 110 void leds_off();
yumaowei 2:5e54476c518f 111
yumaowei 2:5e54476c518f 112 /** Set all LEDs to duty-cycle
yumaowei 2:5e54476c518f 113 *@param value in range 0.0 to 1.0
yumaowei 2:5e54476c518f 114 */
yumaowei 2:5e54476c518f 115 void leds(float val) const;
yumaowei 2:5e54476c518f 116
yumaowei 2:5e54476c518f 117 /** Set LED to duty-cycle
yumaowei 2:5e54476c518f 118 *@param led number (0 to 5)
yumaowei 2:5e54476c518f 119 *@param value in range 0.0 to 1.0
yumaowei 2:5e54476c518f 120 */
yumaowei 2:5e54476c518f 121 void led(int n,float val) const;
yumaowei 2:5e54476c518f 122
yumaowei 2:5e54476c518f 123 /** Read potentiometer 1 value
yumaowei 2:5e54476c518f 124 *@returns potentiometer value in range 0.0 to 1.0
yumaowei 2:5e54476c518f 125 */
yumaowei 2:5e54476c518f 126 float read_pot1() const;
yumaowei 2:5e54476c518f 127
yumaowei 2:5e54476c518f 128 /** Read potentiometer 2 value
yumaowei 2:5e54476c518f 129 *@returns potentiometer value in range 0.0 to 1.0
yumaowei 2:5e54476c518f 130 */
yumaowei 2:5e54476c518f 131 float read_pot2() const;
yumaowei 2:5e54476c518f 132
yumaowei 2:5e54476c518f 133 /** Get magnitude of joystick movement
yumaowei 2:5e54476c518f 134 * @returns value in range 0.0 to 1.0
yumaowei 2:5e54476c518f 135 */
yumaowei 2:5e54476c518f 136 float get_mag();
yumaowei 2:5e54476c518f 137
yumaowei 2:5e54476c518f 138 /** Get angle of joystick movement
yumaowei 2:5e54476c518f 139 * @returns value in range 0.0 to 359.9. 0.0 corresponds to N, 180.0 to S. -1.0 is central
yumaowei 2:5e54476c518f 140 */
yumaowei 2:5e54476c518f 141 float get_angle();
yumaowei 2:5e54476c518f 142
yumaowei 2:5e54476c518f 143 /** Gets joystick direction
yumaowei 2:5e54476c518f 144 * @returns an enum: CENTRE, N, NE, E, SE, S, SW, W, NW,
yumaowei 2:5e54476c518f 145 */
yumaowei 2:5e54476c518f 146 Direction get_direction(); // N,NE,E,SE etc.
yumaowei 2:5e54476c518f 147
yumaowei 2:5e54476c518f 148 /** Gets raw cartesian co-ordinates of joystick
yumaowei 2:5e54476c518f 149 * @returns a struct with x,y members, each in the range 0.0 to 1.0
yumaowei 2:5e54476c518f 150 */
yumaowei 2:5e54476c518f 151 POS2D get_coord(); // cartesian co-ordinates x,y
yumaowei 2:5e54476c518f 152
yumaowei 2:5e54476c518f 153 /** Gets cartesian coordinates mapped to circular grid
yumaowei 2:5e54476c518f 154 * @returns a struct with x,y members, each in the range 0.0 to 1.0
yumaowei 2:5e54476c518f 155 */
yumaowei 2:5e54476c518f 156 POS2D get_mapped_coord(); // x,y mapped to circle
yumaowei 2:5e54476c518f 157
yumaowei 2:5e54476c518f 158 /** Gets polar coordinates of the joystick
yumaowei 2:5e54476c518f 159 * @returns a struct contains mag and angle
yumaowei 2:5e54476c518f 160 */
yumaowei 2:5e54476c518f 161 Polar get_polar(); // mag and angle in struct form
yumaowei 2:5e54476c518f 162
yumaowei 2:5e54476c518f 163
yumaowei 2:5e54476c518f 164 /** Resets all button states. Useful for calling inbetween scenes
yumaowei 2:5e54476c518f 165 * where you do not want button presses from the previous scene effecting
yumaowei 2:5e54476c518f 166 * the current scene
yumaowei 2:5e54476c518f 167 */
yumaowei 2:5e54476c518f 168 void reset_buttons();
yumaowei 2:5e54476c518f 169
yumaowei 2:5e54476c518f 170 /** Returns true if A has been pressed
yumaowei 2:5e54476c518f 171 * @returns a bool corresponding to A being pressed
yumaowei 2:5e54476c518f 172 */
yumaowei 2:5e54476c518f 173
yumaowei 2:5e54476c518f 174 bool A_pressed();
yumaowei 2:5e54476c518f 175
yumaowei 2:5e54476c518f 176 /** Returns true if A is held
yumaowei 2:5e54476c518f 177 * @returns a bool corresponding to A being held
yumaowei 2:5e54476c518f 178 *
yumaowei 2:5e54476c518f 179 */
yumaowei 2:5e54476c518f 180 bool A_held();
yumaowei 2:5e54476c518f 181
yumaowei 2:5e54476c518f 182
yumaowei 2:5e54476c518f 183 /** Returns true if B has been pressed
yumaowei 2:5e54476c518f 184 * @returns a bool corresponding to B being pressed
yumaowei 2:5e54476c518f 185 */
yumaowei 2:5e54476c518f 186 bool B_pressed();
yumaowei 2:5e54476c518f 187
yumaowei 2:5e54476c518f 188 /** Returns true if B is held
yumaowei 2:5e54476c518f 189 * @returns a bool corresponding to B being held
yumaowei 2:5e54476c518f 190 *
yumaowei 2:5e54476c518f 191 */
yumaowei 2:5e54476c518f 192 bool B_held();
yumaowei 2:5e54476c518f 193
yumaowei 2:5e54476c518f 194 /** Returns true if B has been pressed
yumaowei 2:5e54476c518f 195 * @returns a bool corresponding to B being pressed
yumaowei 2:5e54476c518f 196 */
yumaowei 2:5e54476c518f 197 bool X_pressed();
yumaowei 2:5e54476c518f 198
yumaowei 2:5e54476c518f 199 /** Returns true if X is held
yumaowei 2:5e54476c518f 200 * @returns a bool corresponding to X being held
yumaowei 2:5e54476c518f 201 *
yumaowei 2:5e54476c518f 202 */
yumaowei 2:5e54476c518f 203 bool X_held();
yumaowei 2:5e54476c518f 204
yumaowei 2:5e54476c518f 205 /** Returns true if Y has been pressed
yumaowei 2:5e54476c518f 206 * @returns a bool corresponding to Y being pressed
yumaowei 2:5e54476c518f 207 */
yumaowei 2:5e54476c518f 208 bool Y_pressed();
yumaowei 2:5e54476c518f 209
yumaowei 2:5e54476c518f 210 /** Returns true if Y is held
yumaowei 2:5e54476c518f 211 * @returns a bool corresponding to Y being held
yumaowei 2:5e54476c518f 212 *
yumaowei 2:5e54476c518f 213 */
yumaowei 2:5e54476c518f 214 bool Y_held();
yumaowei 2:5e54476c518f 215
yumaowei 2:5e54476c518f 216
yumaowei 2:5e54476c518f 217 /** Returns true if start has been pressed
yumaowei 2:5e54476c518f 218 * @returns a bool corresponding to start being pressed
yumaowei 2:5e54476c518f 219 */
yumaowei 2:5e54476c518f 220 bool start_pressed();
yumaowei 2:5e54476c518f 221
yumaowei 2:5e54476c518f 222 /** Returns true if start is held
yumaowei 2:5e54476c518f 223 * @returns a bool corresponding to start being held
yumaowei 2:5e54476c518f 224 *
yumaowei 2:5e54476c518f 225 */
yumaowei 2:5e54476c518f 226 bool start_held();
yumaowei 2:5e54476c518f 227
yumaowei 2:5e54476c518f 228 /** Play a single tone for the specifed duration
yumaowei 2:5e54476c518f 229 *@param note frequency (in Hz)
yumaowei 2:5e54476c518f 230 *@param duration (in s)
yumaowei 2:5e54476c518f 231 */
yumaowei 2:5e54476c518f 232 void tone(const float frequency,const float duration);
yumaowei 2:5e54476c518f 233
yumaowei 2:5e54476c518f 234 /** Play a melody
yumaowei 2:5e54476c518f 235 *@param length of note array
yumaowei 2:5e54476c518f 236 *@param array of note frequencies (in Hz) - 0 treated as a rest
yumaowei 2:5e54476c518f 237 *@param array of note durations (4 corresponds to 1/4, 8 is 1/8 etc.)
yumaowei 2:5e54476c518f 238 *@param beats per minute
yumaowei 2:5e54476c518f 239 *@param whether to repeat or play just once
yumaowei 2:5e54476c518f 240 */
yumaowei 2:5e54476c518f 241 void play_melody(int length,const int *notes,const int *durations,float bpm,bool repeat);
yumaowei 2:5e54476c518f 242
yumaowei 2:5e54476c518f 243 /** Set the BPM of the melody
yumaowei 2:5e54476c518f 244 *@param beats per minute
yumaowei 2:5e54476c518f 245 */
yumaowei 2:5e54476c518f 246 void set_bpm(float bpm);
yumaowei 2:5e54476c518f 247
yumaowei 2:5e54476c518f 248 /** Write an analog voltage to the speaker
yumaowei 2:5e54476c518f 249 *@param voltage in range 0.0 to 1.0 (corresponds 0.0 to 3.3 V)
yumaowei 2:5e54476c518f 250 */
yumaowei 2:5e54476c518f 251 void write_dac(float val);
yumaowei 2:5e54476c518f 252
yumaowei 2:5e54476c518f 253
yumaowei 2:5e54476c518f 254
yumaowei 2:5e54476c518f 255
yumaowei 2:5e54476c518f 256 private:
yumaowei 2:5e54476c518f 257
yumaowei 2:5e54476c518f 258 volatile bool A_fall;
yumaowei 2:5e54476c518f 259 void A_fall_interrupt();
yumaowei 2:5e54476c518f 260
yumaowei 2:5e54476c518f 261 volatile bool B_fall;
yumaowei 2:5e54476c518f 262 void B_fall_interrupt();
yumaowei 2:5e54476c518f 263
yumaowei 2:5e54476c518f 264 volatile bool X_fall;
yumaowei 2:5e54476c518f 265 void X_fall_interrupt();
yumaowei 2:5e54476c518f 266
yumaowei 2:5e54476c518f 267 volatile bool Y_fall;
yumaowei 2:5e54476c518f 268 void Y_fall_interrupt();
yumaowei 2:5e54476c518f 269
yumaowei 2:5e54476c518f 270 volatile bool start_fall;
yumaowei 2:5e54476c518f 271 void start_fall_interrupt();
yumaowei 2:5e54476c518f 272
yumaowei 2:5e54476c518f 273 // Tone functions
yumaowei 2:5e54476c518f 274 void ticker_isr();
yumaowei 2:5e54476c518f 275 void timeout_isr();
yumaowei 2:5e54476c518f 276 void note_timeout_isr();
yumaowei 2:5e54476c518f 277 void play_next_note();
yumaowei 2:5e54476c518f 278
yumaowei 2:5e54476c518f 279
yumaowei 2:5e54476c518f 280
yumaowei 2:5e54476c518f 281 };
yumaowei 2:5e54476c518f 282
yumaowei 2:5e54476c518f 283 // Note definitions from Arduino.cc
yumaowei 2:5e54476c518f 284 #define NOTE_B0 31
yumaowei 2:5e54476c518f 285 #define NOTE_C1 33
yumaowei 2:5e54476c518f 286 #define NOTE_CS1 35
yumaowei 2:5e54476c518f 287 #define NOTE_D1 37
yumaowei 2:5e54476c518f 288 #define NOTE_DS1 39
yumaowei 2:5e54476c518f 289 #define NOTE_E1 41
yumaowei 2:5e54476c518f 290 #define NOTE_F1 44
yumaowei 2:5e54476c518f 291 #define NOTE_FS1 46
yumaowei 2:5e54476c518f 292 #define NOTE_G1 49
yumaowei 2:5e54476c518f 293 #define NOTE_GS1 52
yumaowei 2:5e54476c518f 294 #define NOTE_A1 55
yumaowei 2:5e54476c518f 295 #define NOTE_AS1 58
yumaowei 2:5e54476c518f 296 #define NOTE_B1 62
yumaowei 2:5e54476c518f 297 #define NOTE_C2 65
yumaowei 2:5e54476c518f 298 #define NOTE_CS2 69
yumaowei 2:5e54476c518f 299 #define NOTE_D2 73
yumaowei 2:5e54476c518f 300 #define NOTE_DS2 78
yumaowei 2:5e54476c518f 301 #define NOTE_E2 82
yumaowei 2:5e54476c518f 302 #define NOTE_F2 87
yumaowei 2:5e54476c518f 303 #define NOTE_FS2 93
yumaowei 2:5e54476c518f 304 #define NOTE_G2 98
yumaowei 2:5e54476c518f 305 #define NOTE_GS2 104
yumaowei 2:5e54476c518f 306 #define NOTE_A2 110
yumaowei 2:5e54476c518f 307 #define NOTE_AS2 117
yumaowei 2:5e54476c518f 308 #define NOTE_B2 123
yumaowei 2:5e54476c518f 309 #define NOTE_C3 131
yumaowei 2:5e54476c518f 310 #define NOTE_CS3 139
yumaowei 2:5e54476c518f 311 #define NOTE_D3 147
yumaowei 2:5e54476c518f 312 #define NOTE_DS3 156
yumaowei 2:5e54476c518f 313 #define NOTE_E3 165
yumaowei 2:5e54476c518f 314 #define NOTE_F3 175
yumaowei 2:5e54476c518f 315 #define NOTE_FS3 185
yumaowei 2:5e54476c518f 316 #define NOTE_G3 196
yumaowei 2:5e54476c518f 317 #define NOTE_GS3 208
yumaowei 2:5e54476c518f 318 #define NOTE_A3 220
yumaowei 2:5e54476c518f 319 #define NOTE_AS3 233
yumaowei 2:5e54476c518f 320 #define NOTE_B3 247
yumaowei 2:5e54476c518f 321 #define NOTE_C4 262
yumaowei 2:5e54476c518f 322 #define NOTE_CS4 277
yumaowei 2:5e54476c518f 323 #define NOTE_D4 294
yumaowei 2:5e54476c518f 324 #define NOTE_DS4 311
yumaowei 2:5e54476c518f 325 #define NOTE_E4 330
yumaowei 2:5e54476c518f 326 #define NOTE_F4 349
yumaowei 2:5e54476c518f 327 #define NOTE_FS4 370
yumaowei 2:5e54476c518f 328 #define NOTE_G4 392
yumaowei 2:5e54476c518f 329 #define NOTE_GS4 415
yumaowei 2:5e54476c518f 330 #define NOTE_A4 440
yumaowei 2:5e54476c518f 331 #define NOTE_AS4 466
yumaowei 2:5e54476c518f 332 #define NOTE_B4 494
yumaowei 2:5e54476c518f 333 #define NOTE_C5 523
yumaowei 2:5e54476c518f 334 #define NOTE_CS5 554
yumaowei 2:5e54476c518f 335 #define NOTE_D5 587
yumaowei 2:5e54476c518f 336 #define NOTE_DS5 622
yumaowei 2:5e54476c518f 337 #define NOTE_E5 659
yumaowei 2:5e54476c518f 338 #define NOTE_F5 698
yumaowei 2:5e54476c518f 339 #define NOTE_FS5 740
yumaowei 2:5e54476c518f 340 #define NOTE_G5 784
yumaowei 2:5e54476c518f 341 #define NOTE_GS5 831
yumaowei 2:5e54476c518f 342 #define NOTE_A5 880
yumaowei 2:5e54476c518f 343 #define NOTE_AS5 932
yumaowei 2:5e54476c518f 344 #define NOTE_B5 988
yumaowei 2:5e54476c518f 345 #define NOTE_C6 1047
yumaowei 2:5e54476c518f 346 #define NOTE_CS6 1109
yumaowei 2:5e54476c518f 347 #define NOTE_D6 1175
yumaowei 2:5e54476c518f 348 #define NOTE_DS6 1245
yumaowei 2:5e54476c518f 349 #define NOTE_E6 1319
yumaowei 2:5e54476c518f 350 #define NOTE_F6 1397
yumaowei 2:5e54476c518f 351 #define NOTE_FS6 1480
yumaowei 2:5e54476c518f 352 #define NOTE_G6 1568
yumaowei 2:5e54476c518f 353 #define NOTE_GS6 1661
yumaowei 2:5e54476c518f 354 #define NOTE_A6 1760
yumaowei 2:5e54476c518f 355 #define NOTE_AS6 1865
yumaowei 2:5e54476c518f 356 #define NOTE_B6 1976
yumaowei 2:5e54476c518f 357 #define NOTE_C7 2093
yumaowei 2:5e54476c518f 358 #define NOTE_CS7 2217
yumaowei 2:5e54476c518f 359 #define NOTE_D7 2349
yumaowei 2:5e54476c518f 360 #define NOTE_DS7 2489
yumaowei 2:5e54476c518f 361 #define NOTE_E7 2637
yumaowei 2:5e54476c518f 362 #define NOTE_F7 2794
yumaowei 2:5e54476c518f 363 #define NOTE_FS7 2960
yumaowei 2:5e54476c518f 364 #define NOTE_G7 3136
yumaowei 2:5e54476c518f 365 #define NOTE_GS7 3322
yumaowei 2:5e54476c518f 366 #define NOTE_A7 3520
yumaowei 2:5e54476c518f 367 #define NOTE_AS7 3729
yumaowei 2:5e54476c518f 368 #define NOTE_B7 3951
yumaowei 2:5e54476c518f 369 #define NOTE_C8 4186
yumaowei 2:5e54476c518f 370 #define NOTE_CS8 4435
yumaowei 2:5e54476c518f 371 #define NOTE_D8 4699
yumaowei 2:5e54476c518f 372 #define NOTE_DS8 4978
yumaowei 2:5e54476c518f 373
yumaowei 2:5e54476c518f 374 #endif