button procedure library

Dependents:   MIDI_CW Gemphet8

Committer:
ChuckTimber
Date:
Wed Aug 06 23:44:39 2014 +0000
Revision:
1:20c8438edaee
Parent:
0:f57033bb0e05
Child:
2:df827b705b98
BTN_SAMPLING_PERIOD defined.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ChuckTimber 0:f57033bb0e05 1 #include "button.h"
ChuckTimber 0:f57033bb0e05 2 #include "mbed.h"
ChuckTimber 0:f57033bb0e05 3
ChuckTimber 1:20c8438edaee 4 /** class to handle button input
ChuckTimber 1:20c8438edaee 5 * The class use DigitalIn and Ticker
ChuckTimber 0:f57033bb0e05 6 *
ChuckTimber 0:f57033bb0e05 7 * Example:
ChuckTimber 0:f57033bb0e05 8 * @code
ChuckTimber 1:20c8438edaee 9 * // Button sample
ChuckTimber 1:20c8438edaee 10 * #include "mbed.h"
ChuckTimber 1:20c8438edaee 11 * #include "button.h"
ChuckTimber 1:20c8438edaee 12 *
ChuckTimber 1:20c8438edaee 13 * BTN btn(dp13);
ChuckTimber 1:20c8438edaee 14 *
ChuckTimber 1:20c8438edaee 15 * int main()
ChuckTimber 1:20c8438edaee 16 * {
ChuckTimber 1:20c8438edaee 17 * int mode = 0;
ChuckTimber 1:20c8438edaee 18 * int value;
ChuckTimber 1:20c8438edaee 19 *
ChuckTimber 1:20c8438edaee 20 * btn.CMD = 0;
ChuckTimber 1:20c8438edaee 21 * while(1) {
ChuckTimber 1:20c8438edaee 22 * if(btn.CMD) {
ChuckTimber 1:20c8438edaee 23 * mode++;
ChuckTimber 1:20c8438edaee 24 * btn.CMD = 0;
ChuckTimber 1:20c8438edaee 25 * srand( time(NULL) );
ChuckTimber 1:20c8438edaee 26 * }
ChuckTimber 1:20c8438edaee 27 * if (mode % 2) value = rand();
ChuckTimber 1:20c8438edaee 28 * }
ChuckTimber 1:20c8438edaee 29 * }
ChuckTimber 0:f57033bb0e05 30 * @endcode
ChuckTimber 0:f57033bb0e05 31 */
ChuckTimber 0:f57033bb0e05 32
ChuckTimber 0:f57033bb0e05 33 using namespace mbed;
ChuckTimber 0:f57033bb0e05 34
ChuckTimber 1:20c8438edaee 35 // private function
ChuckTimber 1:20c8438edaee 36 /** sample_btn input and process
ChuckTimber 1:20c8438edaee 37 *
ChuckTimber 1:20c8438edaee 38 */
ChuckTimber 0:f57033bb0e05 39 void BTN::sample_btn()
ChuckTimber 0:f57033bb0e05 40 {
ChuckTimber 0:f57033bb0e05 41 unsigned char a, b;
ChuckTimber 0:f57033bb0e05 42
ChuckTimber 0:f57033bb0e05 43 a = _Pin;
ChuckTimber 0:f57033bb0e05 44
ChuckTimber 0:f57033bb0e05 45 if (a == FIL) {
ChuckTimber 0:f57033bb0e05 46 b = STAT;
ChuckTimber 0:f57033bb0e05 47 STAT = a;
ChuckTimber 0:f57033bb0e05 48 b = (b ^ a) & a;
ChuckTimber 0:f57033bb0e05 49 if (b) CMD = b;
ChuckTimber 0:f57033bb0e05 50 }
ChuckTimber 0:f57033bb0e05 51 FIL = a;
ChuckTimber 0:f57033bb0e05 52 }
ChuckTimber 0:f57033bb0e05 53
ChuckTimber 1:20c8438edaee 54 // constructor
ChuckTimber 1:20c8438edaee 55 /** Create a BTN object connected to a DigtalIn pin
ChuckTimber 1:20c8438edaee 56 *
ChuckTimber 1:20c8438edaee 57 * @param pin - DigitalIn pin connected to the switch
ChuckTimber 1:20c8438edaee 58 */
ChuckTimber 0:f57033bb0e05 59 BTN::BTN(PinName pin) : _Pin(pin) {
ChuckTimber 0:f57033bb0e05 60 CMD = STAT = FIL = 0;
ChuckTimber 1:20c8438edaee 61 _Tick.attach(this, &BTN::sample_btn, BTN_SAMPLING_PERIOD);
ChuckTimber 0:f57033bb0e05 62 }