compass KRI 2018

Files at this revision

API Documentation at this revision

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, &registerNumber, 1);
+    
+    //Now, read one byte, which will be the contents of the command register.
+    i2c->read(i2cAddress, &registerContents, 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, &registerNumber, 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, &registerNumber, 1);
+    i2c->write(i2cAddress, &calibrate_data1, 1);
+    //kirim data 2 delay 25ms
+    Thread::wait(25);
+    i2c->write(i2cAddress, &registerNumber, 1);
+    i2c->write(i2cAddress, &calibrate_data2, 1);
+    //kirim data 3 delay 25ms
+    Thread::wait(25);
+    i2c->write(i2cAddress, &registerNumber, 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, &registerNumber, 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 */