This is a very simple way to count DigitalIn rising by using Ticker Interrupts.

Dependencies:   mbed

Pswitch.cpp

Committer:
MBE13170
Date:
2010-12-23
Revision:
0:d8173cfb7a78

File content as of revision 0:d8173cfb7a78:



#include "Pswitch.h"
 #include "mbed.h"
 
 /*
  * Constructor
  */
 Pswitch::Pswitch(PinName in) 
     : _in(in) {    
         
     // reset all the flags and counters    
     _samples = 0;
     _output = 0;
     _output_last = 0;
     _rising_flag = 0;
     
     // Attach ticker
     _ticker.attach(this, &Pswitch::_sample, 0.005);     
 }
   
 void Pswitch::_sample() {
 

	_output_last = _output;
	_output = _in;
	if (!_output && _output_last)
	{
		_rising_flag++;
	}

}

 
 
 
 // return number of rising edges
 int Pswitch::count(void) {
     int return_value = _rising_flag; 
     _rising_flag = 0;
     return(return_value);
 }
 
 // return the debounced status
 int Pswitch::read(void) {
     return(_in);
 }
 
 // shorthand for read()
 Pswitch::operator int() {
     return read();
 }