MicrowaveSimulation_LPC1768

Dependencies:   C12832_lcd DebounceInterrupts LM75B mbed-rtos mbed

Committer:
joinamruta
Date:
Mon Mar 17 19:27:11 2014 +0000
Revision:
0:ca76ec016be0
Microwave Simulation on LPC1768 mbed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
joinamruta 0:ca76ec016be0 1 #include "DebouncedIn.h"
joinamruta 0:ca76ec016be0 2 #include "mbed.h"
joinamruta 0:ca76ec016be0 3
joinamruta 0:ca76ec016be0 4 /*
joinamruta 0:ca76ec016be0 5 * Constructor
joinamruta 0:ca76ec016be0 6 */
joinamruta 0:ca76ec016be0 7 DebouncedIn::DebouncedIn(PinName in)
joinamruta 0:ca76ec016be0 8 : _in(in) {
joinamruta 0:ca76ec016be0 9
joinamruta 0:ca76ec016be0 10 // reset all the flags and counters
joinamruta 0:ca76ec016be0 11 _samples = 0;
joinamruta 0:ca76ec016be0 12 _output = 0;
joinamruta 0:ca76ec016be0 13 _output_last = 0;
joinamruta 0:ca76ec016be0 14 _rising_flag = 0;
joinamruta 0:ca76ec016be0 15 _falling_flag = 0;
joinamruta 0:ca76ec016be0 16 _state_counter = 0;
joinamruta 0:ca76ec016be0 17
joinamruta 0:ca76ec016be0 18 // Attach ticker
joinamruta 0:ca76ec016be0 19 _ticker.attach(this, &DebouncedIn::_sample, 0.005);
joinamruta 0:ca76ec016be0 20 }
joinamruta 0:ca76ec016be0 21
joinamruta 0:ca76ec016be0 22 void DebouncedIn::_sample() {
joinamruta 0:ca76ec016be0 23
joinamruta 0:ca76ec016be0 24 // take a sample
joinamruta 0:ca76ec016be0 25 _samples = _samples >> 1; // shift left
joinamruta 0:ca76ec016be0 26
joinamruta 0:ca76ec016be0 27 if (_in) {
joinamruta 0:ca76ec016be0 28 _samples |= 0x80;
joinamruta 0:ca76ec016be0 29 }
joinamruta 0:ca76ec016be0 30
joinamruta 0:ca76ec016be0 31 // examine the sample window, look for steady state
joinamruta 0:ca76ec016be0 32 if (_samples == 0x00) {
joinamruta 0:ca76ec016be0 33 _output = 0;
joinamruta 0:ca76ec016be0 34 }
joinamruta 0:ca76ec016be0 35 else if (_samples == 0xFF) {
joinamruta 0:ca76ec016be0 36 _output = 1;
joinamruta 0:ca76ec016be0 37 }
joinamruta 0:ca76ec016be0 38
joinamruta 0:ca76ec016be0 39
joinamruta 0:ca76ec016be0 40 // Rising edge detection
joinamruta 0:ca76ec016be0 41 if ((_output == 1) && (_output_last == 0)) {
joinamruta 0:ca76ec016be0 42 _rising_flag++;
joinamruta 0:ca76ec016be0 43 _state_counter = 0;
joinamruta 0:ca76ec016be0 44 }
joinamruta 0:ca76ec016be0 45
joinamruta 0:ca76ec016be0 46 // Falling edge detection
joinamruta 0:ca76ec016be0 47 else if ((_output == 0) && (_output_last == 1)) {
joinamruta 0:ca76ec016be0 48 _falling_flag++;
joinamruta 0:ca76ec016be0 49 _state_counter = 0;
joinamruta 0:ca76ec016be0 50 }
joinamruta 0:ca76ec016be0 51
joinamruta 0:ca76ec016be0 52 // steady state
joinamruta 0:ca76ec016be0 53 else {
joinamruta 0:ca76ec016be0 54 _state_counter++;
joinamruta 0:ca76ec016be0 55 }
joinamruta 0:ca76ec016be0 56
joinamruta 0:ca76ec016be0 57 // update the output
joinamruta 0:ca76ec016be0 58 _output_last = _output;
joinamruta 0:ca76ec016be0 59
joinamruta 0:ca76ec016be0 60 }
joinamruta 0:ca76ec016be0 61
joinamruta 0:ca76ec016be0 62
joinamruta 0:ca76ec016be0 63
joinamruta 0:ca76ec016be0 64 // return number of rising edges
joinamruta 0:ca76ec016be0 65 int DebouncedIn::rising(void) {
joinamruta 0:ca76ec016be0 66 int return_value = _rising_flag;
joinamruta 0:ca76ec016be0 67 _rising_flag = 0;
joinamruta 0:ca76ec016be0 68 return(return_value);
joinamruta 0:ca76ec016be0 69 }
joinamruta 0:ca76ec016be0 70
joinamruta 0:ca76ec016be0 71 // return number of falling edges
joinamruta 0:ca76ec016be0 72 int DebouncedIn::falling(void) {
joinamruta 0:ca76ec016be0 73 int return_value = _falling_flag;
joinamruta 0:ca76ec016be0 74 _falling_flag = 0;
joinamruta 0:ca76ec016be0 75 return(return_value);
joinamruta 0:ca76ec016be0 76 }
joinamruta 0:ca76ec016be0 77
joinamruta 0:ca76ec016be0 78 // return number of ticsk we've bene steady for
joinamruta 0:ca76ec016be0 79 int DebouncedIn::steady(void) {
joinamruta 0:ca76ec016be0 80 return(_state_counter);
joinamruta 0:ca76ec016be0 81 }
joinamruta 0:ca76ec016be0 82
joinamruta 0:ca76ec016be0 83 // return the debounced status
joinamruta 0:ca76ec016be0 84 int DebouncedIn::read(void) {
joinamruta 0:ca76ec016be0 85 return(_output);
joinamruta 0:ca76ec016be0 86 }
joinamruta 0:ca76ec016be0 87
joinamruta 0:ca76ec016be0 88 // shorthand for read()
joinamruta 0:ca76ec016be0 89 DebouncedIn::operator int() {
joinamruta 0:ca76ec016be0 90 return read();
joinamruta 0:ca76ec016be0 91 }
joinamruta 0:ca76ec016be0 92
joinamruta 0:ca76ec016be0 93