Wireless auto note device

Dependencies:   BLE_API invisdrum X_NUCLEO_IDB0XA1 kalman mbed

Committer:
fxanhkhoa
Date:
Tue Nov 22 02:57:33 2016 +0000
Revision:
0:ffd0caf3db9f
WAND PROJECT

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fxanhkhoa 0:ffd0caf3db9f 1 /**
fxanhkhoa 0:ffd0caf3db9f 2 * @author Jose R. Padron
fxanhkhoa 0:ffd0caf3db9f 3 * @author Used HMC6352 library developed by Aaron Berk as template
fxanhkhoa 0:ffd0caf3db9f 4 * @section LICENSE
fxanhkhoa 0:ffd0caf3db9f 5 *
fxanhkhoa 0:ffd0caf3db9f 6 * Copyright (c) 2010 ARM Limited
fxanhkhoa 0:ffd0caf3db9f 7 *
fxanhkhoa 0:ffd0caf3db9f 8 * Permission is hereby granted, free of charge, to any person obtaining a copy
fxanhkhoa 0:ffd0caf3db9f 9 * of this software and associated documentation files (the "Software"), to deal
fxanhkhoa 0:ffd0caf3db9f 10 * in the Software without restriction, including without limitation the rights
fxanhkhoa 0:ffd0caf3db9f 11 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
fxanhkhoa 0:ffd0caf3db9f 12 * copies of the Software, and to permit persons to whom the Software is
fxanhkhoa 0:ffd0caf3db9f 13 * furnished to do so, subject to the following conditions:
fxanhkhoa 0:ffd0caf3db9f 14 *
fxanhkhoa 0:ffd0caf3db9f 15 * The above copyright notice and this permission notice shall be included in
fxanhkhoa 0:ffd0caf3db9f 16 * all copies or substantial portions of the Software.
fxanhkhoa 0:ffd0caf3db9f 17 *
fxanhkhoa 0:ffd0caf3db9f 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
fxanhkhoa 0:ffd0caf3db9f 19 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
fxanhkhoa 0:ffd0caf3db9f 20 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
fxanhkhoa 0:ffd0caf3db9f 21 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
fxanhkhoa 0:ffd0caf3db9f 22 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
fxanhkhoa 0:ffd0caf3db9f 23 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
fxanhkhoa 0:ffd0caf3db9f 24 * THE SOFTWARE.
fxanhkhoa 0:ffd0caf3db9f 25 *
fxanhkhoa 0:ffd0caf3db9f 26 * @section DESCRIPTION
fxanhkhoa 0:ffd0caf3db9f 27 *
fxanhkhoa 0:ffd0caf3db9f 28 * Honeywell HMC5883Ldigital compass.
fxanhkhoa 0:ffd0caf3db9f 29 *
fxanhkhoa 0:ffd0caf3db9f 30 * Datasheet:
fxanhkhoa 0:ffd0caf3db9f 31 *
fxanhkhoa 0:ffd0caf3db9f 32 * http://www.ssec.honeywell.com/magnetic/datasheets/HMC5883L.pdf
fxanhkhoa 0:ffd0caf3db9f 33 */
fxanhkhoa 0:ffd0caf3db9f 34
fxanhkhoa 0:ffd0caf3db9f 35 /**
fxanhkhoa 0:ffd0caf3db9f 36 * Includes
fxanhkhoa 0:ffd0caf3db9f 37 */
fxanhkhoa 0:ffd0caf3db9f 38 #include "HMC5883L.h"
fxanhkhoa 0:ffd0caf3db9f 39
fxanhkhoa 0:ffd0caf3db9f 40 HMC5883L::HMC5883L(PinName sda, PinName scl) {
fxanhkhoa 0:ffd0caf3db9f 41
fxanhkhoa 0:ffd0caf3db9f 42 i2c_ = new I2C(sda, scl);
fxanhkhoa 0:ffd0caf3db9f 43 //100KHz, as specified by the datasheet.
fxanhkhoa 0:ffd0caf3db9f 44 i2c_->frequency(100000);
fxanhkhoa 0:ffd0caf3db9f 45
fxanhkhoa 0:ffd0caf3db9f 46
fxanhkhoa 0:ffd0caf3db9f 47 }
fxanhkhoa 0:ffd0caf3db9f 48
fxanhkhoa 0:ffd0caf3db9f 49
fxanhkhoa 0:ffd0caf3db9f 50 void HMC5883L::write(int address, int data) {
fxanhkhoa 0:ffd0caf3db9f 51
fxanhkhoa 0:ffd0caf3db9f 52 char tx[2];
fxanhkhoa 0:ffd0caf3db9f 53
fxanhkhoa 0:ffd0caf3db9f 54 tx[0]=address;
fxanhkhoa 0:ffd0caf3db9f 55 tx[1]=data;
fxanhkhoa 0:ffd0caf3db9f 56
fxanhkhoa 0:ffd0caf3db9f 57 i2c_->write(HMC5883L_I2C_WRITE,tx,2);
fxanhkhoa 0:ffd0caf3db9f 58
fxanhkhoa 0:ffd0caf3db9f 59 wait_ms(100);
fxanhkhoa 0:ffd0caf3db9f 60
fxanhkhoa 0:ffd0caf3db9f 61 }
fxanhkhoa 0:ffd0caf3db9f 62
fxanhkhoa 0:ffd0caf3db9f 63
fxanhkhoa 0:ffd0caf3db9f 64 void HMC5883L::setSleepMode() {
fxanhkhoa 0:ffd0caf3db9f 65
fxanhkhoa 0:ffd0caf3db9f 66 write(HMC5883L_MODE, HMC5883L_SLEEP);
fxanhkhoa 0:ffd0caf3db9f 67 }
fxanhkhoa 0:ffd0caf3db9f 68
fxanhkhoa 0:ffd0caf3db9f 69 void HMC5883L::setDefault(void) {
fxanhkhoa 0:ffd0caf3db9f 70
fxanhkhoa 0:ffd0caf3db9f 71 write(HMC5883L_CONFIG_A,HMC5883L_10HZ_NORMAL);
fxanhkhoa 0:ffd0caf3db9f 72 write(HMC5883L_CONFIG_B,HMC5883L_1_0GA);
fxanhkhoa 0:ffd0caf3db9f 73 write(HMC5883L_MODE,HMC5883L_CONTINUOUS);
fxanhkhoa 0:ffd0caf3db9f 74 wait_ms(100);
fxanhkhoa 0:ffd0caf3db9f 75 }
fxanhkhoa 0:ffd0caf3db9f 76
fxanhkhoa 0:ffd0caf3db9f 77
fxanhkhoa 0:ffd0caf3db9f 78 void HMC5883L::getAddress(char *buffer) {
fxanhkhoa 0:ffd0caf3db9f 79
fxanhkhoa 0:ffd0caf3db9f 80 char rx[3];
fxanhkhoa 0:ffd0caf3db9f 81 char tx[1];
fxanhkhoa 0:ffd0caf3db9f 82 tx[0]=HMC5883L_IDENT_A;
fxanhkhoa 0:ffd0caf3db9f 83
fxanhkhoa 0:ffd0caf3db9f 84
fxanhkhoa 0:ffd0caf3db9f 85 i2c_->write(HMC5883L_I2C_WRITE, tx,1);
fxanhkhoa 0:ffd0caf3db9f 86
fxanhkhoa 0:ffd0caf3db9f 87 wait_ms(1);
fxanhkhoa 0:ffd0caf3db9f 88
fxanhkhoa 0:ffd0caf3db9f 89 i2c_->read(HMC5883L_I2C_READ,rx,3);
fxanhkhoa 0:ffd0caf3db9f 90
fxanhkhoa 0:ffd0caf3db9f 91 buffer[0]=rx[0];
fxanhkhoa 0:ffd0caf3db9f 92 buffer[1]=rx[1];
fxanhkhoa 0:ffd0caf3db9f 93 buffer[2]=rx[2];
fxanhkhoa 0:ffd0caf3db9f 94 }
fxanhkhoa 0:ffd0caf3db9f 95
fxanhkhoa 0:ffd0caf3db9f 96
fxanhkhoa 0:ffd0caf3db9f 97
fxanhkhoa 0:ffd0caf3db9f 98 void HMC5883L::setOpMode(int mode, int ConfigA, int ConfigB) {
fxanhkhoa 0:ffd0caf3db9f 99
fxanhkhoa 0:ffd0caf3db9f 100
fxanhkhoa 0:ffd0caf3db9f 101 write(HMC5883L_CONFIG_A,ConfigA);
fxanhkhoa 0:ffd0caf3db9f 102 write(HMC5883L_CONFIG_B,ConfigB);
fxanhkhoa 0:ffd0caf3db9f 103 write(HMC5883L_MODE,mode);
fxanhkhoa 0:ffd0caf3db9f 104
fxanhkhoa 0:ffd0caf3db9f 105
fxanhkhoa 0:ffd0caf3db9f 106 }
fxanhkhoa 0:ffd0caf3db9f 107
fxanhkhoa 0:ffd0caf3db9f 108
fxanhkhoa 0:ffd0caf3db9f 109
fxanhkhoa 0:ffd0caf3db9f 110
fxanhkhoa 0:ffd0caf3db9f 111 void HMC5883L::readData(int* getMag) {
fxanhkhoa 0:ffd0caf3db9f 112
fxanhkhoa 0:ffd0caf3db9f 113
fxanhkhoa 0:ffd0caf3db9f 114 char tx[1];
fxanhkhoa 0:ffd0caf3db9f 115 char rx[2];
fxanhkhoa 0:ffd0caf3db9f 116
fxanhkhoa 0:ffd0caf3db9f 117
fxanhkhoa 0:ffd0caf3db9f 118 tx[0]=HMC5883L_X_MSB;
fxanhkhoa 0:ffd0caf3db9f 119 i2c_->write(HMC5883L_I2C_READ,tx,1);
fxanhkhoa 0:ffd0caf3db9f 120 i2c_->read(HMC5883L_I2C_READ,rx,2);
fxanhkhoa 0:ffd0caf3db9f 121 getMag[0]= (int)rx[0]<<8|(int)rx[1];
fxanhkhoa 0:ffd0caf3db9f 122
fxanhkhoa 0:ffd0caf3db9f 123
fxanhkhoa 0:ffd0caf3db9f 124 tx[0]=HMC5883L_Y_MSB;
fxanhkhoa 0:ffd0caf3db9f 125 i2c_->write(HMC5883L_I2C_READ,tx,1);
fxanhkhoa 0:ffd0caf3db9f 126 i2c_->read(HMC5883L_I2C_READ,rx,2);
fxanhkhoa 0:ffd0caf3db9f 127 getMag[1]= (int)rx[0]<<8|(int)rx[1];
fxanhkhoa 0:ffd0caf3db9f 128
fxanhkhoa 0:ffd0caf3db9f 129 tx[0]=HMC5883L_Z_MSB;
fxanhkhoa 0:ffd0caf3db9f 130 i2c_->write(HMC5883L_I2C_READ,tx,1);
fxanhkhoa 0:ffd0caf3db9f 131 i2c_->read(HMC5883L_I2C_READ,rx,2);
fxanhkhoa 0:ffd0caf3db9f 132 getMag[2]= (int)rx[0]<<8|(int)rx[1];
fxanhkhoa 0:ffd0caf3db9f 133
fxanhkhoa 0:ffd0caf3db9f 134 }
fxanhkhoa 0:ffd0caf3db9f 135
fxanhkhoa 0:ffd0caf3db9f 136 int HMC5883L::getMx() {
fxanhkhoa 0:ffd0caf3db9f 137
fxanhkhoa 0:ffd0caf3db9f 138 char tx[1];
fxanhkhoa 0:ffd0caf3db9f 139 char rx[2];
fxanhkhoa 0:ffd0caf3db9f 140
fxanhkhoa 0:ffd0caf3db9f 141
fxanhkhoa 0:ffd0caf3db9f 142 tx[0]=HMC5883L_X_MSB;
fxanhkhoa 0:ffd0caf3db9f 143 i2c_->write(HMC5883L_I2C_READ,tx,1);
fxanhkhoa 0:ffd0caf3db9f 144 i2c_->read(HMC5883L_I2C_READ,rx,2);
fxanhkhoa 0:ffd0caf3db9f 145 return ((int)rx[0]<<8|(int)rx[1]);
fxanhkhoa 0:ffd0caf3db9f 146
fxanhkhoa 0:ffd0caf3db9f 147 }
fxanhkhoa 0:ffd0caf3db9f 148
fxanhkhoa 0:ffd0caf3db9f 149 int HMC5883L::getMy() {
fxanhkhoa 0:ffd0caf3db9f 150
fxanhkhoa 0:ffd0caf3db9f 151 char tx[1];
fxanhkhoa 0:ffd0caf3db9f 152 char rx[2];
fxanhkhoa 0:ffd0caf3db9f 153
fxanhkhoa 0:ffd0caf3db9f 154
fxanhkhoa 0:ffd0caf3db9f 155 tx[0]=HMC5883L_Y_MSB;
fxanhkhoa 0:ffd0caf3db9f 156 i2c_->write(HMC5883L_I2C_READ,tx,1);
fxanhkhoa 0:ffd0caf3db9f 157 i2c_->read(HMC5883L_I2C_READ,rx,2);
fxanhkhoa 0:ffd0caf3db9f 158 return ((int)rx[0]<<8|(int)rx[1]);
fxanhkhoa 0:ffd0caf3db9f 159
fxanhkhoa 0:ffd0caf3db9f 160 }
fxanhkhoa 0:ffd0caf3db9f 161
fxanhkhoa 0:ffd0caf3db9f 162
fxanhkhoa 0:ffd0caf3db9f 163 int HMC5883L::getMz(){
fxanhkhoa 0:ffd0caf3db9f 164
fxanhkhoa 0:ffd0caf3db9f 165 char tx[1];
fxanhkhoa 0:ffd0caf3db9f 166 char rx[2];
fxanhkhoa 0:ffd0caf3db9f 167
fxanhkhoa 0:ffd0caf3db9f 168
fxanhkhoa 0:ffd0caf3db9f 169 tx[0]=HMC5883L_Z_MSB;
fxanhkhoa 0:ffd0caf3db9f 170 i2c_->write(HMC5883L_I2C_READ,tx,1);
fxanhkhoa 0:ffd0caf3db9f 171 i2c_->read(HMC5883L_I2C_READ,rx,2);
fxanhkhoa 0:ffd0caf3db9f 172 return ((int)rx[0]<<8|(int)rx[1]);
fxanhkhoa 0:ffd0caf3db9f 173
fxanhkhoa 0:ffd0caf3db9f 174 }