compass KRI 2018
Revision 0:595938ba3741, committed 2018-07-21
- Comitter:
- calmantara186
- Date:
- Sat Jul 21 14:22:08 2018 +0000
- Commit message:
- c
Changed in this revision
CMPS_KRAI.cpp | Show annotated file Show diff for this revision Revisions of this file |
CMPS_KRAI.h | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 595938ba3741 CMPS_KRAI.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CMPS_KRAI.cpp Sat Jul 21 14:22:08 2018 +0000 @@ -0,0 +1,76 @@ +/** + * adopted from + * CMPS03 by: Aarom Berk + * + * Bismillahirahmanirrahim + */ + +/** + * Includes + */ +#include "CMPS_KRAI.h" + +CMPS_KRAI::CMPS_KRAI(PinName sda, PinName scl, int address) { + i2c = new I2C(sda, scl); + //CMPS11 maksimum 100kHz CMPS12 maksimum 400kHz + i2c->frequency(100000); + i2cAddress = address; + +} + +char CMPS_KRAI::readSoftwareRevision(void){ + char registerNumber = SOFTWARE_REVISION_REG; + char registerContents = 0; + + //First, send the number of register we wish to read, + //in this case, command register, number 0. + i2c->write(i2cAddress, ®isterNumber, 1); + + //Now, read one byte, which will be the contents of the command register. + i2c->read(i2cAddress, ®isterContents, 1); + + return registerContents; +} + +int CMPS_KRAI::readBearing(void){ + char registerNumber = COMPASS_BEARING_WORD_REG; + char registerContents[2] = {0x00, 0x00}; + + //Mengirim register untuk address pertama dari i2c + i2c->write(i2cAddress, ®isterNumber, 1); + + //Mengambil data dari 2 address I2c + i2c->read(i2cAddress, registerContents, 2); + + //Register 0 adalah 8 bit, harus di shift + //Register 1 adalah 16 bit, bisa langsung dibaca + int bearing = ((int)registerContents[0] << 8) | ((int)registerContents[1]); + + return bearing; +} +void CMPS_KRAI::calibrate(void){ + char registerNumber = SOFTWARE_REVISION_REG; + char calibrate_data1 = 0xF0; + char calibrate_data2 = 0xF5; + char calibrate_data3 = 0xF7; + //kirim data 1 + Thread::wait(25); + i2c->write(i2cAddress, ®isterNumber, 1); + i2c->write(i2cAddress, &calibrate_data1, 1); + //kirim data 2 delay 25ms + Thread::wait(25); + i2c->write(i2cAddress, ®isterNumber, 1); + i2c->write(i2cAddress, &calibrate_data2, 1); + //kirim data 3 delay 25ms + Thread::wait(25); + i2c->write(i2cAddress, ®isterNumber, 1); + i2c->write(i2cAddress, &calibrate_data3, 1); +} + +void CMPS_KRAI::stopCalibrate(void){ + char registerNumber = SOFTWARE_REVISION_REG; + char calibrate_data1 = 0xF8; + //kirim data 1 + i2c->write(i2cAddress, ®isterNumber, 1); + i2c->write(i2cAddress, &calibrate_data1, 1); +} \ No newline at end of file
diff -r 000000000000 -r 595938ba3741 CMPS_KRAI.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CMPS_KRAI.h Sat Jul 21 14:22:08 2018 +0000 @@ -0,0 +1,60 @@ +/** + * adopted from + * CMPS03 by: Aarom Berk + * + * Bismillahirahmanirrahim + */ + +#ifndef CMPS_KRAI_H +#define CMPS_KRAI_H + +/** + * Includes + */ +#include "mbed.h" + +#define CMPS_DEFAULT_I2C_ADDRESS 0xC0 +//set register kompas +#define SOFTWARE_REVISION_REG 0x0 +#define COMPASS_BEARING_WORD_REG 0x2 + +//Inisiasi I2C komunikasi dari kompas +class CMPS_KRAI { + + I2C* i2c; + int i2cAddress; + +public: + + /** + * Constructor. + * + * @param sda mbed pin to use for I2C SDA + * @param scl mbed pin to use for I2C SCL + * @param address I2C address of this device. + */ + CMPS_KRAI(PinName sda, PinName scl, int address); + + /** + * Membaca revisi dari kompas + */ + char readSoftwareRevision(void); + + /** + * Membaca nilai dari kompas + * Range nilai 0 - 3599 + */ + int readBearing(void); + + /** + * Kalibrasi kompas + */ + void calibrate(void); + + /** + * Stop calibrate + */ + void stopCalibrate(void); +}; + +#endif /* CMPS_KRAI_H */