Communication between two serial ports and control direction of motor through the serial terminal.

Dependencies:   C12832_lcd mbed-rtos mbed

Committer:
bhakti08
Date:
Wed Apr 30 19:23:22 2014 +0000
Revision:
0:b8435cfc1bba
The program does the following:; 1. Communication between two serial ports on the MBED; 2. Control ON/OFF of a LED(The pin can be used as direction control of the motor) using the joystick and the serial communication;

Who changed what in which revision?

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