Export for Dan

Dependencies:   mbed MODSERIAL1

Committer:
atravieso
Date:
Thu Apr 14 19:03:32 2016 +0000
Revision:
9:b2debb0a6272
Parent:
8:6ce08e44a28e
This outputs humidity, and elapsed time (in seconds).  Outputs X, Y, and Z accelerations although only zeros (compare with working Accelerometer program to find prob).  Responds to serial interrupts of old format.  No compass interaction implemented.

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 }