Kabuki Starship / Mbed 2 deprecated GHVentilator

Dependencies:   mbed SickBayTek

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?

UserRevisionLine numberNew 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 }