MMA7361L.cpp@0:9f484862187b, 2011-12-08 (annotated)
- Committer:
- kvling
- Date:
- Thu Dec 08 05:39:11 2011 +0000
- Revision:
- 0:9f484862187b
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kvling | 0:9f484862187b | 1 | #include "MMA7361L.h" |
kvling | 0:9f484862187b | 2 | |
kvling | 0:9f484862187b | 3 | MMA7361L::MMA7361L(PinName xoutPin, PinName youtPin,PinName zoutPin, |
kvling | 0:9f484862187b | 4 | PinName zeroGDetectPin, PinName gSelectPin, PinName sleepPin) : |
kvling | 0:9f484862187b | 5 | xout(xoutPin), yout(youtPin), zout(zoutPin), |
kvling | 0:9f484862187b | 6 | zeroGDetect(zeroGDetectPin), gSelect(gSelectPin), sleep(sleepPin) { |
kvling | 0:9f484862187b | 7 | setSleep(false); |
kvling | 0:9f484862187b | 8 | setScale(SCALE_1_5G); |
kvling | 0:9f484862187b | 9 | } |
kvling | 0:9f484862187b | 10 | |
kvling | 0:9f484862187b | 11 | float MMA7361L::getAccel() { |
kvling | 0:9f484862187b | 12 | float accelX = ((xout * 3.3) - 1.65) / scale; |
kvling | 0:9f484862187b | 13 | float accelY = ((yout * 3.3) - 1.65) / scale; |
kvling | 0:9f484862187b | 14 | float accelZ = ((zout * 3.3) - 1.65) / scale; |
kvling | 0:9f484862187b | 15 | return sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ); |
kvling | 0:9f484862187b | 16 | } |
kvling | 0:9f484862187b | 17 | |
kvling | 0:9f484862187b | 18 | float MMA7361L::getAccelX() { |
kvling | 0:9f484862187b | 19 | return ((xout * 3.3) - 1.65) / scale; |
kvling | 0:9f484862187b | 20 | } |
kvling | 0:9f484862187b | 21 | |
kvling | 0:9f484862187b | 22 | float MMA7361L::getAccelY() { |
kvling | 0:9f484862187b | 23 | return ((yout * 3.3) - 1.65) / scale; |
kvling | 0:9f484862187b | 24 | } |
kvling | 0:9f484862187b | 25 | |
kvling | 0:9f484862187b | 26 | float MMA7361L::getAccelZ() { |
kvling | 0:9f484862187b | 27 | return ((zout * 3.3) - 1.65) / scale; |
kvling | 0:9f484862187b | 28 | } |
kvling | 0:9f484862187b | 29 | |
kvling | 0:9f484862187b | 30 | float MMA7361L::getTiltX() { |
kvling | 0:9f484862187b | 31 | float accelX = ((xout * 3.3) - 1.65) / scale; |
kvling | 0:9f484862187b | 32 | float accelY = ((yout * 3.3) - 1.65) / scale; |
kvling | 0:9f484862187b | 33 | float accelZ = ((zout * 3.3) - 1.65) / scale; |
kvling | 0:9f484862187b | 34 | return asin(accelX / sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ)); |
kvling | 0:9f484862187b | 35 | } |
kvling | 0:9f484862187b | 36 | |
kvling | 0:9f484862187b | 37 | float MMA7361L::getTiltY() { |
kvling | 0:9f484862187b | 38 | float accelX = ((xout * 3.3) - 1.65) / scale; |
kvling | 0:9f484862187b | 39 | float accelY = ((yout * 3.3) - 1.65) / scale; |
kvling | 0:9f484862187b | 40 | float accelZ = ((zout * 3.3) - 1.65) / scale; |
kvling | 0:9f484862187b | 41 | return asin(accelY / sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ)); |
kvling | 0:9f484862187b | 42 | } |
kvling | 0:9f484862187b | 43 | |
kvling | 0:9f484862187b | 44 | float MMA7361L::getTiltZ() { |
kvling | 0:9f484862187b | 45 | float accelX = ((xout * 3.3) - 1.65) / scale; |
kvling | 0:9f484862187b | 46 | float accelY = ((yout * 3.3) - 1.65) / scale; |
kvling | 0:9f484862187b | 47 | float accelZ = ((zout * 3.3) - 1.65) / scale; |
kvling | 0:9f484862187b | 48 | return asin(accelZ / sqrt(accelX * accelX + accelY * accelY + accelZ * accelZ)); |
kvling | 0:9f484862187b | 49 | } |
kvling | 0:9f484862187b | 50 | |
kvling | 0:9f484862187b | 51 | void MMA7361L::setScale(Scale scale) { |
kvling | 0:9f484862187b | 52 | switch (scale) { |
kvling | 0:9f484862187b | 53 | case SCALE_1_5G: |
kvling | 0:9f484862187b | 54 | this->scale = 0.8; |
kvling | 0:9f484862187b | 55 | gSelect = 0; |
kvling | 0:9f484862187b | 56 | break; |
kvling | 0:9f484862187b | 57 | case SCALE_6G: |
kvling | 0:9f484862187b | 58 | this->scale = 0.206; |
kvling | 0:9f484862187b | 59 | gSelect = 1; |
kvling | 0:9f484862187b | 60 | break; |
kvling | 0:9f484862187b | 61 | } |
kvling | 0:9f484862187b | 62 | } |
kvling | 0:9f484862187b | 63 | |
kvling | 0:9f484862187b | 64 | void MMA7361L::setSleep(bool on) { |
kvling | 0:9f484862187b | 65 | sleep = !on; |
kvling | 0:9f484862187b | 66 | } |
kvling | 0:9f484862187b | 67 | |
kvling | 0:9f484862187b | 68 | bool MMA7361L::zeroGDetected() { |
kvling | 0:9f484862187b | 69 | return zeroGDetect; |
kvling | 0:9f484862187b | 70 | } |
kvling | 0:9f484862187b | 71 | |
kvling | 0:9f484862187b | 72 | void MMA7361L::setZeroGDetectListener(void (*func)(void)) { |
kvling | 0:9f484862187b | 73 | zeroGDetect.rise(func); |
kvling | 0:9f484862187b | 74 | } |
kvling | 0:9f484862187b | 75 | |
kvling | 0:9f484862187b | 76 | template<typename T> void MMA7361L::setZeroGDetectListener(T* t, void (T::*func)(void)) { |
kvling | 0:9f484862187b | 77 | zeroG.rise(t, func); |
kvling | 0:9f484862187b | 78 | } |
kvling | 0:9f484862187b | 79 |