Version of Robotron arcade game using LPC1768, a Gameduino shield, a serial EEPROM (for high scores), two microswitch joysticks and two buttons plus a box to put it in. 20 levels of mayhem.
Dependencies: 25LCxxx_SPI CommonTypes Gameduino mbed
I2CEEPROM.h@0:5fa232ee5fdf, 2013-06-04 (annotated)
- Committer:
- RichardE
- Date:
- Tue Jun 04 20:16:33 2013 +0000
- Revision:
- 0:5fa232ee5fdf
Started conversion from Maple version of game. So far Gameduino seems to have been initialised OK and just displays a sign on message. Lots of commented out code.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
RichardE | 0:5fa232ee5fdf | 1 | /* |
RichardE | 0:5fa232ee5fdf | 2 | * SOURCE FILE : I2CEEPROM.h |
RichardE | 0:5fa232ee5fdf | 3 | * |
RichardE | 0:5fa232ee5fdf | 4 | * Definition of class I2CEEPROM. |
RichardE | 0:5fa232ee5fdf | 5 | * Rountines for communicating with a serial EEPROM over an I2C link. |
RichardE | 0:5fa232ee5fdf | 6 | * EEPROM in question is a Microchip 24AA512. |
RichardE | 0:5fa232ee5fdf | 7 | * Remember you need pullup resistors on the SCL, SDA and WP lines. |
RichardE | 0:5fa232ee5fdf | 8 | * |
RichardE | 0:5fa232ee5fdf | 9 | */ |
RichardE | 0:5fa232ee5fdf | 10 | |
RichardE | 0:5fa232ee5fdf | 11 | #ifndef I2CEEPROMDefined |
RichardE | 0:5fa232ee5fdf | 12 | |
RichardE | 0:5fa232ee5fdf | 13 | #define I2CEEPROMDefined |
RichardE | 0:5fa232ee5fdf | 14 | |
RichardE | 0:5fa232ee5fdf | 15 | #include "Types.h" |
RichardE | 0:5fa232ee5fdf | 16 | // #include "CDFWire.h" // tweaked version of Wire library |
RichardE | 0:5fa232ee5fdf | 17 | |
RichardE | 0:5fa232ee5fdf | 18 | class I2CEEPROM { |
RichardE | 0:5fa232ee5fdf | 19 | |
RichardE | 0:5fa232ee5fdf | 20 | public : |
RichardE | 0:5fa232ee5fdf | 21 | |
RichardE | 0:5fa232ee5fdf | 22 | /***************/ |
RichardE | 0:5fa232ee5fdf | 23 | /* CONSTRUCTOR */ |
RichardE | 0:5fa232ee5fdf | 24 | /***************/ |
RichardE | 0:5fa232ee5fdf | 25 | I2CEEPROM(); |
RichardE | 0:5fa232ee5fdf | 26 | |
RichardE | 0:5fa232ee5fdf | 27 | /**************/ |
RichardE | 0:5fa232ee5fdf | 28 | /* DESTRUCTOR */ |
RichardE | 0:5fa232ee5fdf | 29 | /**************/ |
RichardE | 0:5fa232ee5fdf | 30 | virtual ~I2CEEPROM(); |
RichardE | 0:5fa232ee5fdf | 31 | |
RichardE | 0:5fa232ee5fdf | 32 | /**************************************/ |
RichardE | 0:5fa232ee5fdf | 33 | /* PREPARE TO COMMUNICATE WITH EEPROM */ |
RichardE | 0:5fa232ee5fdf | 34 | /**************************************/ |
RichardE | 0:5fa232ee5fdf | 35 | // Pass pointer to TwoWire object to use for I2C communications. |
RichardE | 0:5fa232ee5fdf | 36 | // Pass 3 bit address of EEPROM (as set by A0, A1 and A2 pins) in ea. |
RichardE | 0:5fa232ee5fdf | 37 | // Pass pin number to use for write protect in wp. |
RichardE | 0:5fa232ee5fdf | 38 | // void Open( TwoWire *wire, UInt8 ea, UInt8 wp ); |
RichardE | 0:5fa232ee5fdf | 39 | |
RichardE | 0:5fa232ee5fdf | 40 | /*********************************************/ |
RichardE | 0:5fa232ee5fdf | 41 | /* SHUT DOWN COMMUNICATIONS LINK WITH EEPROM */ |
RichardE | 0:5fa232ee5fdf | 42 | /*********************************************/ |
RichardE | 0:5fa232ee5fdf | 43 | void Close( void ); |
RichardE | 0:5fa232ee5fdf | 44 | |
RichardE | 0:5fa232ee5fdf | 45 | /*****************************************/ |
RichardE | 0:5fa232ee5fdf | 46 | /* DETERMINE IF LINK WITH EEPROM IS OPEN */ |
RichardE | 0:5fa232ee5fdf | 47 | /*****************************************/ |
RichardE | 0:5fa232ee5fdf | 48 | // Returns true if link is open. |
RichardE | 0:5fa232ee5fdf | 49 | bool IsOpen( void ) { |
RichardE | 0:5fa232ee5fdf | 50 | return isOpen; |
RichardE | 0:5fa232ee5fdf | 51 | } |
RichardE | 0:5fa232ee5fdf | 52 | |
RichardE | 0:5fa232ee5fdf | 53 | /*************************************/ |
RichardE | 0:5fa232ee5fdf | 54 | /* ATTEMPT TO READ A NUMBER OF BYTES */ |
RichardE | 0:5fa232ee5fdf | 55 | /*************************************/ |
RichardE | 0:5fa232ee5fdf | 56 | // Pass address within EEPROM in address. |
RichardE | 0:5fa232ee5fdf | 57 | // Pass pointer to buffer for bytes read in buffer. |
RichardE | 0:5fa232ee5fdf | 58 | // Pass number of bytes to read in count. |
RichardE | 0:5fa232ee5fdf | 59 | // Returns true if successful, false if not. |
RichardE | 0:5fa232ee5fdf | 60 | bool ReadBytes( UInt16 address, UInt8 *buffer, UInt16 count ); |
RichardE | 0:5fa232ee5fdf | 61 | |
RichardE | 0:5fa232ee5fdf | 62 | /**************************************/ |
RichardE | 0:5fa232ee5fdf | 63 | /* ATTEMPT TO WRITE A NUMBER OF BYTES */ |
RichardE | 0:5fa232ee5fdf | 64 | /**************************************/ |
RichardE | 0:5fa232ee5fdf | 65 | // Pass address within EEPROM in address. |
RichardE | 0:5fa232ee5fdf | 66 | // Pass pointer to buffer of bytes to write in buffer. |
RichardE | 0:5fa232ee5fdf | 67 | // Pass number of bytes to write in count. |
RichardE | 0:5fa232ee5fdf | 68 | // Returns true if successful, false if not. |
RichardE | 0:5fa232ee5fdf | 69 | bool WriteBytes( UInt16 address, const UInt8 *buffer, UInt16 count ); |
RichardE | 0:5fa232ee5fdf | 70 | |
RichardE | 0:5fa232ee5fdf | 71 | private : |
RichardE | 0:5fa232ee5fdf | 72 | |
RichardE | 0:5fa232ee5fdf | 73 | // Indicates connection with EEPROM is open. |
RichardE | 0:5fa232ee5fdf | 74 | bool isOpen; |
RichardE | 0:5fa232ee5fdf | 75 | |
RichardE | 0:5fa232ee5fdf | 76 | // Pointer to object that does I2C communications. |
RichardE | 0:5fa232ee5fdf | 77 | // TwoWire *wire; |
RichardE | 0:5fa232ee5fdf | 78 | |
RichardE | 0:5fa232ee5fdf | 79 | // Slave address consisting of three bits that identify the |
RichardE | 0:5fa232ee5fdf | 80 | // particular EEPROM on the I2C bus, plus bits 3 to 7 are |
RichardE | 0:5fa232ee5fdf | 81 | // set to 01010 binary (see 24AA512 dtasheet). |
RichardE | 0:5fa232ee5fdf | 82 | UInt8 slaveAddress; |
RichardE | 0:5fa232ee5fdf | 83 | |
RichardE | 0:5fa232ee5fdf | 84 | // Pin number for write protect pin. |
RichardE | 0:5fa232ee5fdf | 85 | UInt8 wp; |
RichardE | 0:5fa232ee5fdf | 86 | |
RichardE | 0:5fa232ee5fdf | 87 | /************************************/ |
RichardE | 0:5fa232ee5fdf | 88 | /* ATTEMPT TO READ A CHUNK OF BYTES */ |
RichardE | 0:5fa232ee5fdf | 89 | /************************************/ |
RichardE | 0:5fa232ee5fdf | 90 | // Pass address within EEPROM in address. |
RichardE | 0:5fa232ee5fdf | 91 | // Pass pointer to buffer for bytes read in buffer. |
RichardE | 0:5fa232ee5fdf | 92 | // Returns false if a failure occurred whilst reading EEPROM. |
RichardE | 0:5fa232ee5fdf | 93 | // Pass number of bytes to read in count. |
RichardE | 0:5fa232ee5fdf | 94 | // Returns true if successful, false if not. |
RichardE | 0:5fa232ee5fdf | 95 | // The number of bytes read must not exceed CHUNK_SIZE. |
RichardE | 0:5fa232ee5fdf | 96 | bool ReadChunk( UInt16 address, UInt8 *buffer, UInt8 count ); |
RichardE | 0:5fa232ee5fdf | 97 | |
RichardE | 0:5fa232ee5fdf | 98 | /**************************************/ |
RichardE | 0:5fa232ee5fdf | 99 | /* ATTEMPT TO WRITE A CHUNK TO EEPROM */ |
RichardE | 0:5fa232ee5fdf | 100 | /**************************************/ |
RichardE | 0:5fa232ee5fdf | 101 | // Pass address within EEPROM in address. |
RichardE | 0:5fa232ee5fdf | 102 | // Pass pointer to buffer of bytes to write in buffer. |
RichardE | 0:5fa232ee5fdf | 103 | // Pass number of bytes to write in count. |
RichardE | 0:5fa232ee5fdf | 104 | // Returns true if successful, false if not. |
RichardE | 0:5fa232ee5fdf | 105 | // The number of bytes written must not exceed WIRE_BUFSIZ - 2. |
RichardE | 0:5fa232ee5fdf | 106 | bool WriteChunk( UInt16 address, const UInt8 *buffer, UInt8 count ); |
RichardE | 0:5fa232ee5fdf | 107 | |
RichardE | 0:5fa232ee5fdf | 108 | }; |
RichardE | 0:5fa232ee5fdf | 109 | |
RichardE | 0:5fa232ee5fdf | 110 | #endif |
RichardE | 0:5fa232ee5fdf | 111 | |
RichardE | 0:5fa232ee5fdf | 112 | /* END of I2CEEPROM.h */ |
RichardE | 0:5fa232ee5fdf | 113 |