ELEC2645 (2019/20) / Mbed 2 deprecated ELEC2645_PROJECT_EL18KK

Dependencies:   mbed

Committer:
KaifK
Date:
Tue May 26 15:50:46 2020 +0000
Revision:
31:e1f80d181779
Parent:
0:e47aa16004e6
Final Submission. I have read and agreed with Statement of Academic Integrity.

Who changed what in which revision?

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