Code supports writing to the SD card as well as working with the Volckens group smartphone apps for the mbed HRM1017
Dependencies: ADS1115 BLE_API BME280 Calibration CronoDot EEPROM LSM303 MCP40D17 NCP5623BMUTBG SDFileSystem SI1145 STC3100 mbed nRF51822
Fork of UPAS_BLE_and_USB by
main.cpp@15:3d1322f05b8e, 2015-05-29 (annotated)
- Committer:
- caseyquinn
- Date:
- Fri May 29 23:21:21 2015 +0000
- Revision:
- 15:3d1322f05b8e
- Parent:
- 14:ad550174db8b
- Child:
- 16:210e5eaeb89b
Modified Saved Files with date time stamp
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
caseyquinn | 0:14d46ef4b6cb | 1 | #include "mbed.h" |
caseyquinn | 0:14d46ef4b6cb | 2 | #include "SDFileSystem.h" |
caseyquinn | 0:14d46ef4b6cb | 3 | #include "Adafruit_ADS1015.h" |
caseyquinn | 1:37babeb68ab9 | 4 | #include "MCP40D17.h" |
caseyquinn | 10:f9cb61b29340 | 5 | #include "wire.h" //Used with the RTC in this code. Will need to try and remove this, and also create the correct library/update addresses and registers for the RTC. |
caseyquinn | 7:a24d7156bc02 | 6 | #include "STC3100.h" |
caseyquinn | 10:f9cb61b29340 | 7 | #include "LSM303.h" |
caseyquinn | 12:8c00a7f5d483 | 8 | #include "BME280.h" |
caseyquinn | 14:ad550174db8b | 9 | #include "SI1145.h" |
caseyquinn | 1:37babeb68ab9 | 10 | |
caseyquinn | 1:37babeb68ab9 | 11 | #define SERIAL_BAUD_RATE 9600 |
caseyquinn | 7:a24d7156bc02 | 12 | #define SCL 20 |
caseyquinn | 7:a24d7156bc02 | 13 | #define SDA 22 |
caseyquinn | 7:a24d7156bc02 | 14 | #define Crono 0xD0 //D0 for the chronoDot |
caseyquinn | 0:14d46ef4b6cb | 15 | |
caseyquinn | 0:14d46ef4b6cb | 16 | I2C i2c(p22, p20); |
caseyquinn | 0:14d46ef4b6cb | 17 | Adafruit_ADS1115 ads(&i2c); |
caseyquinn | 1:37babeb68ab9 | 18 | MCP40D17 DigPot(&i2c); |
caseyquinn | 12:8c00a7f5d483 | 19 | BME280 bmesensor(p22, p20); |
caseyquinn | 7:a24d7156bc02 | 20 | STC3100 gasG(p22, p20); |
caseyquinn | 2:e596e685eb39 | 21 | Serial pc(USBTX, USBRX); |
caseyquinn | 8:204c21adf693 | 22 | DigitalOut blower(p29, 0); |
caseyquinn | 15:3d1322f05b8e | 23 | DigitalOut pbKill(p18, 1); |
caseyquinn | 10:f9cb61b29340 | 24 | LSM303 movementsensor(p22, p20); |
caseyquinn | 14:ad550174db8b | 25 | SI1145 lightsensor(p22, p20); |
caseyquinn | 0:14d46ef4b6cb | 26 | |
caseyquinn | 7:a24d7156bc02 | 27 | //Timer t; |
caseyquinn | 4:69bd7e8a994c | 28 | |
caseyquinn | 7:a24d7156bc02 | 29 | //float battAmps; |
caseyquinn | 7:a24d7156bc02 | 30 | //float battVolts; |
caseyquinn | 7:a24d7156bc02 | 31 | //float battGG; |
caseyquinn | 8:204c21adf693 | 32 | |
caseyquinn | 10:f9cb61b29340 | 33 | float accel_x; |
caseyquinn | 10:f9cb61b29340 | 34 | float accel_y; |
caseyquinn | 10:f9cb61b29340 | 35 | float accel_z; |
caseyquinn | 10:f9cb61b29340 | 36 | float mag_x; |
caseyquinn | 10:f9cb61b29340 | 37 | float mag_y; |
caseyquinn | 10:f9cb61b29340 | 38 | float mag_z; |
caseyquinn | 10:f9cb61b29340 | 39 | |
caseyquinn | 0:14d46ef4b6cb | 40 | int omronReading; |
caseyquinn | 0:14d46ef4b6cb | 41 | int vInReading; |
caseyquinn | 0:14d46ef4b6cb | 42 | int vBlowerReading; |
caseyquinn | 0:14d46ef4b6cb | 43 | int omronDiff; |
caseyquinn | 14:ad550174db8b | 44 | int digital_pot_setpoint = 0x46; //min = 0x7F, max = 0x00 |
caseyquinn | 15:3d1322f05b8e | 45 | char filename[] = ""; |
caseyquinn | 7:a24d7156bc02 | 46 | |
caseyquinn | 7:a24d7156bc02 | 47 | TwoWire Wire = TwoWire(NRF_TWI0); |
caseyquinn | 7:a24d7156bc02 | 48 | SDFileSystem sd(SPIS_PSELMOSI, SPIS_PSELMISO, SPIS_PSELSCK, SPIS_PSELSS, "sd"); // I believe this matches Todd's pinout, let me know if this doesn't work. (p12, p13, p15, p14) |
caseyquinn | 7:a24d7156bc02 | 49 | |
caseyquinn | 7:a24d7156bc02 | 50 | uint8_t Seconds = 0;//Seconds |
caseyquinn | 7:a24d7156bc02 | 51 | uint8_t Minutes = 0;//Minutes |
caseyquinn | 7:a24d7156bc02 | 52 | uint8_t Hour = 0;//Hour |
caseyquinn | 7:a24d7156bc02 | 53 | uint8_t Date = 0;//Date |
caseyquinn | 7:a24d7156bc02 | 54 | uint8_t Month = 0;//Month |
caseyquinn | 7:a24d7156bc02 | 55 | uint8_t Year = 0;//Year |
caseyquinn | 11:2297d364af61 | 56 | double secondsD = 0; |
caseyquinn | 7:a24d7156bc02 | 57 | |
caseyquinn | 7:a24d7156bc02 | 58 | void get_time() |
caseyquinn | 7:a24d7156bc02 | 59 | { |
caseyquinn | 7:a24d7156bc02 | 60 | Wire.beginTransmission(Crono); // address DS3231 |
caseyquinn | 7:a24d7156bc02 | 61 | Wire.write(0x0E); // select register |
caseyquinn | 7:a24d7156bc02 | 62 | Wire.write(0x1C); // write register bitmap, bit 7 is /EOSC |
caseyquinn | 7:a24d7156bc02 | 63 | Wire.endTransmission(); |
caseyquinn | 7:a24d7156bc02 | 64 | wait(0.05); |
caseyquinn | 7:a24d7156bc02 | 65 | Wire.beginTransmission(Crono); |
caseyquinn | 7:a24d7156bc02 | 66 | Wire.write(0x00); |
caseyquinn | 7:a24d7156bc02 | 67 | Wire.endTransmission(); |
caseyquinn | 7:a24d7156bc02 | 68 | Wire.requestFrom(Crono+1, 7); |
caseyquinn | 2:e596e685eb39 | 69 | |
caseyquinn | 7:a24d7156bc02 | 70 | while( Wire.available() > 0 ) |
caseyquinn | 7:a24d7156bc02 | 71 | { |
caseyquinn | 7:a24d7156bc02 | 72 | Seconds = Wire.read(); |
caseyquinn | 7:a24d7156bc02 | 73 | Minutes = Wire.read(); |
caseyquinn | 7:a24d7156bc02 | 74 | Hour = Wire.read(); |
caseyquinn | 7:a24d7156bc02 | 75 | uint8_t day =Wire.read(); // we don't uses this, it's just day of the week |
caseyquinn | 7:a24d7156bc02 | 76 | Date = Wire.read(); |
caseyquinn | 7:a24d7156bc02 | 77 | Month = Wire.read(); |
caseyquinn | 7:a24d7156bc02 | 78 | Year = Wire.read(); |
caseyquinn | 7:a24d7156bc02 | 79 | //pc.printf("%f", sec); pc.printf("\n");//this is still in bit form |
caseyquinn | 7:a24d7156bc02 | 80 | //pc.printf("%f", min); pc.printf("\n"); |
caseyquinn | 7:a24d7156bc02 | 81 | //pc.printf("%f", hr); pc.printf("\n"); |
caseyquinn | 7:a24d7156bc02 | 82 | } |
caseyquinn | 7:a24d7156bc02 | 83 | Year = ((Year&0xF0)>>4)*10 + (Year&0x0F); //Year |
caseyquinn | 7:a24d7156bc02 | 84 | Month = ((Month&0x10)>>4)*10 + (Month&0x0F); //Month |
caseyquinn | 7:a24d7156bc02 | 85 | Date = ((Date&0x30)>>4)*10 + (Date&0x0F); //Date |
caseyquinn | 9:2057c3779b6a | 86 | Hour = ((Hour&0x30)>>4)*10 + (Hour&0x0F); //Hour |
caseyquinn | 7:a24d7156bc02 | 87 | Minutes = ((Minutes&0x70)>>4)*10 + (Minutes&0x0F); //Minutes |
caseyquinn | 7:a24d7156bc02 | 88 | Seconds = ((Seconds&0x70)>>4)*10 + (Seconds&0x0F); //Seconds |
caseyquinn | 7:a24d7156bc02 | 89 | } |
caseyquinn | 2:e596e685eb39 | 90 | |
caseyquinn | 0:14d46ef4b6cb | 91 | int main() |
caseyquinn | 0:14d46ef4b6cb | 92 | { |
caseyquinn | 2:e596e685eb39 | 93 | |
caseyquinn | 7:a24d7156bc02 | 94 | //t.start(); |
caseyquinn | 2:e596e685eb39 | 95 | // create a new file |
caseyquinn | 8:204c21adf693 | 96 | |
caseyquinn | 8:204c21adf693 | 97 | DigPot.writeRegister(digital_pot_setpoint); |
caseyquinn | 8:204c21adf693 | 98 | Wire.begin(SCL, SDA, TWI_FREQUENCY_100K);// |
caseyquinn | 7:a24d7156bc02 | 99 | wait(1); |
caseyquinn | 8:204c21adf693 | 100 | blower = 1; |
caseyquinn | 8:204c21adf693 | 101 | wait (1); |
caseyquinn | 15:3d1322f05b8e | 102 | |
caseyquinn | 15:3d1322f05b8e | 103 | get_time(); |
caseyquinn | 15:3d1322f05b8e | 104 | sprintf(filename, "/sd/temp%02d%02d%02d%02d%02d%02d.txt", Year,Month,Date,Hour,Minutes,Seconds); |
caseyquinn | 2:e596e685eb39 | 105 | FILE *fp = fopen(filename, "w"); |
caseyquinn | 2:e596e685eb39 | 106 | fclose(fp); |
caseyquinn | 15:3d1322f05b8e | 107 | |
caseyquinn | 15:3d1322f05b8e | 108 | fp = fopen(filename, "a"); |
caseyquinn | 15:3d1322f05b8e | 109 | fprintf(fp, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%2.2f,%04.2f,%2.2f,%.0f,%.0f,%.0f,%.0f,%.0f,%.0f,%d,%d,%d\r\n", Year,Month,Date,Hour,Minutes,Seconds,omronReading,vInReading, vBlowerReading, omronDiff, gasG.getAmps(), gasG.getVolts(), gasG.getCharge(), bmesensor.getTemperature(), bmesensor.getPressure(),bmesensor.getHumidity(),accel_x, accel_y, accel_z, mag_x, mag_y, mag_z, lightsensor.getUV(), lightsensor.getVIS(), lightsensor.getIR()); |
caseyquinn | 15:3d1322f05b8e | 110 | fclose(fp); |
caseyquinn | 15:3d1322f05b8e | 111 | |
caseyquinn | 15:3d1322f05b8e | 112 | |
caseyquinn | 2:e596e685eb39 | 113 | |
caseyquinn | 1:37babeb68ab9 | 114 | |
caseyquinn | 0:14d46ef4b6cb | 115 | while(1){ |
caseyquinn | 7:a24d7156bc02 | 116 | |
caseyquinn | 8:204c21adf693 | 117 | get_time(); |
caseyquinn | 10:f9cb61b29340 | 118 | |
caseyquinn | 11:2297d364af61 | 119 | secondsD = Seconds; |
caseyquinn | 11:2297d364af61 | 120 | |
caseyquinn | 11:2297d364af61 | 121 | if(fmod(secondsD,10)==0){ |
caseyquinn | 15:3d1322f05b8e | 122 | pc.printf("hi"); |
caseyquinn | 10:f9cb61b29340 | 123 | movementsensor.getACCEL(); |
caseyquinn | 10:f9cb61b29340 | 124 | movementsensor.getCOMPASS(); |
caseyquinn | 10:f9cb61b29340 | 125 | accel_x = movementsensor.AccelData.x; |
caseyquinn | 10:f9cb61b29340 | 126 | accel_y = movementsensor.AccelData.y; |
caseyquinn | 10:f9cb61b29340 | 127 | accel_z = movementsensor.AccelData.z; |
caseyquinn | 10:f9cb61b29340 | 128 | mag_x = movementsensor.MagData.x; |
caseyquinn | 10:f9cb61b29340 | 129 | mag_y = movementsensor.MagData.y; |
caseyquinn | 10:f9cb61b29340 | 130 | mag_z = movementsensor.MagData.z; |
caseyquinn | 6:2328feb48792 | 131 | omronReading = ads.readADC_SingleEnded(0, 0xC583); // read channel 0 PGA = 2 : Full Scale Range = 2.048V |
caseyquinn | 6:2328feb48792 | 132 | //omronReading = ads.readADC_SingleEnded(0, 0xC183); // read channel 0 PGA = 1 : Full Scale Range = 4.096V |
caseyquinn | 0:14d46ef4b6cb | 133 | vInReading = ads.readADC_SingleEnded(1, 0xD583); // read channel 0 |
caseyquinn | 0:14d46ef4b6cb | 134 | vBlowerReading = ads.readADC_SingleEnded(2, 0xE783); // read channel 0 |
caseyquinn | 0:14d46ef4b6cb | 135 | omronDiff = ads.readADC_Differential(0x8583); // differential channel 2-3 |
caseyquinn | 7:a24d7156bc02 | 136 | //battAmps = gasG.getAmps(); |
caseyquinn | 7:a24d7156bc02 | 137 | //battVolts = gasG.getVolts(); |
caseyquinn | 7:a24d7156bc02 | 138 | //battGG = gasG.getCharge(); |
caseyquinn | 7:a24d7156bc02 | 139 | //pc.printf("%d Amps, %d Volts, %d GG\n", gasG.getAmps(), gasG.getVolts(), gasG.getCharge()); |
caseyquinn | 2:e596e685eb39 | 140 | //Mount the filesystem |
caseyquinn | 2:e596e685eb39 | 141 | sd.mount(); |
caseyquinn | 3:2d059d88582b | 142 | FILE *fp = fopen(filename, "a"); |
caseyquinn | 14:ad550174db8b | 143 | fprintf(fp, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%2.2f,%04.2f,%2.2f,%.0f,%.0f,%.0f,%.0f,%.0f,%.0f,%d,%d,%d\r\n", Year,Month,Date,Hour,Minutes,Seconds,omronReading,vInReading, vBlowerReading, omronDiff, gasG.getAmps(), gasG.getVolts(), gasG.getCharge(), bmesensor.getTemperature(), bmesensor.getPressure(),bmesensor.getHumidity(),accel_x, accel_y, accel_z, mag_x, mag_y, mag_z, lightsensor.getUV(), lightsensor.getVIS(), lightsensor.getIR()); |
caseyquinn | 15:3d1322f05b8e | 144 | //fprintf(fp, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%2.2f,%04.2f,%2.2f,%.0f,%.0f,%.0f,%.0f,%.0f,%.0f,%d,%d,%d\r\n", Year,Month,Date,Hour,Minutes,Seconds,omronReading,vInReading, vBlowerReading, omronDiff, bmesensor.getTemperature(), bmesensor.getPressure(),bmesensor.getHumidity(),accel_x, accel_y, accel_z, mag_x, mag_y, mag_z, lightsensor.getUV(), lightsensor.getVIS(), lightsensor.getIR()); |
caseyquinn | 15:3d1322f05b8e | 145 | |
caseyquinn | 2:e596e685eb39 | 146 | fclose(fp); |
caseyquinn | 2:e596e685eb39 | 147 | //Unmount the filesystem |
caseyquinn | 2:e596e685eb39 | 148 | sd.unmount(); |
caseyquinn | 11:2297d364af61 | 149 | DigPot.writeRegister(digital_pot_setpoint); |
caseyquinn | 2:e596e685eb39 | 150 | |
caseyquinn | 11:2297d364af61 | 151 | wait(1); |
caseyquinn | 15:3d1322f05b8e | 152 | |
caseyquinn | 15:3d1322f05b8e | 153 | |
caseyquinn | 2:e596e685eb39 | 154 | |
caseyquinn | 11:2297d364af61 | 155 | } |
caseyquinn | 2:e596e685eb39 | 156 | |
caseyquinn | 2:e596e685eb39 | 157 | |
caseyquinn | 0:14d46ef4b6cb | 158 | } |
caseyquinn | 0:14d46ef4b6cb | 159 | } |
caseyquinn | 0:14d46ef4b6cb | 160 | |
caseyquinn | 0:14d46ef4b6cb | 161 | |
caseyquinn | 0:14d46ef4b6cb | 162 |