Create this program

Dependencies:   mbed HCSR04 HMC6352 PID TextLCD

Committer:
KoiShin_Sakana
Date:
Tue Aug 11 13:11:05 2015 +0000
Revision:
6:44c3bfbe2553
Parent:
5:e07e380ddb93
update dribbler.h

Who changed what in which revision?

UserRevisionLine numberNew contents of line
KoiShin_Sakana 2:a8bbf677e774 1 /**
KoiShin_Sakana 2:a8bbf677e774 2 * @file : compass.h (1.0)
KoiShin_Sakana 2:a8bbf677e774 3 * @brief : measure angle
KoiShin_Sakana 2:a8bbf677e774 4 * @author : Shinnosuke KOIKE
KoiShin_Sakana 2:a8bbf677e774 5 * @date : 2015/08/04
KoiShin_Sakana 2:a8bbf677e774 6 */
KoiShin_Sakana 2:a8bbf677e774 7
KoiShin_Sakana 1:d0cada9a5381 8 #ifndef COMPASS_H
KoiShin_Sakana 1:d0cada9a5381 9 #define COMPASS_H
KoiShin_Sakana 1:d0cada9a5381 10
KoiShin_Sakana 1:d0cada9a5381 11 #include "mbed.h"
KoiShin_Sakana 1:d0cada9a5381 12 #include "HMC6352.h"
KoiShin_Sakana 1:d0cada9a5381 13
KoiShin_Sakana 1:d0cada9a5381 14 class Compass {
KoiShin_Sakana 2:a8bbf677e774 15 public:
KoiShin_Sakana 2:a8bbf677e774 16 Compass(PinName sda, PinName scl);
KoiShin_Sakana 3:901d18b901b4 17 ~Compass();
KoiShin_Sakana 2:a8bbf677e774 18 float measureAngle(void);
KoiShin_Sakana 2:a8bbf677e774 19
KoiShin_Sakana 1:d0cada9a5381 20 private:
KoiShin_Sakana 1:d0cada9a5381 21 float initialAngle;
KoiShin_Sakana 1:d0cada9a5381 22 HMC6352* hmc6352;
KoiShin_Sakana 1:d0cada9a5381 23 };
KoiShin_Sakana 1:d0cada9a5381 24
KoiShin_Sakana 2:a8bbf677e774 25 // initialize and set initial angle
KoiShin_Sakana 1:d0cada9a5381 26 Compass::Compass(PinName sda, PinName scl) {
KoiShin_Sakana 1:d0cada9a5381 27 hmc6352 = new HMC6352(sda, scl);
KoiShin_Sakana 1:d0cada9a5381 28 hmc6352->setOpMode(HMC6352_CONTINUOUS, 1, 20);
KoiShin_Sakana 1:d0cada9a5381 29 wait(0.1);
KoiShin_Sakana 1:d0cada9a5381 30 this->initialAngle = hmc6352->sample() / 10.0;
KoiShin_Sakana 1:d0cada9a5381 31 }
KoiShin_Sakana 1:d0cada9a5381 32
KoiShin_Sakana 3:901d18b901b4 33 Compass::~Compass() {
KoiShin_Sakana 3:901d18b901b4 34 delete hmc6352;
KoiShin_Sakana 3:901d18b901b4 35 }
KoiShin_Sakana 3:901d18b901b4 36
KoiShin_Sakana 2:a8bbf677e774 37 // return difference of angle
KoiShin_Sakana 2:a8bbf677e774 38 float Compass::measureAngle(void) {
KoiShin_Sakana 1:d0cada9a5381 39 wait(0.1);
KoiShin_Sakana 2:a8bbf677e774 40 float diffAngle = hmc6352->sample() / 10.0 - initialAngle;
KoiShin_Sakana 2:a8bbf677e774 41 return diffAngle;
KoiShin_Sakana 1:d0cada9a5381 42 }
KoiShin_Sakana 1:d0cada9a5381 43
KoiShin_Sakana 1:d0cada9a5381 44 #endif
KoiShin_Sakana 1:d0cada9a5381 45
KoiShin_Sakana 2:a8bbf677e774 46 /**
KoiShin_Sakana 1:d0cada9a5381 47 * example program
KoiShin_Sakana 1:d0cada9a5381 48
KoiShin_Sakana 1:d0cada9a5381 49 #include "mbed.h"
KoiShin_Sakana 1:d0cada9a5381 50 #include "compass.h"
KoiShin_Sakana 1:d0cada9a5381 51
KoiShin_Sakana 1:d0cada9a5381 52 int main(void) {
KoiShin_Sakana 1:d0cada9a5381 53 Compass compass(D14, D15);
KoiShin_Sakana 1:d0cada9a5381 54 while (1) {
KoiShin_Sakana 5:e07e380ddb93 55 pc.printf("%f\r\n", compass.measureAngle()); // for example, display "130.143..."
KoiShin_Sakana 1:d0cada9a5381 56 }
KoiShin_Sakana 1:d0cada9a5381 57 }
KoiShin_Sakana 2:a8bbf677e774 58 */