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