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@1:a129c630cee0, 2019-03-21 (annotated)
- 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?
| 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 | 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, ®isterNumber, 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, ®isterContents, 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, ®isterNumber, 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, ®isterNumber, 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, ®isterNumber, 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, ®isterNumber, 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, ®isterNumber, 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 | } |