ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_Project_el18zc

Dependencies:   mbed

Committer:
ChenZirui
Date:
Sat May 23 06:26:21 2020 +0000
Revision:
2:cb2fd25433ee
Parent:
1:86da5130732b
rename

Who changed what in which revision?

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