Snake and Physics based jumping game with high scores and different difficulties.

Dependencies:   N5110 SDFileSystem mbed

main.h

Committer:
el14jw
Date:
2016-03-12
Revision:
0:23a749719479
Child:
1:c4928de1f922

File content as of revision 0:23a749719479:

/**
@file main.h

@brief Header file containing functions prototypes, defines and global variables.
@brief Revision 1.0.
@author Joel W. Webb
@date   March 2016
*/
 
#ifndef MAIN_H
#define MAIN_H
 
#define PI 3.14159265359
#define DIRECTION_TOLERANCE 0.05
 
#include "mbed.h"
#include "N5110.h"



        // GPIO Objects
/*
@namespace lcd
@brief N5110 object for interfacing with Nokia 5110 LCD
@param VCC - PTE26
@param SCE - PTA0
@param RST - PTC4
@param D/C - PTD0
@param MOSI - PTD2
@param SCLK - PTD1
@param LED - PTC3 
*/
N5110 lcd(PTE26, PTA0, PTC4, PTD0, PTD2, PTD1, PTC3);

/**  
@namespace errorLED
@brief GPIO output for error LED
*/
DigitalOut errorLED(LED1);

/**
@namespace buzzer
@brief PWM output for buzzer
*/
PwmOut buzzer(PTC10);

/**
@namespace xpot
@brief The joystick x axis potentiometer
*/
AnalogIn xPot(PTB11);

/**
@namespace ypot
@brief The joystick y axis potentiometer
*/
AnalogIn yPot(PTB10);

/**
@namespace buttonjoy
@brief Interrupt input for Joystick button
*/
InterruptIn buttonjoy(PTB9);

/**
@namespace buttonA
@brief Interrupt input for Button A
*/
InterruptIn buttonA(PTA1);

/**
@namespace buttonB
@brief Interrupt input for Button B
*/
InterruptIn buttonB(PTB23);



        //Data Structures

/// stringList struct for dealing with printing strings to LCD easier
struct stringList {
    char str[14];
    int offset;
};
typedef stringList stringList;

/// cell struct for dealing with coordinates
struct cell {
    int x;
    int y;
};
typedef cell cell;



        // Global variables
        
volatile int g_buttonA_flag; /*!< Button A flag set in ISR */
volatile int g_buttonB_flag; /*!< Button B flag set in ISR */
volatile int g_buttonjoy_flag; /*!< Joystick Button flag set in ISR */
volatile int g_joystick_flag; /*!< Joystick x and y values have been polled in ISR */
 volatile int g_gametick_flag; /*!< gametick flag is set in gametick_isr by Ticker gametick */
 
volatile const float* noteArray; /*!< Float pointer to next note in array. Used in sound Timeout ISR */

// Menu stringList arrays kept in FLASH
const stringList menuList[] = {{"Games",20},{"Snake",0},{"Pong",0},{"replace",0},{"replace",0},{"replace",0}};
const stringList snakeList[] = {{"Snake",20},{"Start",0},{"Difficulty",0},{"Back",0}};
const stringList difficultyList[] = {{"Difficulty",10},{"Easy",0},{"Medium",0},{"Hard",0}};
const stringList plinkList[] = {{"Plink",20},{"Start",0},{"Difficulty",0},{"Back",0}};

 
 
        // Function Prototypes
        
    //ISR
/**
Interrupt service routine for button A
@brief Sets g_buttonA_flag
*/
void buttonA_isr();
/**
Interrupt service routine for button B
@brief Sets g_buttonB_flag
*/
void buttonB_isr();
/**
Interrupt service routine for buttonjoy
@brief Set g_buttonjoy_flag
*/
void buttonjoy_isr();

/**
Interrupt service routine for playing the current note
@brief Alters the current PWM signal to the current note frequency read from noteArray
*/
void sound_isr();

/**
Interrupt service routine for Ticker gametick
@brief Used to control the update speed of games
*/
void gametick_isr();


    // Snake functions
/**
Main Snake game function
@brief The snake function is called from the main loop and contains everything needed to play the snake game
@param difficulty - The difficulty is easy(0) medium(1) or hard(2) and it alters how fast the game ticker is applied
*/
void snake(int difficulty);
/**
drawCellArray function
@brief A function for simplifying the drawing of pixels in an array of cell structs
@param array[] - The array of cells the user wishes to plot
@param length - Integer corresponding to how many array[] elements exist
*/
void drawCellArray(cell array[], int length);
/**
drawBoundary function
@brief Used for plotting a 2 pixel thick boundary to the edges of the LCD display
*/
void drawBoundary();


    // Pong functions
    
void pong(int difficulty);


    // Menu functions
/**
Menu screen Controller
@brief menu is a function that handles the selection of different menu selections
@param menuList - The pointer to the array of strings handled in the menu (Must be 6 or less)
@param line - The number of lines in the menu list (Must be 6 or less)
@returns Selected menu element (0-4)
*/
int menu(const stringList* menuList,int lines);
/**
The drawString function
@brief This function is used to simplify the menu function
@param stringList - a const string array containing the strings needed to be written on each line
@param lines - Integer representing how many strings should be written
*/
void drawStrings(const stringList* list,int lines);


    // Sound and error functions
/**
Attaches Timeout to play sounds immediately
@brief playSound is a function to provide ease fo use when calling sound arrays
@param sound - The pointer to the noteArray
*/
void playSound(const float* sound);

/**
Error function
@brief Hangs while flashing errorLED
*/
void error();


    // Initialising and joystick
/**
Initializes Inputs
@brief Used to group code that will run only once at startup
*/
void initInputs();
/**
Initializes the joystick
@brief Aquires xpot and ypot default values
*/
void calibrateJoystick();

/**
updateJoystick
@brief Updates direction the joystick is pointing in on a Ticker event
*/
void updateJoystick();



#include "sounds.h"
 
#endif