Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
CMPS_KRAI.cpp@0:595938ba3741, 2018-07-21 (annotated)
- Committer:
- calmantara186
- Date:
- Sat Jul 21 14:22:08 2018 +0000
- Revision:
- 0:595938ba3741
- Child:
- 1:a129c630cee0
c
Who changed what in which revision?
| User | Revision | Line number | New 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, ®isterNumber, 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, ®isterContents, 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, ®isterNumber, 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, ®isterNumber, 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, ®isterNumber, 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, ®isterNumber, 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, ®isterNumber, 1); |
| calmantara186 | 0:595938ba3741 | 75 | i2c->write(i2cAddress, &calibrate_data1, 1); |
| calmantara186 | 0:595938ba3741 | 76 | } |