ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el19my

Dependencies:   mbed ELEC2645_Project_el17my

Committer:
yumaowei
Date:
Sat May 09 06:53:41 2020 +0000
Revision:
1:df66be0b5b8b
initial commit

Who changed what in which revision?

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