Amanda Travieso
/
SerialComms
Export for Dan
main.cpp@9:b2debb0a6272, 2016-04-14 (annotated)
- 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?
User | Revision | Line number | New 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 | } |