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:
Tue Mar 24 18:02:01 2020 +0000
Revision:
1:a3f43007030e
Child:
8:ec4199484adf
Initial commit, 24th March

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