hisyam fs / cmps12_woy

Dependents:   cmps12lib

Committer:
calmantara186
Date:
Sat Jul 21 14:22:08 2018 +0000
Revision:
0:595938ba3741
Child:
1:a129c630cee0
c

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
calmantara186 0:595938ba3741 21 char CMPS_KRAI::readSoftwareRevision(void){
calmantara186 0:595938ba3741 22 char registerNumber = SOFTWARE_REVISION_REG;
calmantara186 0:595938ba3741 23 char registerContents = 0;
calmantara186 0:595938ba3741 24
calmantara186 0:595938ba3741 25 //First, send the number of register we wish to read,
calmantara186 0:595938ba3741 26 //in this case, command register, number 0.
calmantara186 0:595938ba3741 27 i2c->write(i2cAddress, &registerNumber, 1);
calmantara186 0:595938ba3741 28
calmantara186 0:595938ba3741 29 //Now, read one byte, which will be the contents of the command register.
calmantara186 0:595938ba3741 30 i2c->read(i2cAddress, &registerContents, 1);
calmantara186 0:595938ba3741 31
calmantara186 0:595938ba3741 32 return registerContents;
calmantara186 0:595938ba3741 33 }
calmantara186 0:595938ba3741 34
calmantara186 0:595938ba3741 35 int CMPS_KRAI::readBearing(void){
calmantara186 0:595938ba3741 36 char registerNumber = COMPASS_BEARING_WORD_REG;
calmantara186 0:595938ba3741 37 char registerContents[2] = {0x00, 0x00};
calmantara186 0:595938ba3741 38
calmantara186 0:595938ba3741 39 //Mengirim register untuk address pertama dari i2c
calmantara186 0:595938ba3741 40 i2c->write(i2cAddress, &registerNumber, 1);
calmantara186 0:595938ba3741 41
calmantara186 0:595938ba3741 42 //Mengambil data dari 2 address I2c
calmantara186 0:595938ba3741 43 i2c->read(i2cAddress, registerContents, 2);
calmantara186 0:595938ba3741 44
calmantara186 0:595938ba3741 45 //Register 0 adalah 8 bit, harus di shift
calmantara186 0:595938ba3741 46 //Register 1 adalah 16 bit, bisa langsung dibaca
calmantara186 0:595938ba3741 47 int bearing = ((int)registerContents[0] << 8) | ((int)registerContents[1]);
calmantara186 0:595938ba3741 48
calmantara186 0:595938ba3741 49 return bearing;
calmantara186 0:595938ba3741 50 }
calmantara186 0:595938ba3741 51 void CMPS_KRAI::calibrate(void){
calmantara186 0:595938ba3741 52 char registerNumber = SOFTWARE_REVISION_REG;
calmantara186 0:595938ba3741 53 char calibrate_data1 = 0xF0;
calmantara186 0:595938ba3741 54 char calibrate_data2 = 0xF5;
calmantara186 0:595938ba3741 55 char calibrate_data3 = 0xF7;
calmantara186 0:595938ba3741 56 //kirim data 1
calmantara186 0:595938ba3741 57 Thread::wait(25);
calmantara186 0:595938ba3741 58 i2c->write(i2cAddress, &registerNumber, 1);
calmantara186 0:595938ba3741 59 i2c->write(i2cAddress, &calibrate_data1, 1);
calmantara186 0:595938ba3741 60 //kirim data 2 delay 25ms
calmantara186 0:595938ba3741 61 Thread::wait(25);
calmantara186 0:595938ba3741 62 i2c->write(i2cAddress, &registerNumber, 1);
calmantara186 0:595938ba3741 63 i2c->write(i2cAddress, &calibrate_data2, 1);
calmantara186 0:595938ba3741 64 //kirim data 3 delay 25ms
calmantara186 0:595938ba3741 65 Thread::wait(25);
calmantara186 0:595938ba3741 66 i2c->write(i2cAddress, &registerNumber, 1);
calmantara186 0:595938ba3741 67 i2c->write(i2cAddress, &calibrate_data3, 1);
calmantara186 0:595938ba3741 68 }
calmantara186 0:595938ba3741 69
calmantara186 0:595938ba3741 70 void CMPS_KRAI::stopCalibrate(void){
calmantara186 0:595938ba3741 71 char registerNumber = SOFTWARE_REVISION_REG;
calmantara186 0:595938ba3741 72 char calibrate_data1 = 0xF8;
calmantara186 0:595938ba3741 73 //kirim data 1
calmantara186 0:595938ba3741 74 i2c->write(i2cAddress, &registerNumber, 1);
calmantara186 0:595938ba3741 75 i2c->write(i2cAddress, &calibrate_data1, 1);
calmantara186 0:595938ba3741 76 }