button procedure library

Dependents:   MIDI_CW Gemphet8

Committer:
ChuckTimber
Date:
Sat Aug 09 04:37:50 2014 +0000
Revision:
4:d6a45bd85a43
Parent:
3:1c47d318e457
Child:
5:04236df532fb
Fixed switch polarity.

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