hisyam fs / cmps12_woy

Dependents:   cmps12lib

Committer:
hisyamfs
Date:
Thu Mar 21 13:50:22 2019 +0000
Revision:
1:a129c630cee0
Parent:
0:595938ba3741
Child:
2:a45896ca96f0
tes

Who changed what in which revision?

UserRevisionLine numberNew contents of line
calmantara186 0:595938ba3741 1 /**
calmantara186 0:595938ba3741 2 * adopted from
calmantara186 0:595938ba3741 3 * CMPS03 by: Aarom Berk
calmantara186 0:595938ba3741 4 *
calmantara186 0:595938ba3741 5 * Bismillahirahmanirrahim
calmantara186 0:595938ba3741 6 */
calmantara186 0:595938ba3741 7
calmantara186 0:595938ba3741 8 /**
calmantara186 0:595938ba3741 9 * Includes
calmantara186 0:595938ba3741 10 */
calmantara186 0:595938ba3741 11 #include "CMPS_KRAI.h"
calmantara186 0:595938ba3741 12
calmantara186 0:595938ba3741 13 CMPS_KRAI::CMPS_KRAI(PinName sda, PinName scl, int address) {
calmantara186 0:595938ba3741 14 i2c = new I2C(sda, scl);
calmantara186 0:595938ba3741 15 //CMPS11 maksimum 100kHz CMPS12 maksimum 400kHz
calmantara186 0:595938ba3741 16 i2c->frequency(100000);
calmantara186 0:595938ba3741 17 i2cAddress = address;
calmantara186 0:595938ba3741 18 }
calmantara186 0:595938ba3741 19
calmantara186 0:595938ba3741 20 char CMPS_KRAI::readSoftwareRevision(void){
calmantara186 0:595938ba3741 21 char registerNumber = SOFTWARE_REVISION_REG;
calmantara186 0:595938ba3741 22 char registerContents = 0;
calmantara186 0:595938ba3741 23
calmantara186 0:595938ba3741 24 //First, send the number of register we wish to read,
calmantara186 0:595938ba3741 25 //in this case, command register, number 0.
calmantara186 0:595938ba3741 26 i2c->write(i2cAddress, &registerNumber, 1);
calmantara186 0:595938ba3741 27
calmantara186 0:595938ba3741 28 //Now, read one byte, which will be the contents of the command register.
calmantara186 0:595938ba3741 29 i2c->read(i2cAddress, &registerContents, 1);
calmantara186 0:595938ba3741 30
calmantara186 0:595938ba3741 31 return registerContents;
calmantara186 0:595938ba3741 32 }
calmantara186 0:595938ba3741 33
calmantara186 0:595938ba3741 34 int CMPS_KRAI::readBearing(void){
calmantara186 0:595938ba3741 35 char registerNumber = COMPASS_BEARING_WORD_REG;
calmantara186 0:595938ba3741 36 char registerContents[2] = {0x00, 0x00};
calmantara186 0:595938ba3741 37
calmantara186 0:595938ba3741 38 //Mengirim register untuk address pertama dari i2c
calmantara186 0:595938ba3741 39 i2c->write(i2cAddress, &registerNumber, 1);
calmantara186 0:595938ba3741 40
calmantara186 0:595938ba3741 41 //Mengambil data dari 2 address I2c
calmantara186 0:595938ba3741 42 i2c->read(i2cAddress, registerContents, 2);
calmantara186 0:595938ba3741 43
calmantara186 0:595938ba3741 44 //Register 0 adalah 8 bit, harus di shift
calmantara186 0:595938ba3741 45 //Register 1 adalah 16 bit, bisa langsung dibaca
calmantara186 0:595938ba3741 46 int bearing = ((int)registerContents[0] << 8) | ((int)registerContents[1]);
calmantara186 0:595938ba3741 47
calmantara186 0:595938ba3741 48 return bearing;
calmantara186 0:595938ba3741 49 }
calmantara186 0:595938ba3741 50 void CMPS_KRAI::calibrate(void){
calmantara186 0:595938ba3741 51 char registerNumber = SOFTWARE_REVISION_REG;
calmantara186 0:595938ba3741 52 char calibrate_data1 = 0xF0;
calmantara186 0:595938ba3741 53 char calibrate_data2 = 0xF5;
calmantara186 0:595938ba3741 54 char calibrate_data3 = 0xF7;
calmantara186 0:595938ba3741 55 //kirim data 1
hisyamfs 1:a129c630cee0 56 wait_ms(25);
calmantara186 0:595938ba3741 57 i2c->write(i2cAddress, &registerNumber, 1);
calmantara186 0:595938ba3741 58 i2c->write(i2cAddress, &calibrate_data1, 1);
calmantara186 0:595938ba3741 59 //kirim data 2 delay 25ms
hisyamfs 1:a129c630cee0 60 wait_ms(25);
calmantara186 0:595938ba3741 61 i2c->write(i2cAddress, &registerNumber, 1);
calmantara186 0:595938ba3741 62 i2c->write(i2cAddress, &calibrate_data2, 1);
calmantara186 0:595938ba3741 63 //kirim data 3 delay 25ms
hisyamfs 1:a129c630cee0 64 wait_ms(25);
calmantara186 0:595938ba3741 65 i2c->write(i2cAddress, &registerNumber, 1);
calmantara186 0:595938ba3741 66 i2c->write(i2cAddress, &calibrate_data3, 1);
calmantara186 0:595938ba3741 67 }
calmantara186 0:595938ba3741 68
calmantara186 0:595938ba3741 69 void CMPS_KRAI::stopCalibrate(void){
calmantara186 0:595938ba3741 70 char registerNumber = SOFTWARE_REVISION_REG;
calmantara186 0:595938ba3741 71 char calibrate_data1 = 0xF8;
calmantara186 0:595938ba3741 72 //kirim data 1
calmantara186 0:595938ba3741 73 i2c->write(i2cAddress, &registerNumber, 1);
calmantara186 0:595938ba3741 74 i2c->write(i2cAddress, &calibrate_data1, 1);
hisyamfs 1:a129c630cee0 75 }
hisyamfs 1:a129c630cee0 76
hisyamfs 1:a129c630cee0 77 void CMPS_KRAI::eraseProfile() {
hisyamfs 1:a129c630cee0 78
hisyamfs 1:a129c630cee0 79 }
hisyamfs 1:a129c630cee0 80
hisyamfs 1:a129c630cee0 81 void CMPS_KRAI::storeProfile() {
hisyamfs 1:a129c630cee0 82
calmantara186 0:595938ba3741 83 }