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 PinDetect by
Revision 1:611a8f5ac65c, committed 2011-01-13
- Comitter:
- AjK
- Date:
- Thu Jan 13 09:53:26 2011 +0000
- Parent:
- 0:4f4ccb203a70
- Child:
- 2:cb3afc45028b
- Commit message:
- 1.4 See ChangeLog.h
Changed in this revision
--- a/ChangeLog.h Thu Jan 13 01:47:31 2011 +0000
+++ b/ChangeLog.h Thu Jan 13 09:53:26 2011 +0000
@@ -19,6 +19,11 @@
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
+ 1.4 13 Jan 2011 - Added an extra overloaded constructor that allows
+ the DigitalIn PinMode to be passed when the the class
+ is declared. So mode() isn't really needed but is left
+ in for completeness.
+
1.3 13 Jan 2011 - Updated some doxygen comments.
1.2 13 Jan 2011 - Added ChangeLog.h file.
--- a/PinDetect.h Thu Jan 13 01:47:31 2011 +0000
+++ b/PinDetect.h Thu Jan 13 09:53:26 2011 +0000
@@ -31,8 +31,6 @@
#define PINDETECT_PIN_ASSTERED 1
#endif
-#define PINDETECT_PIN_DEASSTERED !PINDETECT_PIN_ASSTERED
-
#ifndef PINDETECT_SAMPLE_PERIOD
#define PINDETECT_SAMPLE_PERIOD 20000
#endif
@@ -130,32 +128,72 @@
* @see example.h
*/
class PinDetect {
+
+protected:
+ DigitalIn *_in;
+ Ticker *_ticker;
+ int _prevState;
+ int _currentStateCounter;
+ int _sampleTime;
+ int _assertValue;
+ int _samplesTillAssertReload;
+ int _samplesTillAssert;
+ int _samplesTillHeldReload;
+ int _samplesTillHeld;
+ FunctionPointer _callbackAsserted;
+ FunctionPointer _callbackDeasserted;
+ FunctionPointer _callbackAssertedHeld;
+ FunctionPointer _callbackDeassertedHeld;
+
+ /** initialise class
+ *
+ * @param PinName p is a valid pin that supports DigitalIn
+ * @param PinMode m The mode the DigitalIn should use.
+ */
+ void init(PinName p, PinMode m) {
+ _sampleTime = PINDETECT_SAMPLE_PERIOD;
+ _samplesTillAssert = PINDETECT_ASSERT_COUNT;
+ _samplesTillHeld = 0;
+ _samplesTillAssertReload = PINDETECT_ASSERT_COUNT;
+ _samplesTillHeldReload = PINDETECT_HOLD_COUNT;
+ _assertValue = PINDETECT_PIN_ASSTERED;
+
+ _in = new DigitalIn( p );
+ _in->mode( m );
+ _prevState = _in->read();
+ _ticker = new Ticker;
+ }
+
public:
PinDetect() { error("You must supply a PinName"); }
/** PinDetect constructor
*
+ * By default the PinMode is set to PullDown.
+ *
* @see http://mbed.org/handbook/DigitalIn
* @param p PinName is a valid pin that supports DigitalIn
*/
PinDetect(PinName p) {
- _sampleTime = PINDETECT_SAMPLE_PERIOD;
- _samplesTillAssert = PINDETECT_ASSERT_COUNT;
- _samplesTillHeld = 0;
- _samplesTillAssertReload = PINDETECT_ASSERT_COUNT;
- _samplesTillHeldReload = PINDETECT_HOLD_COUNT;
- _assertValue = PINDETECT_PIN_ASSTERED;
- _in = new DigitalIn(p);
- _prevState = _in->read();
- _ticker = new Ticker;
+ init( p, PullDown );
+ }
+
+ /** PinDetect constructor
+ *
+ * @see http://mbed.org/handbook/DigitalIn
+ * @param PinName p is a valid pin that supports DigitalIn
+ * @param PinMode m The mode the DigitalIn should use.
+ */
+ PinDetect(PinName p, PinMode m) {
+ init( p, m );
}
/** PinDetect destructor
*/
~PinDetect() {
- if (_ticker) delete(_ticker);
- if (_in) delete(_in);
+ if ( _ticker ) delete( _ticker );
+ if ( _in ) delete( _in );
}
/** Set the sampling time in microseconds.
@@ -164,7 +202,7 @@
*/
void setSampleFrequency(int i = PINDETECT_SAMPLE_PERIOD) {
_sampleTime = i;
- _ticker->attach_us(this, &PinDetect::isr, _sampleTime);
+ _ticker->attach_us( this, &PinDetect::isr, _sampleTime );
}
/** Set the value used as assert.
@@ -196,7 +234,7 @@
* @see http://mbed.org/projects/libraries/api/mbed/trunk/DigitalInOut#DigitalInOut.mode
* @param PinMode m The mode to pass on to the DigitalIn
*/
- void mode(PinMode m) { _in->mode(m); }
+ void mode(PinMode m) { _in->mode( m ); }
/** Attach a callback function
*
@@ -219,7 +257,7 @@
* @param function A C function pointer
*/
void attach_asserted(void (*function)(void)) {
- _callbackAsserted.attach(function);
+ _callbackAsserted.attach( function );
}
/** Attach a callback object/method
@@ -247,7 +285,7 @@
*/
template<typename T>
void attach_asserted(T *object, void (T::*member)(void)) {
- _callbackAsserted.attach(object, member);
+ _callbackAsserted.attach( object, member );
}
/** Attach a callback function
@@ -271,7 +309,7 @@
* @param function A C function pointer
*/
void attach_deasserted(void (*function)(void)) {
- _callbackDeasserted.attach(function);
+ _callbackDeasserted.attach( function );
}
/** Attach a callback object/method
@@ -299,7 +337,7 @@
*/
template<typename T>
void attach_deasserted(T *object, void (T::*member)(void)) {
- _callbackDeasserted.attach(object, member);
+ _callbackDeasserted.attach( object, member );
}
/** Attach a callback function
@@ -323,7 +361,7 @@
* @param function A C function pointer
*/
void attach_asserted_held(void (*function)(void)) {
- _callbackAssertedHeld.attach(function);
+ _callbackAssertedHeld.attach( function );
}
/** Attach a callback object/method
@@ -351,7 +389,7 @@
*/
template<typename T>
void attach_asserted_held(T *object, void (T::*member)(void)) {
- _callbackAssertedHeld.attach(object, member);
+ _callbackAssertedHeld.attach( object, member );
}
/** Attach a callback function
@@ -375,7 +413,7 @@
* @param function A C function pointer
*/
void attach_deasserted_held(void (*function)(void)) {
- _callbackDeassertedHeld.attach(function);
+ _callbackDeassertedHeld.attach( function );
}
/** Attach a callback object/method
@@ -403,7 +441,7 @@
*/
template<typename T>
void attach_deasserted_held(T *object, void (T::*member)(void)) {
- _callbackDeassertedHeld.attach(object, member);
+ _callbackDeassertedHeld.attach( object, member );
}
/** operator int()
@@ -417,11 +455,11 @@
void isr(void) {
int currentState = _in->read();
- if (currentState != _prevState) {
- if (_samplesTillAssert == 0) {
+ if ( currentState != _prevState ) {
+ if ( _samplesTillAssert == 0 ) {
_prevState = currentState;
_samplesTillHeld = _samplesTillHeldReload;
- if (currentState == _assertValue)
+ if ( currentState == _assertValue )
_callbackAsserted.call();
else
_callbackDeasserted.call();
@@ -434,11 +472,11 @@
_samplesTillAssert = _samplesTillAssertReload;
}
- if (_samplesTillHeld) {
- if (_prevState == currentState) {
+ if ( _samplesTillHeld ) {
+ if ( _prevState == currentState ) {
_samplesTillHeld--;
- if (_samplesTillHeld == 0) {
- if (currentState == _assertValue)
+ if ( _samplesTillHeld == 0 ) {
+ if ( currentState == _assertValue )
_callbackAssertedHeld.call();
else
_callbackDeassertedHeld.call();
@@ -450,21 +488,6 @@
}
}
-protected:
- DigitalIn *_in;
- Ticker *_ticker;
- int _prevState;
- int _currentStateCounter;
- int _sampleTime;
- int _assertValue;
- int _samplesTillAssertReload;
- int _samplesTillAssert;
- int _samplesTillHeldReload;
- int _samplesTillHeld;
- FunctionPointer _callbackAsserted;
- FunctionPointer _callbackDeasserted;
- FunctionPointer _callbackAssertedHeld;
- FunctionPointer _callbackDeassertedHeld;
};
}; // namespace AjK ends.
--- a/example.h Thu Jan 13 01:47:31 2011 +0000
+++ b/example.h Thu Jan 13 09:53:26 2011 +0000
@@ -25,12 +25,22 @@
#include "mbed.h"
#include "PinDetect.h"
-PinDetect pin( p21 );
+PinDetect pin ( p21 );
DigitalOut led1( LED1 );
DigitalOut led2( LED2 );
DigitalOut led3( LED3 );
DigitalOut led4( LED4 );
+/*
+ * Note, the PinDetect can be defined thus:-
+ * PinDetect pin( p21, PullDown );
+ * This allows you to specify the DigitalIn pinmode
+ * when you create the PinDetect object. This means
+ * using pin.mode() later is then no longer required.
+ */
+
+// C function callbacks follow.
+
void keyPressed( void ) {
led2 = 1;
led3 = 0;
@@ -51,6 +61,8 @@
led4 = 1;
}
+// The main program.
+
int main() {
pin.mode( PullDown );
