Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
BMP280.hpp@9:256989faeb3b, 2020-04-10 (annotated)
- Committer:
- kabukistarship
- Date:
- Fri Apr 10 11:56:58 2020 +0000
- Revision:
- 9:256989faeb3b
Change.GHVentilator.Firmware.Switch to Arduino and mbed compatible format. #74
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kabukistarship | 9:256989faeb3b | 1 | /** Kabuki Tek Toolkit @version 0.x |
kabukistarship | 9:256989faeb3b | 2 | @link https://github.com/KabukiStarship/KabukiToolkitTek.git |
kabukistarship | 9:256989faeb3b | 3 | @file /BMP280.hpp |
kabukistarship | 9:256989faeb3b | 4 | @author Cale McCollough <https://cale-mccollough.github.io> |
kabukistarship | 9:256989faeb3b | 5 | @license Copyright 2020 (C) Kabuki Starship <kabukistarship.com>. |
kabukistarship | 9:256989faeb3b | 6 | This Source Code Form is subject to the terms of the Mozilla Public License, |
kabukistarship | 9:256989faeb3b | 7 | v. 2.0. If a copy of the MPL was not distributed with this file, you can obtain |
kabukistarship | 9:256989faeb3b | 8 | one at <https://mozilla.org/MPL/2.0/>. */ |
kabukistarship | 9:256989faeb3b | 9 | #include "BMP280.h" |
kabukistarship | 9:256989faeb3b | 10 | |
kabukistarship | 9:256989faeb3b | 11 | BMP280::BMP280(I2C &Bus, char BusAddress) : |
kabukistarship | 9:256989faeb3b | 12 | Bus(Bus), |
kabukistarship | 9:256989faeb3b | 13 | BusAddress(BusAddress<<1), |
kabukistarship | 9:256989faeb3b | 14 | t_fine(0) |
kabukistarship | 9:256989faeb3b | 15 | { |
kabukistarship | 9:256989faeb3b | 16 | Initialize(); |
kabukistarship | 9:256989faeb3b | 17 | } |
kabukistarship | 9:256989faeb3b | 18 | |
kabukistarship | 9:256989faeb3b | 19 | void BMP280::Initialize() |
kabukistarship | 9:256989faeb3b | 20 | { |
kabukistarship | 9:256989faeb3b | 21 | char cmd[18]; |
kabukistarship | 9:256989faeb3b | 22 | |
kabukistarship | 9:256989faeb3b | 23 | //cmd[0] = 0xf2; // ctrl_hum |
kabukistarship | 9:256989faeb3b | 24 | //cmd[1] = 0x01; // Humidity oversampling x1 |
kabukistarship | 9:256989faeb3b | 25 | //Bus.write(BusAddress, cmd, 2); |
kabukistarship | 9:256989faeb3b | 26 | |
kabukistarship | 9:256989faeb3b | 27 | cmd[0] = 0xf4; // ctrl_meas |
kabukistarship | 9:256989faeb3b | 28 | //cmd[1] = 0x27; // Temparature oversampling x1, Pressure oversampling x1, Normal mode |
kabukistarship | 9:256989faeb3b | 29 | cmd[1] = 0b01010111; // Temparature oversampling x2 010, Pressure oversampling x16 101, Normal mode 11 |
kabukistarship | 9:256989faeb3b | 30 | Bus.write(BusAddress, cmd, 2); |
kabukistarship | 9:256989faeb3b | 31 | |
kabukistarship | 9:256989faeb3b | 32 | cmd[0] = 0xf5; // config |
kabukistarship | 9:256989faeb3b | 33 | cmd[1] = 0b10111100; // Standby 1000ms, Filter x16 |
kabukistarship | 9:256989faeb3b | 34 | Bus.write(BusAddress, cmd, 2); |
kabukistarship | 9:256989faeb3b | 35 | |
kabukistarship | 9:256989faeb3b | 36 | cmd[0] = 0x88; // read dig_T regs |
kabukistarship | 9:256989faeb3b | 37 | Bus.write(BusAddress, cmd, 1); |
kabukistarship | 9:256989faeb3b | 38 | Bus.read(BusAddress, cmd, 6); |
kabukistarship | 9:256989faeb3b | 39 | |
kabukistarship | 9:256989faeb3b | 40 | dig_T1 = (cmd[1] << 8) | cmd[0]; |
kabukistarship | 9:256989faeb3b | 41 | dig_T2 = (cmd[3] << 8) | cmd[2]; |
kabukistarship | 9:256989faeb3b | 42 | dig_T3 = (cmd[5] << 8) | cmd[4]; |
kabukistarship | 9:256989faeb3b | 43 | |
kabukistarship | 9:256989faeb3b | 44 | //DPrintf("dig_T = 0x%x, 0x%x, 0x%x\n\r", dig_T1, dig_T2, dig_T3); |
kabukistarship | 9:256989faeb3b | 45 | //DPrintf("dig_T = %d, %d, %d\n\r", dig_T1, dig_T2, dig_T3); |
kabukistarship | 9:256989faeb3b | 46 | |
kabukistarship | 9:256989faeb3b | 47 | cmd[0] = 0x8E; // read dig_P regs |
kabukistarship | 9:256989faeb3b | 48 | Bus.write(BusAddress, cmd, 1); |
kabukistarship | 9:256989faeb3b | 49 | Bus.read(BusAddress, cmd, 18); |
kabukistarship | 9:256989faeb3b | 50 | |
kabukistarship | 9:256989faeb3b | 51 | dig_P1 = (cmd[ 1] << 8) | cmd[ 0]; |
kabukistarship | 9:256989faeb3b | 52 | dig_P2 = (cmd[ 3] << 8) | cmd[ 2]; |
kabukistarship | 9:256989faeb3b | 53 | dig_P3 = (cmd[ 5] << 8) | cmd[ 4]; |
kabukistarship | 9:256989faeb3b | 54 | dig_P4 = (cmd[ 7] << 8) | cmd[ 6]; |
kabukistarship | 9:256989faeb3b | 55 | dig_P5 = (cmd[ 9] << 8) | cmd[ 8]; |
kabukistarship | 9:256989faeb3b | 56 | dig_P6 = (cmd[11] << 8) | cmd[10]; |
kabukistarship | 9:256989faeb3b | 57 | dig_P7 = (cmd[13] << 8) | cmd[12]; |
kabukistarship | 9:256989faeb3b | 58 | dig_P8 = (cmd[15] << 8) | cmd[14]; |
kabukistarship | 9:256989faeb3b | 59 | dig_P9 = (cmd[17] << 8) | cmd[16]; |
kabukistarship | 9:256989faeb3b | 60 | |
kabukistarship | 9:256989faeb3b | 61 | //DPrintf("dig_P = 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x\n", |
kabukistarship | 9:256989faeb3b | 62 | // dig_P1, dig_P2, dig_P3, dig_P4, dig_P5, dig_P6, dig_P7, dig_P8, |
kabukistarship | 9:256989faeb3b | 63 | // dig_P9); |
kabukistarship | 9:256989faeb3b | 64 | |
kabukistarship | 9:256989faeb3b | 65 | /* cmd[0] = 0xA1; // read dig_H regs |
kabukistarship | 9:256989faeb3b | 66 | Bus.write(BusAddress, cmd, 1); |
kabukistarship | 9:256989faeb3b | 67 | Bus.read(BusAddress, cmd, 1); |
kabukistarship | 9:256989faeb3b | 68 | cmd[1] = 0xE1; // read dig_H regs |
kabukistarship | 9:256989faeb3b | 69 | Bus.write(BusAddress, &cmd[1], 1); |
kabukistarship | 9:256989faeb3b | 70 | Bus.read(BusAddress, &cmd[1], 7); |
kabukistarship | 9:256989faeb3b | 71 | |
kabukistarship | 9:256989faeb3b | 72 | dig_H1 = cmd[0]; |
kabukistarship | 9:256989faeb3b | 73 | dig_H2 = (cmd[2] << 8) | cmd[1]; |
kabukistarship | 9:256989faeb3b | 74 | dig_H3 = cmd[3]; |
kabukistarship | 9:256989faeb3b | 75 | dig_H4 = (cmd[4] << 4) | (cmd[5] & 0x0f); |
kabukistarship | 9:256989faeb3b | 76 | dig_H5 = (cmd[6] << 4) | ((cmd[5]>>4) & 0x0f); |
kabukistarship | 9:256989faeb3b | 77 | dig_H6 = cmd[7]; |
kabukistarship | 9:256989faeb3b | 78 | |
kabukistarship | 9:256989faeb3b | 79 | DPrintf("dig_H = 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x\n", dig_H1, dig_H2, |
kabukistarship | 9:256989faeb3b | 80 | dig_H3, dig_H4, dig_H5, dig_H6); |
kabukistarship | 9:256989faeb3b | 81 | */ |
kabukistarship | 9:256989faeb3b | 82 | } |
kabukistarship | 9:256989faeb3b | 83 | |
kabukistarship | 9:256989faeb3b | 84 | int32_t BMP280::Temperature() { |
kabukistarship | 9:256989faeb3b | 85 | int32_t temp_raw; |
kabukistarship | 9:256989faeb3b | 86 | char cmd[4]; |
kabukistarship | 9:256989faeb3b | 87 | |
kabukistarship | 9:256989faeb3b | 88 | cmd[0] = 0xfa; // temp_msb |
kabukistarship | 9:256989faeb3b | 89 | Bus.write(BusAddress, cmd, 1); |
kabukistarship | 9:256989faeb3b | 90 | Bus.read(BusAddress, &cmd[1], 3); |
kabukistarship | 9:256989faeb3b | 91 | |
kabukistarship | 9:256989faeb3b | 92 | temp_raw = (cmd[1] << 12) | (cmd[2] << 4) | (cmd[3] >> 4); |
kabukistarship | 9:256989faeb3b | 93 | //DPrintf("\r\ntemp_raw:%d",temp_raw); |
kabukistarship | 9:256989faeb3b | 94 | |
kabukistarship | 9:256989faeb3b | 95 | int32_t temp1, temp2,temp; |
kabukistarship | 9:256989faeb3b | 96 | |
kabukistarship | 9:256989faeb3b | 97 | temp1 =((((temp_raw >> 3) - (dig_T1 << 1))) * dig_T2) >> 11; |
kabukistarship | 9:256989faeb3b | 98 | temp2 =(((((temp_raw >> 4) - dig_T1) * ((temp_raw >> 4) - dig_T1)) >> 12) * dig_T3) >> 14; |
kabukistarship | 9:256989faeb3b | 99 | //DPrintf(" temp1:%d temp2:%d",temp1, temp2); |
kabukistarship | 9:256989faeb3b | 100 | t_fine = temp1+temp2; |
kabukistarship | 9:256989faeb3b | 101 | //DPrintf(" t_fine:%d",t_fine); |
kabukistarship | 9:256989faeb3b | 102 | temp = (t_fine * 5 + 128) >> 8; |
kabukistarship | 9:256989faeb3b | 103 | //DPrintf(" tempf:%f", float(temp) / 100.0); |
kabukistarship | 9:256989faeb3b | 104 | return temp; |
kabukistarship | 9:256989faeb3b | 105 | } |
kabukistarship | 9:256989faeb3b | 106 | |
kabukistarship | 9:256989faeb3b | 107 | uint32_t BMP280::Pressure() { |
kabukistarship | 9:256989faeb3b | 108 | char cmd[4]; |
kabukistarship | 9:256989faeb3b | 109 | |
kabukistarship | 9:256989faeb3b | 110 | cmd[0] = 0xf7; // press_msb |
kabukistarship | 9:256989faeb3b | 111 | Bus.write(BusAddress, cmd, 1); |
kabukistarship | 9:256989faeb3b | 112 | Bus.read(BusAddress, &cmd[1], 3); |
kabukistarship | 9:256989faeb3b | 113 | |
kabukistarship | 9:256989faeb3b | 114 | int32_t Response = (cmd[1] << 12) | (cmd[2] << 4) | (cmd[3] >> 4); |
kabukistarship | 9:256989faeb3b | 115 | |
kabukistarship | 9:256989faeb3b | 116 | int32_t var1, var2; |
kabukistarship | 9:256989faeb3b | 117 | uint32_t press; |
kabukistarship | 9:256989faeb3b | 118 | |
kabukistarship | 9:256989faeb3b | 119 | var1 = (t_fine >> 1) - 64000; |
kabukistarship | 9:256989faeb3b | 120 | var2 = (((var1 >> 2) * (var1 >> 2)) >> 11) * dig_P6; |
kabukistarship | 9:256989faeb3b | 121 | var2 = var2 + ((var1 * dig_P5) << 1); |
kabukistarship | 9:256989faeb3b | 122 | var2 = (var2 >> 2) + (dig_P4 << 16); |
kabukistarship | 9:256989faeb3b | 123 | var1 = (((dig_P3 * (((var1 >> 2)*(var1 >> 2)) >> 13)) >> 3) + ((dig_P2 * var1) >> 1)) >> 18; |
kabukistarship | 9:256989faeb3b | 124 | var1 = ((32768 + var1) * dig_P1) >> 15; |
kabukistarship | 9:256989faeb3b | 125 | if (var1 == 0) { |
kabukistarship | 9:256989faeb3b | 126 | return 0; |
kabukistarship | 9:256989faeb3b | 127 | } |
kabukistarship | 9:256989faeb3b | 128 | press = (((1048576 - Response) - (var2 >> 12))) * 3125; |
kabukistarship | 9:256989faeb3b | 129 | if(press < 0x80000000) { |
kabukistarship | 9:256989faeb3b | 130 | press = (press << 1) / var1; |
kabukistarship | 9:256989faeb3b | 131 | } else { |
kabukistarship | 9:256989faeb3b | 132 | press = (press / var1) * 2; |
kabukistarship | 9:256989faeb3b | 133 | } |
kabukistarship | 9:256989faeb3b | 134 | var1 = ((int32_t)dig_P9 * ((int32_t)(((press >> 3) * (press >> 3)) >> 13))) >> 12; |
kabukistarship | 9:256989faeb3b | 135 | var2 = (((int32_t)(press >> 2)) * (int32_t)dig_P8) >> 13; |
kabukistarship | 9:256989faeb3b | 136 | return (press + ((var1 + var2 + dig_P7) >> 4)); |
kabukistarship | 9:256989faeb3b | 137 | } |