version 1.0

Dependencies:   CMSIS_DSP_401 GPS MPU9150_DMP PID QuaternionMath Servo mbed

Fork of SolarOnFoils_MainModule_20150518 by Dannis Brugman

Committer:
Dannis_mbed
Date:
Tue Aug 11 08:38:55 2015 +0000
Revision:
2:f6d058931b17
Parent:
0:81b21910454e
Test version mainmodule

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Dannis_mbed 0:81b21910454e 1 #include "mbed.h"
Dannis_mbed 0:81b21910454e 2 #include "mRotaryEncoder.h"
Dannis_mbed 0:81b21910454e 3
Dannis_mbed 0:81b21910454e 4
Dannis_mbed 0:81b21910454e 5 mRotaryEncoder::mRotaryEncoder(PinName pinA, PinName pinB, PinName pinSW, PinMode pullMode, int debounceTime_us) {
Dannis_mbed 0:81b21910454e 6 m_pinA = new PinDetect(pinA); // interrrupts on pinA
Dannis_mbed 0:81b21910454e 7 m_pinB = new DigitalIn(pinB); // only digitalIn for pinB
Dannis_mbed 0:81b21910454e 8
Dannis_mbed 0:81b21910454e 9 //set pins with internal PullUP-default
Dannis_mbed 0:81b21910454e 10 m_pinA->mode(pullMode);
Dannis_mbed 0:81b21910454e 11 m_pinB->mode(pullMode);
Dannis_mbed 0:81b21910454e 12
Dannis_mbed 0:81b21910454e 13 // attach interrrupts on pinA
Dannis_mbed 0:81b21910454e 14 m_pinA->attach_asserted(this, &mRotaryEncoder::rise);
Dannis_mbed 0:81b21910454e 15 m_pinA->attach_deasserted(this, &mRotaryEncoder::fall);
Dannis_mbed 0:81b21910454e 16
Dannis_mbed 0:81b21910454e 17 //start sampling pinA
Dannis_mbed 0:81b21910454e 18 m_pinA->setSampleFrequency(debounceTime_us); // Start timers an Defaults debounce time.
Dannis_mbed 0:81b21910454e 19
Dannis_mbed 0:81b21910454e 20 // Switch on pinSW
Dannis_mbed 0:81b21910454e 21 m_pinSW = new PinDetect(pinSW); // interrupt on press switch
Dannis_mbed 0:81b21910454e 22 m_pinSW->mode(pullMode);
Dannis_mbed 0:81b21910454e 23
Dannis_mbed 0:81b21910454e 24 m_pinSW->setSampleFrequency(debounceTime_us); // Start timers an Defaults debounce time.
Dannis_mbed 0:81b21910454e 25
Dannis_mbed 0:81b21910454e 26
Dannis_mbed 0:81b21910454e 27 m_position = 0;
Dannis_mbed 0:81b21910454e 28
Dannis_mbed 0:81b21910454e 29 m_debounceTime_us = debounceTime_us;
Dannis_mbed 0:81b21910454e 30 }
Dannis_mbed 0:81b21910454e 31
Dannis_mbed 0:81b21910454e 32 mRotaryEncoder::~mRotaryEncoder() {
Dannis_mbed 0:81b21910454e 33 delete m_pinA;
Dannis_mbed 0:81b21910454e 34 delete m_pinB;
Dannis_mbed 0:81b21910454e 35 delete m_pinSW;
Dannis_mbed 0:81b21910454e 36 }
Dannis_mbed 0:81b21910454e 37
Dannis_mbed 0:81b21910454e 38 int mRotaryEncoder::Get(void) {
Dannis_mbed 0:81b21910454e 39 return m_position;
Dannis_mbed 0:81b21910454e 40 }
Dannis_mbed 0:81b21910454e 41
Dannis_mbed 0:81b21910454e 42
Dannis_mbed 0:81b21910454e 43
Dannis_mbed 0:81b21910454e 44 void mRotaryEncoder::Set(int value) {
Dannis_mbed 0:81b21910454e 45 m_position = value;
Dannis_mbed 0:81b21910454e 46 }
Dannis_mbed 0:81b21910454e 47
Dannis_mbed 0:81b21910454e 48
Dannis_mbed 0:81b21910454e 49 void mRotaryEncoder::fall(void) {
Dannis_mbed 0:81b21910454e 50 // debouncing does PinDetect for us
Dannis_mbed 0:81b21910454e 51 //pinA still low?
Dannis_mbed 0:81b21910454e 52 if (*m_pinA == 0) {
Dannis_mbed 0:81b21910454e 53 if (*m_pinB == 1) {
Dannis_mbed 0:81b21910454e 54 m_position++;
Dannis_mbed 0:81b21910454e 55 rotCWIsr.call();
Dannis_mbed 0:81b21910454e 56 } else {
Dannis_mbed 0:81b21910454e 57 m_position--;
Dannis_mbed 0:81b21910454e 58 rotCCWIsr.call();
Dannis_mbed 0:81b21910454e 59 }
Dannis_mbed 0:81b21910454e 60 }
Dannis_mbed 0:81b21910454e 61 rotIsr.call(); // call the isr for rotation
Dannis_mbed 0:81b21910454e 62 }
Dannis_mbed 0:81b21910454e 63
Dannis_mbed 0:81b21910454e 64 void mRotaryEncoder::rise(void) {
Dannis_mbed 0:81b21910454e 65 //PinDetect does debouncing
Dannis_mbed 0:81b21910454e 66 //pinA still high?
Dannis_mbed 0:81b21910454e 67 if (*m_pinA == 1) {
Dannis_mbed 0:81b21910454e 68 if (*m_pinB == 1) {
Dannis_mbed 0:81b21910454e 69 m_position--;
Dannis_mbed 0:81b21910454e 70 rotCCWIsr.call();
Dannis_mbed 0:81b21910454e 71 } else {
Dannis_mbed 0:81b21910454e 72 m_position++;
Dannis_mbed 0:81b21910454e 73 rotCWIsr.call();
Dannis_mbed 0:81b21910454e 74 }
Dannis_mbed 0:81b21910454e 75 }
Dannis_mbed 0:81b21910454e 76 rotIsr.call(); // call the isr for rotation
Dannis_mbed 0:81b21910454e 77 }
Dannis_mbed 0:81b21910454e 78