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.
Fork of scoreLight_Advanced by
hardwareIO/CRotaryEncoder.cpp@42:c4e9c1116af4, 2014-03-28 (annotated)
- Committer:
- mbedalvaro
- Date:
- Fri Mar 28 10:18:38 2014 +0000
- Revision:
- 42:c4e9c1116af4
- Child:
- 44:46e25fa1669b
Added functionality for two rotary encoders to control the additional mirror delay and the fixed threshold (instead of a potentiometer), and discarded the use of interrupt based switches to change the threshold mode (instead I use a two-state switch)
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mbedalvaro | 42:c4e9c1116af4 | 1 | #include "mbed.h" |
mbedalvaro | 42:c4e9c1116af4 | 2 | #include "CRotaryEncoder.h" |
mbedalvaro | 42:c4e9c1116af4 | 3 | |
mbedalvaro | 42:c4e9c1116af4 | 4 | |
mbedalvaro | 42:c4e9c1116af4 | 5 | CRotaryEncoder rotaryEncoder1=CRotaryEncoder(ROTARY_ENCODER1_PINA, ROTARY_ENCODER1_PINB);//pre-instanciation of object lockin with inter-file scope (declared extern in .h file) |
mbedalvaro | 42:c4e9c1116af4 | 6 | CRotaryEncoder rotaryEncoder2=CRotaryEncoder(ROTARY_ENCODER2_PINA, ROTARY_ENCODER2_PINB);//pre-instanciation of object lockin with inter-file scope (declared extern in .h file) |
mbedalvaro | 42:c4e9c1116af4 | 7 | |
mbedalvaro | 42:c4e9c1116af4 | 8 | CRotaryEncoder::CRotaryEncoder(PinName pinA, PinName pinB) |
mbedalvaro | 42:c4e9c1116af4 | 9 | { |
mbedalvaro | 42:c4e9c1116af4 | 10 | m_pinA = new InterruptIn(pinA); |
mbedalvaro | 42:c4e9c1116af4 | 11 | m_pinA->rise(this, &CRotaryEncoder::rise); |
mbedalvaro | 42:c4e9c1116af4 | 12 | m_pinA->fall(this, &CRotaryEncoder::fall); |
mbedalvaro | 42:c4e9c1116af4 | 13 | |
mbedalvaro | 42:c4e9c1116af4 | 14 | m_pinB = new DigitalIn(pinB); |
mbedalvaro | 42:c4e9c1116af4 | 15 | m_position = 0; |
mbedalvaro | 42:c4e9c1116af4 | 16 | |
mbedalvaro | 42:c4e9c1116af4 | 17 | newValue=true; |
mbedalvaro | 42:c4e9c1116af4 | 18 | minValue=0; maxValue=360; |
mbedalvaro | 42:c4e9c1116af4 | 19 | } |
mbedalvaro | 42:c4e9c1116af4 | 20 | |
mbedalvaro | 42:c4e9c1116af4 | 21 | CRotaryEncoder::~CRotaryEncoder() |
mbedalvaro | 42:c4e9c1116af4 | 22 | { |
mbedalvaro | 42:c4e9c1116af4 | 23 | delete m_pinA; |
mbedalvaro | 42:c4e9c1116af4 | 24 | delete m_pinB; |
mbedalvaro | 42:c4e9c1116af4 | 25 | } |
mbedalvaro | 42:c4e9c1116af4 | 26 | |
mbedalvaro | 42:c4e9c1116af4 | 27 | void CRotaryEncoder::SetMinMax(int min, int max) { |
mbedalvaro | 42:c4e9c1116af4 | 28 | minValue=min; |
mbedalvaro | 42:c4e9c1116af4 | 29 | maxValue=max; |
mbedalvaro | 42:c4e9c1116af4 | 30 | } |
mbedalvaro | 42:c4e9c1116af4 | 31 | |
mbedalvaro | 42:c4e9c1116af4 | 32 | int CRotaryEncoder::Get(void) |
mbedalvaro | 42:c4e9c1116af4 | 33 | { |
mbedalvaro | 42:c4e9c1116af4 | 34 | return m_position; |
mbedalvaro | 42:c4e9c1116af4 | 35 | } |
mbedalvaro | 42:c4e9c1116af4 | 36 | |
mbedalvaro | 42:c4e9c1116af4 | 37 | void CRotaryEncoder::Set(int value) |
mbedalvaro | 42:c4e9c1116af4 | 38 | { |
mbedalvaro | 42:c4e9c1116af4 | 39 | if (value>maxValue) m_position = maxValue; |
mbedalvaro | 42:c4e9c1116af4 | 40 | if (value<minValue) m_position = minValue; |
mbedalvaro | 42:c4e9c1116af4 | 41 | m_position = value; |
mbedalvaro | 42:c4e9c1116af4 | 42 | } |
mbedalvaro | 42:c4e9c1116af4 | 43 | |
mbedalvaro | 42:c4e9c1116af4 | 44 | bool CRotaryEncoder::CheckNew() |
mbedalvaro | 42:c4e9c1116af4 | 45 | { |
mbedalvaro | 42:c4e9c1116af4 | 46 | bool auxValue=newValue; |
mbedalvaro | 42:c4e9c1116af4 | 47 | newValue=0; |
mbedalvaro | 42:c4e9c1116af4 | 48 | return(auxValue); |
mbedalvaro | 42:c4e9c1116af4 | 49 | } |
mbedalvaro | 42:c4e9c1116af4 | 50 | |
mbedalvaro | 42:c4e9c1116af4 | 51 | void CRotaryEncoder::wrapValue() { |
mbedalvaro | 42:c4e9c1116af4 | 52 | if (m_position>maxValue) m_position = minValue; |
mbedalvaro | 42:c4e9c1116af4 | 53 | if (m_position<minValue) m_position = maxValue; |
mbedalvaro | 42:c4e9c1116af4 | 54 | } |
mbedalvaro | 42:c4e9c1116af4 | 55 | |
mbedalvaro | 42:c4e9c1116af4 | 56 | void CRotaryEncoder::fall(void) |
mbedalvaro | 42:c4e9c1116af4 | 57 | { |
mbedalvaro | 42:c4e9c1116af4 | 58 | if(*m_pinB == 1) |
mbedalvaro | 42:c4e9c1116af4 | 59 | { |
mbedalvaro | 42:c4e9c1116af4 | 60 | m_position++; |
mbedalvaro | 42:c4e9c1116af4 | 61 | } |
mbedalvaro | 42:c4e9c1116af4 | 62 | else |
mbedalvaro | 42:c4e9c1116af4 | 63 | { |
mbedalvaro | 42:c4e9c1116af4 | 64 | m_position--; |
mbedalvaro | 42:c4e9c1116af4 | 65 | } |
mbedalvaro | 42:c4e9c1116af4 | 66 | |
mbedalvaro | 42:c4e9c1116af4 | 67 | wrapValue(); |
mbedalvaro | 42:c4e9c1116af4 | 68 | |
mbedalvaro | 42:c4e9c1116af4 | 69 | newValue=true; |
mbedalvaro | 42:c4e9c1116af4 | 70 | } |
mbedalvaro | 42:c4e9c1116af4 | 71 | |
mbedalvaro | 42:c4e9c1116af4 | 72 | void CRotaryEncoder::rise(void) |
mbedalvaro | 42:c4e9c1116af4 | 73 | { |
mbedalvaro | 42:c4e9c1116af4 | 74 | if(*m_pinB == 1) |
mbedalvaro | 42:c4e9c1116af4 | 75 | { |
mbedalvaro | 42:c4e9c1116af4 | 76 | m_position--; |
mbedalvaro | 42:c4e9c1116af4 | 77 | } |
mbedalvaro | 42:c4e9c1116af4 | 78 | else |
mbedalvaro | 42:c4e9c1116af4 | 79 | { |
mbedalvaro | 42:c4e9c1116af4 | 80 | m_position++; |
mbedalvaro | 42:c4e9c1116af4 | 81 | } |
mbedalvaro | 42:c4e9c1116af4 | 82 | |
mbedalvaro | 42:c4e9c1116af4 | 83 | wrapValue(); |
mbedalvaro | 42:c4e9c1116af4 | 84 | |
mbedalvaro | 42:c4e9c1116af4 | 85 | newValue=true; |
mbedalvaro | 42:c4e9c1116af4 | 86 | } |
mbedalvaro | 42:c4e9c1116af4 | 87 |