Helios Lyons 201239214

Dependencies:   mbed

Committer:
helioslyons
Date:
Tue Apr 14 13:22:35 2020 +0000
Revision:
5:72f59786b695
Parent:
1:a3f43007030e
Import to Mbed Studio

Who changed what in which revision?

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