Export for Dan

Dependencies:   mbed MODSERIAL1

Committer:
atravieso
Date:
Mon Nov 02 17:09:22 2015 +0000
Revision:
8:6ce08e44a28e
Parent:
7:79a10204cb3b
Can receive and transmit hex commands on J3 via an RS232 level shifter.; Accelerations, elapsed time (in seconds), and humidity print to the terminal in ASCII via level shifter attached to J3.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
atravieso 0:4b4c18724370 1
atravieso 0:4b4c18724370 2
atravieso 0:4b4c18724370 3 #include "mbed.h"
atravieso 0:4b4c18724370 4 #include "MODSERIAL.h"
atravieso 5:14a21c3812ed 5 #include "HIH_5030.h"
atravieso 6:aa3219001d18 6 #include "ADXL345.h"
atravieso 8:6ce08e44a28e 7 #include "I2C.h"
atravieso 0:4b4c18724370 8
atravieso 1:66e3217ec4ec 9 #define MESSAGE_BUFFER_SIZE 100
atravieso 0:4b4c18724370 10
atravieso 0:4b4c18724370 11 DigitalOut led1(LED1);
atravieso 0:4b4c18724370 12 DigitalOut led2(LED2);
atravieso 0:4b4c18724370 13 DigitalOut led3(LED3);
atravieso 0:4b4c18724370 14 DigitalOut led4(LED4);
atravieso 5:14a21c3812ed 15 AnalogIn ain_UseA(p15);
atravieso 5:14a21c3812ed 16 //AnalogIn ain_UseB(p16); //pins 16-19 are tied to ground to reduce noise
atravieso 5:14a21c3812ed 17 //AnalogIn ain_UseC(p17);
atravieso 5:14a21c3812ed 18 //AnalogIn ain_UseD(p18);
atravieso 5:14a21c3812ed 19 //AnalogIn ain_UseE(p19);
atravieso 6:aa3219001d18 20 ADXL345 accelerometer(p5, p6, p7, p8);
atravieso 8:6ce08e44a28e 21 I2C i2c(p28, p27);
atravieso 0:4b4c18724370 22
atravieso 4:810c3971bb3e 23 MODSERIAL messageSystem(p13, p14);
atravieso 0:4b4c18724370 24
atravieso 5:14a21c3812ed 25 unsigned char messageBufferIncoming[MESSAGE_BUFFER_SIZE];
atravieso 5:14a21c3812ed 26 unsigned int hexBufferIncoming[MESSAGE_BUFFER_SIZE];
atravieso 4:810c3971bb3e 27 unsigned char messageBufferOutgoing[MESSAGE_BUFFER_SIZE];
atravieso 1:66e3217ec4ec 28 int count = 0;
atravieso 1:66e3217ec4ec 29 int i = 0;
atravieso 0:4b4c18724370 30 bool messageReceived;
atravieso 0:4b4c18724370 31
atravieso 1:66e3217ec4ec 32
atravieso 0:4b4c18724370 33 void messageReceive(MODSERIAL_IRQ_INFO *q) {
atravieso 1:66e3217ec4ec 34 // Get the pointer to MODSERIAL object that invoked this callback.
atravieso 0:4b4c18724370 35 MODSERIAL *sys = q->serial;
atravieso 3:4039b6c8da2e 36
atravieso 3:4039b6c8da2e 37 //dereference rxGetLasChar() of sys object
atravieso 4:810c3971bb3e 38 unsigned int c = sys->rxGetLastChar(); // Returns the last byte to pass through the RX interrupt handler.
atravieso 3:4039b6c8da2e 39
atravieso 5:14a21c3812ed 40 //add the character that triggered the interrupt to the incoming buffers
atravieso 5:14a21c3812ed 41 //I'm adding to an in buffer and a char buffer, but using the int buffer to determine which message it is
atravieso 5:14a21c3812ed 42 //if I want to use the char buffer to determine, then I need to use strcmp instead of =
atravieso 1:66e3217ec4ec 43 if(i <=MESSAGE_BUFFER_SIZE){
atravieso 5:14a21c3812ed 44 messageBufferIncoming[i] = c;
atravieso 3:4039b6c8da2e 45 hexBufferIncoming[i] = c;
atravieso 1:66e3217ec4ec 46 i++;
atravieso 5:14a21c3812ed 47 }
atravieso 1:66e3217ec4ec 48 count++;
atravieso 5:14a21c3812ed 49 if (count == 4){ //TODO: Determine if I need to be able to find a message anywhere within a bigger buffer
atravieso 4:810c3971bb3e 50 //led4 = !led4;
atravieso 4:810c3971bb3e 51 if (hexBufferIncoming[0] == 0xAA){ //Start Calibration
atravieso 3:4039b6c8da2e 52 if (hexBufferIncoming[1] == 0x55){
atravieso 3:4039b6c8da2e 53 if (hexBufferIncoming[2] == 0xFF){
atravieso 3:4039b6c8da2e 54 if (hexBufferIncoming[3] == 0x00){
atravieso 3:4039b6c8da2e 55 led1 = !led1;
atravieso 5:14a21c3812ed 56 //TODO: Determine if I need to add disable interrupt. What happens if I receive while transmitting???
atravieso 4:810c3971bb3e 57 messageSystem.printf("%c", messageBufferOutgoing[0]= 0xAB);
atravieso 4:810c3971bb3e 58 messageSystem.printf("%c", messageBufferOutgoing[1] = 0x54);
atravieso 4:810c3971bb3e 59 messageSystem.printf("%c", messageBufferOutgoing[2] = 0xFF);
atravieso 4:810c3971bb3e 60 messageSystem.printf("%c", messageBufferOutgoing[3] = 0x00);
atravieso 4:810c3971bb3e 61
atravieso 3:4039b6c8da2e 62 }
atravieso 3:4039b6c8da2e 63 }
atravieso 3:4039b6c8da2e 64 }
atravieso 3:4039b6c8da2e 65 }
atravieso 3:4039b6c8da2e 66
atravieso 4:810c3971bb3e 67 else if (hexBufferIncoming[0] == 0xBB){ //Stop Calibration
atravieso 3:4039b6c8da2e 68 if (hexBufferIncoming[1] == 0x44){
atravieso 3:4039b6c8da2e 69 if (hexBufferIncoming[2] == 0xFF){
atravieso 3:4039b6c8da2e 70 if (hexBufferIncoming[3] == 0x00){
atravieso 3:4039b6c8da2e 71 led2 = !led2;
atravieso 4:810c3971bb3e 72 messageSystem.printf("%c", messageBufferOutgoing[0]= 0xBC);
atravieso 4:810c3971bb3e 73 messageSystem.printf("%c", messageBufferOutgoing[1]= 0x43);
atravieso 4:810c3971bb3e 74 messageSystem.printf("%c", messageBufferOutgoing[2]= 0xFF);
atravieso 4:810c3971bb3e 75 messageSystem.printf("%c", messageBufferOutgoing[3]= 0x00);
atravieso 3:4039b6c8da2e 76 }
atravieso 3:4039b6c8da2e 77 }
atravieso 3:4039b6c8da2e 78 }
atravieso 3:4039b6c8da2e 79 }
atravieso 3:4039b6c8da2e 80
atravieso 4:810c3971bb3e 81 else if (hexBufferIncoming[0] == 0xCC){ //Get Calibration Value Leave room for data bits
atravieso 3:4039b6c8da2e 82 if (hexBufferIncoming[1] == 0x33){
atravieso 3:4039b6c8da2e 83 if (hexBufferIncoming[2] == 0xFF){
atravieso 3:4039b6c8da2e 84 if (hexBufferIncoming[3] == 0x00){
atravieso 3:4039b6c8da2e 85 led3 = !led3;
atravieso 4:810c3971bb3e 86 messageSystem.printf("%c", messageBufferOutgoing[0]= 0xCD);
atravieso 4:810c3971bb3e 87 messageSystem.printf("%c", messageBufferOutgoing[1]= 0x32);
atravieso 4:810c3971bb3e 88 messageSystem.printf("%c", messageBufferOutgoing[2]= 0xFF);
atravieso 4:810c3971bb3e 89 messageSystem.printf("%c", messageBufferOutgoing[3]= 0x00);
atravieso 3:4039b6c8da2e 90 }
atravieso 3:4039b6c8da2e 91 }
atravieso 3:4039b6c8da2e 92 }
atravieso 3:4039b6c8da2e 93 }
atravieso 4:810c3971bb3e 94 else if (hexBufferIncoming[0] == 0xDD){ //Get Dynamic Data Leave room for data bits
atravieso 3:4039b6c8da2e 95 if (hexBufferIncoming[1] == 0x22){
atravieso 3:4039b6c8da2e 96 if (hexBufferIncoming[2] == 0xFF){
atravieso 3:4039b6c8da2e 97 if (hexBufferIncoming[3] == 0x00){
atravieso 3:4039b6c8da2e 98 led4 = !led4;
atravieso 4:810c3971bb3e 99 messageSystem.printf("%c", messageBufferOutgoing[0]= 0xDE);
atravieso 4:810c3971bb3e 100 messageSystem.printf("%c", messageBufferOutgoing[1]= 0x21);
atravieso 4:810c3971bb3e 101 messageSystem.printf("%c", messageBufferOutgoing[2]= 0xFF);
atravieso 4:810c3971bb3e 102 messageSystem.printf("%c", messageBufferOutgoing[3]= 0x00);
atravieso 3:4039b6c8da2e 103 }
atravieso 3:4039b6c8da2e 104 }
atravieso 3:4039b6c8da2e 105 }
atravieso 3:4039b6c8da2e 106 }
atravieso 4:810c3971bb3e 107 else if (hexBufferIncoming[0] == 0xDB){ //Get Heading //Add space for responses
atravieso 3:4039b6c8da2e 108 if (hexBufferIncoming[1] == 0x24){
atravieso 3:4039b6c8da2e 109 if (hexBufferIncoming[2] == 0xFF){
atravieso 3:4039b6c8da2e 110 if (hexBufferIncoming[3] == 0x00){
atravieso 3:4039b6c8da2e 111 led1 = !led1;
atravieso 4:810c3971bb3e 112 messageSystem.printf("%c", messageBufferOutgoing[0]= 0xDC);
atravieso 4:810c3971bb3e 113 messageSystem.printf("%c", messageBufferOutgoing[1]= 0x23);
atravieso 4:810c3971bb3e 114 messageSystem.printf("%c", messageBufferOutgoing[2]= 0x00);
atravieso 4:810c3971bb3e 115 messageSystem.printf("%c", messageBufferOutgoing[3]= 0x00);
atravieso 3:4039b6c8da2e 116 }
atravieso 3:4039b6c8da2e 117 }
atravieso 3:4039b6c8da2e 118 }
atravieso 3:4039b6c8da2e 119 }
atravieso 4:810c3971bb3e 120 else if (hexBufferIncoming[0] == 0xD9){ //Get Temperature //Add space for response
atravieso 3:4039b6c8da2e 121 if (hexBufferIncoming[1] == 0x26){
atravieso 3:4039b6c8da2e 122 if (hexBufferIncoming[2] == 0xFF){
atravieso 3:4039b6c8da2e 123 if (hexBufferIncoming[3] == 0x00){
atravieso 3:4039b6c8da2e 124 led2 = !led2;
atravieso 4:810c3971bb3e 125 messageSystem.printf("%c", messageBufferOutgoing[0]= 0xDA);
atravieso 4:810c3971bb3e 126 messageSystem.printf("%c", messageBufferOutgoing[1]= 0x25);
atravieso 4:810c3971bb3e 127 messageSystem.printf("%c", messageBufferOutgoing[2]= 0x00);
atravieso 4:810c3971bb3e 128 messageSystem.printf("%c", messageBufferOutgoing[3]= 0x00);
atravieso 3:4039b6c8da2e 129 }
atravieso 3:4039b6c8da2e 130 }
atravieso 3:4039b6c8da2e 131 }
atravieso 3:4039b6c8da2e 132 }
atravieso 4:810c3971bb3e 133 else if (hexBufferIncoming[0] == 0xEE){ //Get Elapsed Time On //Add space for response
atravieso 3:4039b6c8da2e 134 if (hexBufferIncoming[1] == 0x11){
atravieso 3:4039b6c8da2e 135 if (hexBufferIncoming[2] == 0x00){
atravieso 3:4039b6c8da2e 136 if (hexBufferIncoming[3] == 0x01){
atravieso 3:4039b6c8da2e 137 led3 = !led3;
atravieso 4:810c3971bb3e 138 messageSystem.printf("%c", messageBufferOutgoing[0]= 0xEF);
atravieso 4:810c3971bb3e 139 messageSystem.printf("%c", messageBufferOutgoing[1]= 0x10);
atravieso 4:810c3971bb3e 140 messageSystem.printf("%c", messageBufferOutgoing[2]= 0x00);
atravieso 4:810c3971bb3e 141 messageSystem.printf("%c", messageBufferOutgoing[3]= 0x00);
atravieso 3:4039b6c8da2e 142 }
atravieso 3:4039b6c8da2e 143 }
atravieso 3:4039b6c8da2e 144 }
atravieso 3:4039b6c8da2e 145 }
atravieso 5:14a21c3812ed 146 memset(messageBufferIncoming, '\0', sizeof(messageBufferIncoming));
atravieso 4:810c3971bb3e 147 memset(hexBufferIncoming, '\0', sizeof(hexBufferIncoming));
atravieso 4:810c3971bb3e 148 memset(messageBufferOutgoing, '\0', sizeof(messageBufferOutgoing));
atravieso 1:66e3217ec4ec 149 i = 0;
atravieso 1:66e3217ec4ec 150 messageReceived = true;
atravieso 1:66e3217ec4ec 151 count = 0;
atravieso 1:66e3217ec4ec 152 }
atravieso 0:4b4c18724370 153 return;
atravieso 0:4b4c18724370 154 }
atravieso 0:4b4c18724370 155
atravieso 1:66e3217ec4ec 156 void messageProcess(void) {
atravieso 3:4039b6c8da2e 157 // led1 = !led1;
atravieso 0:4b4c18724370 158 messageReceived = false;
atravieso 0:4b4c18724370 159 }
atravieso 5:14a21c3812ed 160 /*
atravieso 5:14a21c3812ed 161 Constructor
atravieso 5:14a21c3812ed 162 dataPin: the IO pin connected to the sensor's data pin (pin 15)
atravieso 5:14a21c3812ed 163 supplyVoltage: the voltage supplying the humidity sensor (pins 1,3 - for the HIH5030 3.3 V typical)
atravieso 5:14a21c3812ed 164 referenceVoltage: motor controller's reference voltage (3.3V for the LPC1768)
atravieso 5:14a21c3812ed 165 */
atravieso 0:4b4c18724370 166
atravieso 5:14a21c3812ed 167 HIH5030::HIH5030(float dataPin, float supplyVoltage, float referenceVoltage){
atravieso 5:14a21c3812ed 168
atravieso 5:14a21c3812ed 169 pin = dataPin;
atravieso 5:14a21c3812ed 170 vSupply = supplyVoltage;
atravieso 5:14a21c3812ed 171 vRef = referenceVoltage;
atravieso 5:14a21c3812ed 172
atravieso 5:14a21c3812ed 173 /*
atravieso 5:14a21c3812ed 174 Relative Humidity is calculated using the following equations taken from the datasheet:
atravieso 5:14a21c3812ed 175 (1) Vout = (VSupply)(0.00636(sensorRH) + 0.1515)
atravieso 5:14a21c3812ed 176 (2) sensorRH = (Vout - zeroOffset) / slope
atravieso 5:14a21c3812ed 177
atravieso 5:14a21c3812ed 178 Solving (1) for sensorRH:
atravieso 5:14a21c3812ed 179 sensorRH = (Vout - (0.1515)VSupply) / (0.00636)VSupply
atravieso 5:14a21c3812ed 180
atravieso 5:14a21c3812ed 181 Equate result with (2):
atravieso 5:14a21c3812ed 182 zeroOffset = (0.1515)VSupply
atravieso 5:14a21c3812ed 183 slope = (0.00636)VSupply
atravieso 5:14a21c3812ed 184 */
atravieso 5:14a21c3812ed 185
atravieso 5:14a21c3812ed 186 slope = 0.00636 * vSupply;
atravieso 5:14a21c3812ed 187 zeroOffset = 0.1515 * vSupply;
atravieso 5:14a21c3812ed 188
atravieso 5:14a21c3812ed 189 }
atravieso 5:14a21c3812ed 190
atravieso 5:14a21c3812ed 191
atravieso 5:14a21c3812ed 192 /*
atravieso 5:14a21c3812ed 193 Convert sensor reading into relative humidity using equation (2)
atravieso 5:14a21c3812ed 194 */
atravieso 5:14a21c3812ed 195
atravieso 5:14a21c3812ed 196 float HIH5030::getSensorRH() {
atravieso 5:14a21c3812ed 197 return ((vout() - zeroOffset) / slope);
atravieso 5:14a21c3812ed 198
atravieso 5:14a21c3812ed 199 }
atravieso 5:14a21c3812ed 200
atravieso 5:14a21c3812ed 201 /*
atravieso 5:14a21c3812ed 202 Get temperature-compensated relative humity. From data sheet:
atravieso 5:14a21c3812ed 203 trueRH = sensorRH / (1.0546 - 0.00216T)
atravieso 5:14a21c3812ed 204 */
atravieso 5:14a21c3812ed 205
atravieso 5:14a21c3812ed 206 float HIH5030::getTrueRH(float temperature) {
atravieso 5:14a21c3812ed 207 return getSensorRH() / (1.0546 - (0.00216 * temperature));
atravieso 5:14a21c3812ed 208
atravieso 5:14a21c3812ed 209 }
atravieso 5:14a21c3812ed 210
atravieso 5:14a21c3812ed 211 /*
atravieso 5:14a21c3812ed 212 Get sensor output voltage.
atravieso 5:14a21c3812ed 213 Assumes 12-bit (2^16 = 4096) A/D resolution.
atravieso 5:14a21c3812ed 214 */
atravieso 5:14a21c3812ed 215
atravieso 5:14a21c3812ed 216 float HIH5030::vout() {
atravieso 5:14a21c3812ed 217 return (float)(ain_UseA.read_u16()) * 3.3 / 65536;
atravieso 5:14a21c3812ed 218
atravieso 5:14a21c3812ed 219 }
atravieso 6:aa3219001d18 220 void ADXL345::getOutput(int* readings){
atravieso 6:aa3219001d18 221
atravieso 6:aa3219001d18 222 char buffer[6];
atravieso 6:aa3219001d18 223
atravieso 6:aa3219001d18 224 multiByteRead(ADXL345_DATAX0_REG, buffer, 6);
atravieso 6:aa3219001d18 225
atravieso 6:aa3219001d18 226 readings[0] = (int)buffer[1] << 8 | (int)buffer[0];
atravieso 6:aa3219001d18 227 readings[1] = (int)buffer[3] << 8 | (int)buffer[2];
atravieso 6:aa3219001d18 228 readings[2] = (int)buffer[5] << 8 | (int)buffer[4];
atravieso 6:aa3219001d18 229
atravieso 6:aa3219001d18 230 }
atravieso 6:aa3219001d18 231
atravieso 6:aa3219001d18 232 void ADXL345::multiByteRead(int startAddress, char* buffer, int size) {
atravieso 6:aa3219001d18 233
atravieso 6:aa3219001d18 234 int tx = (ADXL345_SPI_READ | ADXL345_MULTI_BYTE | (startAddress & 0x3F));
atravieso 6:aa3219001d18 235
atravieso 6:aa3219001d18 236 nCS_ = 0;
atravieso 6:aa3219001d18 237 //Send address to start reading from.
atravieso 6:aa3219001d18 238 spi_.write(tx);
atravieso 6:aa3219001d18 239
atravieso 6:aa3219001d18 240 for (int i = 0; i < size; i++) {
atravieso 6:aa3219001d18 241 buffer[i] = spi_.write(0x00);
atravieso 6:aa3219001d18 242 }
atravieso 6:aa3219001d18 243
atravieso 6:aa3219001d18 244 nCS_ = 1;
atravieso 6:aa3219001d18 245
atravieso 6:aa3219001d18 246 }
atravieso 6:aa3219001d18 247
atravieso 6:aa3219001d18 248 //ACCELEROMETER
atravieso 6:aa3219001d18 249
atravieso 6:aa3219001d18 250 ADXL345::ADXL345(PinName mosi,
atravieso 6:aa3219001d18 251 PinName miso,
atravieso 6:aa3219001d18 252 PinName sck,
atravieso 6:aa3219001d18 253 PinName cs) : spi_(mosi, miso, sck), nCS_(cs) {
atravieso 6:aa3219001d18 254
atravieso 6:aa3219001d18 255 //2MHz, allowing us to use the fastest data rates.
atravieso 6:aa3219001d18 256 spi_.frequency(2000000);
atravieso 6:aa3219001d18 257 spi_.format(8,3);
atravieso 6:aa3219001d18 258
atravieso 6:aa3219001d18 259 nCS_ = 1;
atravieso 6:aa3219001d18 260
atravieso 6:aa3219001d18 261 wait_us(500);
atravieso 6:aa3219001d18 262
atravieso 6:aa3219001d18 263 }
atravieso 6:aa3219001d18 264
atravieso 6:aa3219001d18 265 //ACCELEROMETER
atravieso 0:4b4c18724370 266
atravieso 0:4b4c18724370 267 int main() {
atravieso 0:4b4c18724370 268
atravieso 0:4b4c18724370 269 messageReceived = false;
atravieso 5:14a21c3812ed 270 memset(messageBufferIncoming, '\0', sizeof(messageBufferIncoming));
atravieso 4:810c3971bb3e 271 memset(hexBufferIncoming, '\0', sizeof(hexBufferIncoming));
atravieso 4:810c3971bb3e 272 memset(messageBufferOutgoing, '\0', sizeof(messageBufferOutgoing));
atravieso 0:4b4c18724370 273 messageSystem.baud(9600);
atravieso 3:4039b6c8da2e 274 messageSystem.attach(&messageReceive, MODSERIAL::RxIrq); //Attach a C++ type object/method pointer as the callback.
atravieso 1:66e3217ec4ec 275
atravieso 0:4b4c18724370 276 // Fix Mbed library bug, see http://mbed.org/forum/bugs-suggestions/topic/1498
atravieso 0:4b4c18724370 277 LPC_GPIOINT->IO2IntClr = (1UL << 5) | (1UL << 4) | (1UL << 3) | (1UL << 2);
atravieso 0:4b4c18724370 278 \
atravieso 0:4b4c18724370 279 while(1) {
atravieso 4:810c3971bb3e 280 //led1 = !led1;
atravieso 4:810c3971bb3e 281 wait(.05);
atravieso 5:14a21c3812ed 282 float ad[5];
atravieso 5:14a21c3812ed 283 float supplyvoltage = 3.3;
atravieso 5:14a21c3812ed 284 float referencevoltage = 3.3;
atravieso 5:14a21c3812ed 285 float vdiv = (3.3 / 65536); //3.3 is the reference voltage (AnalogIn measures from 0V to 3.3V) and 65536 is the highest number that can be represented by a 16 bit unsigned
atravieso 5:14a21c3812ed 286 while( 1 ){
atravieso 5:14a21c3812ed 287 ad[0] = (float)ain_UseA.read_u16() * vdiv; //16-bit unsigned short representing the current input voltage, normalised to a 16-bit value
atravieso 5:14a21c3812ed 288 // ad[1] = (float)ain_UseB.read_u16() * vdiv;
atravieso 5:14a21c3812ed 289 // ad[2] = (float)ain_UseC.read_u16() * vdiv;
atravieso 5:14a21c3812ed 290 // ad[3] = (float)ain_UseD.read_u16() * vdiv;
atravieso 5:14a21c3812ed 291 // ad[4] = (float)ain_UseE.read_u16() * vdiv;
atravieso 5:14a21c3812ed 292 //pc.printf("%5.3f,%5.3f,%5.3f,%5.3f,%5.3f\r\n ", ad[0],ad[1],ad[2],ad[3],ad[4]);
atravieso 5:14a21c3812ed 293 HIH5030 humidity(ad[0], supplyvoltage, referencevoltage);
atravieso 7:79a10204cb3b 294 messageSystem.printf("Humidity: %5.3f\r\n", humidity.getSensorRH());
atravieso 5:14a21c3812ed 295 led3 = 1;
atravieso 5:14a21c3812ed 296 wait(2.0);
atravieso 5:14a21c3812ed 297 led3 = 0;
atravieso 5:14a21c3812ed 298 wait(2.0);
atravieso 6:aa3219001d18 299
atravieso 6:aa3219001d18 300 ///ACCELEROMETER
atravieso 6:aa3219001d18 301
atravieso 6:aa3219001d18 302 int readings[3] = {0, 0, 0};
atravieso 6:aa3219001d18 303
atravieso 6:aa3219001d18 304 // messageSystem.printf("Starting ADXL345 test...\n");
atravieso 6:aa3219001d18 305 // messageSystem.printf("Device ID is: 0x%02x\n", accelerometer.getDevId());
atravieso 6:aa3219001d18 306
atravieso 6:aa3219001d18 307 //Go into standby mode to configure the device.
atravieso 6:aa3219001d18 308 // accelerometer.setPowerControl(0x00);
atravieso 6:aa3219001d18 309
atravieso 6:aa3219001d18 310 //Full resolution, +/-16g, 4mg/LSB.
atravieso 6:aa3219001d18 311 // accelerometer.setDataFormatControl(0x0B);
atravieso 6:aa3219001d18 312
atravieso 6:aa3219001d18 313 //3.2kHz data rate. Changed from 3.2k to 25Hz
atravieso 6:aa3219001d18 314 // accelerometer.setDataRate(ADXL345_25HZ);
atravieso 6:aa3219001d18 315
atravieso 6:aa3219001d18 316 //Measurement mode.
atravieso 6:aa3219001d18 317 // accelerometer.setPowerControl(0x08);
atravieso 6:aa3219001d18 318
atravieso 6:aa3219001d18 319 wait(0.1);
atravieso 6:aa3219001d18 320
atravieso 6:aa3219001d18 321 accelerometer.getOutput(readings);
atravieso 6:aa3219001d18 322
atravieso 6:aa3219001d18 323 //13-bit, sign extended values.
atravieso 8:6ce08e44a28e 324 messageSystem.printf("X:%i, Y:%i, Z:%i \r\n", (int16_t)readings[0], (int16_t)readings[1], (int16_t)readings[2]);
atravieso 6:aa3219001d18 325 led4 = !led4;
atravieso 6:aa3219001d18 326
atravieso 6:aa3219001d18 327 ///ACCELEROMETER
atravieso 8:6ce08e44a28e 328
atravieso 8:6ce08e44a28e 329 //ETC
atravieso 8:6ce08e44a28e 330 unsigned char ttal, ttalm, ttahm, ttalh, evntl, evnth;
atravieso 8:6ce08e44a28e 331 long int tmp;
atravieso 8:6ce08e44a28e 332
atravieso 8:6ce08e44a28e 333 i2c.start();
atravieso 8:6ce08e44a28e 334 i2c.write(0xD6);
atravieso 8:6ce08e44a28e 335 i2c.write(5);
atravieso 8:6ce08e44a28e 336 i2c.start();
atravieso 8:6ce08e44a28e 337 i2c.write(0xD6 | 1);
atravieso 8:6ce08e44a28e 338 ttal = i2c.read(5);
atravieso 8:6ce08e44a28e 339 ttalm = i2c.read(6);
atravieso 8:6ce08e44a28e 340 ttahm = i2c.read(7);
atravieso 8:6ce08e44a28e 341 ttalh = i2c.read(8);
atravieso 8:6ce08e44a28e 342 i2c.stop();
atravieso 8:6ce08e44a28e 343 tmp = ((long int) ttalh << 24) + ((long int) ttahm << 16) + ((long int) ttalm << 8) + (long int) ttal;
atravieso 8:6ce08e44a28e 344 tmp >>= 2;
atravieso 8:6ce08e44a28e 345 messageSystem.printf("Event Time: %d sec \r\n", tmp);
atravieso 8:6ce08e44a28e 346 i2c.stop();
atravieso 8:6ce08e44a28e 347
atravieso 8:6ce08e44a28e 348
atravieso 8:6ce08e44a28e 349 //ETC
atravieso 5:14a21c3812ed 350 }
atravieso 6:aa3219001d18 351
atravieso 6:aa3219001d18 352
atravieso 0:4b4c18724370 353 if (messageReceived)
atravieso 0:4b4c18724370 354 {
atravieso 4:810c3971bb3e 355 //led2 = !led2;
atravieso 0:4b4c18724370 356 messageProcess();
atravieso 0:4b4c18724370 357 }
atravieso 0:4b4c18724370 358 }
atravieso 0:4b4c18724370 359 }