Helios Lyons 201239214

Dependencies:   mbed

Brief

My aim for this project was to create a FRDM K64F adapted version of the classic Space Invaders by Tomohiro Nishikado. The game itself has a number of clear features to implement;

  • Left to right movement for the player 'canon'
  • A fixed amount of player lives
  • Firing mechanics for both canon and invaders (hence collision systems)
  • Random firing from remaining invaders
  • Wave based combat

My own addition to these established ideas was Boss waves, featuring a single, larger sprite which fires at a faster interval than previous waves. The addition of a movement system using a basic for loop, as opposed to a velocity based system, will enhance the nostalgic feel of the game.

https://os.mbed.com/media/uploads/helioslyons/screenshot_2020-05-27_at_06.12.00.png

Gameplay

Movement is controlled with the joystick, moving the canon left or right. Fire by pressing A. Invaders spawn at set positions, but randomly fire at a set interval, which is higher for boss waves. Time is taken during each wave, and displayed at wave intervals, and if the play wins.

Controls are shown on the Gamepad below: (attribution: Craig A. Evans, ELEC2645 University of Leeds)

https://os.mbed.com/media/uploads/helioslyons/screenshot_2020-05-27_at_06.20.18.png

Committer:
helioslyons
Date:
Wed May 27 15:40:47 2020 +0000
Revision:
13:1472c1637bfc
Parent:
8:ec4199484adf
Final Submission. I have read and agreed with Statement of Academic Integrity.

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