for rex

Dependencies:   FatFileSystem mbed

Fork of SnakeGame by Pujun Bhatnagar

Committer:
superlova
Date:
Sat Aug 08 09:32:56 2015 +0000
Revision:
1:4222a8f9ca88
Parent:
0:8b08136c5edd
for rexry

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pbhatnagar3 0:8b08136c5edd 1 /* Copyright (c) <year> <copyright holders>, MIT License
pbhatnagar3 0:8b08136c5edd 2 *
pbhatnagar3 0:8b08136c5edd 3 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
pbhatnagar3 0:8b08136c5edd 4 * and associated documentation files (the "Software"), to deal in the Software without restriction,
pbhatnagar3 0:8b08136c5edd 5 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
pbhatnagar3 0:8b08136c5edd 6 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
pbhatnagar3 0:8b08136c5edd 7 * furnished to do so, subject to the following conditions:
pbhatnagar3 0:8b08136c5edd 8 *
pbhatnagar3 0:8b08136c5edd 9 * The above copyright notice and this permission notice shall be included in all copies or
pbhatnagar3 0:8b08136c5edd 10 * substantial portions of the Software.
pbhatnagar3 0:8b08136c5edd 11 *
pbhatnagar3 0:8b08136c5edd 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
pbhatnagar3 0:8b08136c5edd 13 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
pbhatnagar3 0:8b08136c5edd 14 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
pbhatnagar3 0:8b08136c5edd 15 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
pbhatnagar3 0:8b08136c5edd 16 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
pbhatnagar3 0:8b08136c5edd 17 */
pbhatnagar3 0:8b08136c5edd 18
pbhatnagar3 0:8b08136c5edd 19 #include "mbed.h"
pbhatnagar3 0:8b08136c5edd 20
pbhatnagar3 0:8b08136c5edd 21
pbhatnagar3 0:8b08136c5edd 22 #ifndef MMA7660_H
pbhatnagar3 0:8b08136c5edd 23 #define MMA7660_H
pbhatnagar3 0:8b08136c5edd 24
pbhatnagar3 0:8b08136c5edd 25 #define MMA7660_ADDRESS 0x98
pbhatnagar3 0:8b08136c5edd 26 #define MMA7660_SENSITIVITY 21.33
pbhatnagar3 0:8b08136c5edd 27
pbhatnagar3 0:8b08136c5edd 28 #define MMA7660_XOUT_R 0x00
pbhatnagar3 0:8b08136c5edd 29 #define MMA7660_YOUT_R 0x01
pbhatnagar3 0:8b08136c5edd 30 #define MMA7660_ZOUT_R 0x02
pbhatnagar3 0:8b08136c5edd 31 #define MMA7660_TILT_R 0x03
pbhatnagar3 0:8b08136c5edd 32 #define MMA7660_INT_R 0x06
pbhatnagar3 0:8b08136c5edd 33 #define MMA7660_MODE_R 0x07
pbhatnagar3 0:8b08136c5edd 34 #define MMA7660_SR_R 0x08
pbhatnagar3 0:8b08136c5edd 35
pbhatnagar3 0:8b08136c5edd 36
pbhatnagar3 0:8b08136c5edd 37 /** An interface for the MMA7660 triple axis accelerometer
pbhatnagar3 0:8b08136c5edd 38 *
pbhatnagar3 0:8b08136c5edd 39 * @code
pbhatnagar3 0:8b08136c5edd 40 * //Uses the measured z-acceleration to drive leds 2 and 3 of the mbed
pbhatnagar3 0:8b08136c5edd 41 *
pbhatnagar3 0:8b08136c5edd 42 * #include "mbed.h"
pbhatnagar3 0:8b08136c5edd 43 * #include "MMA7660.h"
pbhatnagar3 0:8b08136c5edd 44 *
pbhatnagar3 0:8b08136c5edd 45 * MMA7660 MMA(p28, p27);
pbhatnagar3 0:8b08136c5edd 46 *
pbhatnagar3 0:8b08136c5edd 47 * DigitalOut connectionLed(LED1);
pbhatnagar3 0:8b08136c5edd 48 * PwmOut Zaxis_p(LED2);
pbhatnagar3 0:8b08136c5edd 49 * PwmOut Zaxis_n(LED3);
pbhatnagar3 0:8b08136c5edd 50 *
pbhatnagar3 0:8b08136c5edd 51 * int main() {
pbhatnagar3 0:8b08136c5edd 52 * if (MMA.testConnection())
pbhatnagar3 0:8b08136c5edd 53 * connectionLed = 1;
pbhatnagar3 0:8b08136c5edd 54 *
pbhatnagar3 0:8b08136c5edd 55 * while(1) {
pbhatnagar3 0:8b08136c5edd 56 * Zaxis_p = MMA.z();
pbhatnagar3 0:8b08136c5edd 57 * Zaxis_n = -MMA.z();
pbhatnagar3 0:8b08136c5edd 58 * }
pbhatnagar3 0:8b08136c5edd 59 *
pbhatnagar3 0:8b08136c5edd 60 * }
pbhatnagar3 0:8b08136c5edd 61 * @endcode
pbhatnagar3 0:8b08136c5edd 62 */
pbhatnagar3 0:8b08136c5edd 63 class MMA7660
pbhatnagar3 0:8b08136c5edd 64 {
pbhatnagar3 0:8b08136c5edd 65 public:
pbhatnagar3 0:8b08136c5edd 66 /**
pbhatnagar3 0:8b08136c5edd 67 * The 6 different orientations and unknown
pbhatnagar3 0:8b08136c5edd 68 *
pbhatnagar3 0:8b08136c5edd 69 * Up & Down = X-axis
pbhatnagar3 0:8b08136c5edd 70 * Right & Left = Y-axis
pbhatnagar3 0:8b08136c5edd 71 * Back & Front = Z-axis
pbhatnagar3 0:8b08136c5edd 72 *
pbhatnagar3 0:8b08136c5edd 73 */
pbhatnagar3 0:8b08136c5edd 74 enum Orientation {Up, Down,
pbhatnagar3 0:8b08136c5edd 75 Right, Left,
pbhatnagar3 0:8b08136c5edd 76 Back, Front,
pbhatnagar3 0:8b08136c5edd 77 Unknown
pbhatnagar3 0:8b08136c5edd 78 };
pbhatnagar3 0:8b08136c5edd 79
pbhatnagar3 0:8b08136c5edd 80 /**
pbhatnagar3 0:8b08136c5edd 81 * Creates a new MMA7660 object
pbhatnagar3 0:8b08136c5edd 82 *
pbhatnagar3 0:8b08136c5edd 83 * @param sda - I2C data pin
pbhatnagar3 0:8b08136c5edd 84 * @param scl - I2C clock pin
pbhatnagar3 0:8b08136c5edd 85 * @param active - true (default) to enable the device, false to keep it standby
pbhatnagar3 0:8b08136c5edd 86 */
pbhatnagar3 0:8b08136c5edd 87 MMA7660(PinName sda, PinName scl, bool active = true);
pbhatnagar3 0:8b08136c5edd 88
pbhatnagar3 0:8b08136c5edd 89 /**
pbhatnagar3 0:8b08136c5edd 90 * Tests if communication is possible with the MMA7660
pbhatnagar3 0:8b08136c5edd 91 *
pbhatnagar3 0:8b08136c5edd 92 * Because the MMA7660 lacks a WHO_AM_I register, this function can only check
pbhatnagar3 0:8b08136c5edd 93 * if there is an I2C device that responds to the MMA7660 address
pbhatnagar3 0:8b08136c5edd 94 *
pbhatnagar3 0:8b08136c5edd 95 * @param return - true for successfull connection, false for no connection
pbhatnagar3 0:8b08136c5edd 96 */
pbhatnagar3 0:8b08136c5edd 97 bool testConnection( void );
pbhatnagar3 0:8b08136c5edd 98
pbhatnagar3 0:8b08136c5edd 99 /**
pbhatnagar3 0:8b08136c5edd 100 * Sets the active state of the MMA7660
pbhatnagar3 0:8b08136c5edd 101 *
pbhatnagar3 0:8b08136c5edd 102 * Note: This is unrelated to awake/sleep mode
pbhatnagar3 0:8b08136c5edd 103 *
pbhatnagar3 0:8b08136c5edd 104 * @param state - true for active, false for standby
pbhatnagar3 0:8b08136c5edd 105 */
pbhatnagar3 0:8b08136c5edd 106 void setActive( bool state);
pbhatnagar3 0:8b08136c5edd 107
pbhatnagar3 0:8b08136c5edd 108 /**
pbhatnagar3 0:8b08136c5edd 109 * Reads acceleration data from the sensor
pbhatnagar3 0:8b08136c5edd 110 *
pbhatnagar3 0:8b08136c5edd 111 * When the parameter is a pointer to an integer array it will be the raw data.
pbhatnagar3 0:8b08136c5edd 112 * When it is a pointer to a float array it will be the acceleration in g's
pbhatnagar3 0:8b08136c5edd 113 *
pbhatnagar3 0:8b08136c5edd 114 * @param data - pointer to array with length 3 where the acceleration data will be stored, X-Y-Z
pbhatnagar3 0:8b08136c5edd 115 */
pbhatnagar3 0:8b08136c5edd 116 void readData( int *data);
pbhatnagar3 0:8b08136c5edd 117 void readData( float *data);
pbhatnagar3 0:8b08136c5edd 118
pbhatnagar3 0:8b08136c5edd 119 /**
pbhatnagar3 0:8b08136c5edd 120 * Get X-data
pbhatnagar3 0:8b08136c5edd 121 *
pbhatnagar3 0:8b08136c5edd 122 * @param return - X-acceleration in g's
pbhatnagar3 0:8b08136c5edd 123 */
pbhatnagar3 0:8b08136c5edd 124 float x( void );
pbhatnagar3 0:8b08136c5edd 125
pbhatnagar3 0:8b08136c5edd 126 /**
pbhatnagar3 0:8b08136c5edd 127 * Get Y-data
pbhatnagar3 0:8b08136c5edd 128 *
pbhatnagar3 0:8b08136c5edd 129 * @param return - Y-acceleration in g's
pbhatnagar3 0:8b08136c5edd 130 */
pbhatnagar3 0:8b08136c5edd 131 float y( void );
pbhatnagar3 0:8b08136c5edd 132
pbhatnagar3 0:8b08136c5edd 133 /**
pbhatnagar3 0:8b08136c5edd 134 * Get Z-data
pbhatnagar3 0:8b08136c5edd 135 *
pbhatnagar3 0:8b08136c5edd 136 * @param return - Z-acceleration in g's
pbhatnagar3 0:8b08136c5edd 137 */
pbhatnagar3 0:8b08136c5edd 138 float z( void );
pbhatnagar3 0:8b08136c5edd 139
pbhatnagar3 0:8b08136c5edd 140 /**
pbhatnagar3 0:8b08136c5edd 141 * Sets the active samplerate
pbhatnagar3 0:8b08136c5edd 142 *
pbhatnagar3 0:8b08136c5edd 143 * The entered samplerate will be rounded to nearest supported samplerate.
pbhatnagar3 0:8b08136c5edd 144 * Supported samplerates are: 120 - 64 - 32 - 16 - 8 - 4 - 2 - 1 samples/second.
pbhatnagar3 0:8b08136c5edd 145 *
pbhatnagar3 0:8b08136c5edd 146 * @param samplerate - the samplerate that will be set
pbhatnagar3 0:8b08136c5edd 147 */
pbhatnagar3 0:8b08136c5edd 148 void setSampleRate(int samplerate);
pbhatnagar3 0:8b08136c5edd 149
pbhatnagar3 0:8b08136c5edd 150 /**
pbhatnagar3 0:8b08136c5edd 151 * Returns if it is on its front, back, or unknown side
pbhatnagar3 0:8b08136c5edd 152 *
pbhatnagar3 0:8b08136c5edd 153 * This is read from MMA7760s registers, page 12 of datasheet
pbhatnagar3 0:8b08136c5edd 154 *
pbhatnagar3 0:8b08136c5edd 155 * @param return - Front, Back or Unknown orientation
pbhatnagar3 0:8b08136c5edd 156 */
pbhatnagar3 0:8b08136c5edd 157 Orientation getSide( void );
pbhatnagar3 0:8b08136c5edd 158
pbhatnagar3 0:8b08136c5edd 159 /**
pbhatnagar3 0:8b08136c5edd 160 * Returns if it is on it left, right, down or up side
pbhatnagar3 0:8b08136c5edd 161 *
pbhatnagar3 0:8b08136c5edd 162 * This is read from MMA7760s registers, page 12 of datasheet
pbhatnagar3 0:8b08136c5edd 163 *
pbhatnagar3 0:8b08136c5edd 164 * @param return - Left, Right, Down, Up or Unknown orientation
pbhatnagar3 0:8b08136c5edd 165 */
pbhatnagar3 0:8b08136c5edd 166 Orientation getOrientation ( void );
pbhatnagar3 0:8b08136c5edd 167
pbhatnagar3 0:8b08136c5edd 168
pbhatnagar3 0:8b08136c5edd 169 private:
pbhatnagar3 0:8b08136c5edd 170
pbhatnagar3 0:8b08136c5edd 171 /**
pbhatnagar3 0:8b08136c5edd 172 * Writes data to the device
pbhatnagar3 0:8b08136c5edd 173 *
pbhatnagar3 0:8b08136c5edd 174 * @param adress - register address to write to
pbhatnagar3 0:8b08136c5edd 175 * @param data - data to write
pbhatnagar3 0:8b08136c5edd 176 */
pbhatnagar3 0:8b08136c5edd 177 void write( char address, char data);
pbhatnagar3 0:8b08136c5edd 178
pbhatnagar3 0:8b08136c5edd 179 /**
pbhatnagar3 0:8b08136c5edd 180 * Read data from the device
pbhatnagar3 0:8b08136c5edd 181 *
pbhatnagar3 0:8b08136c5edd 182 * @param adress - register address to write to
pbhatnagar3 0:8b08136c5edd 183 * @return - data from the register specified by RA
pbhatnagar3 0:8b08136c5edd 184 */
pbhatnagar3 0:8b08136c5edd 185 char read( char adress);
pbhatnagar3 0:8b08136c5edd 186
pbhatnagar3 0:8b08136c5edd 187 /**
pbhatnagar3 0:8b08136c5edd 188 * Read multiple regigsters from the device, more efficient than using multiple normal reads.
pbhatnagar3 0:8b08136c5edd 189 *
pbhatnagar3 0:8b08136c5edd 190 * @param adress - register address to write to
pbhatnagar3 0:8b08136c5edd 191 * @param length - number of bytes to read
pbhatnagar3 0:8b08136c5edd 192 * @param data - pointer where the data needs to be written to
pbhatnagar3 0:8b08136c5edd 193 */
pbhatnagar3 0:8b08136c5edd 194 void read( char adress, char *data, int length);
pbhatnagar3 0:8b08136c5edd 195
pbhatnagar3 0:8b08136c5edd 196 /**
pbhatnagar3 0:8b08136c5edd 197 * Reads single axis
pbhatnagar3 0:8b08136c5edd 198 */
pbhatnagar3 0:8b08136c5edd 199 float getSingle(int number);
pbhatnagar3 0:8b08136c5edd 200
pbhatnagar3 0:8b08136c5edd 201 I2C _i2c;
pbhatnagar3 0:8b08136c5edd 202 bool active;
pbhatnagar3 0:8b08136c5edd 203 float samplerate;
pbhatnagar3 0:8b08136c5edd 204 };
pbhatnagar3 0:8b08136c5edd 205
pbhatnagar3 0:8b08136c5edd 206
pbhatnagar3 0:8b08136c5edd 207 #endif