Programa para establecer la comunicación con un módem Siemens A56 y un modulo FRDMKL25Z opera como rastreador satelital para Geolocalizacion. Por la UART (1) se conecta el MODEM y por la uart (2) el GPS (se lee en modo NEMEA) Este sistema genera una cadena de geolocalizacion para GoogleMaps con las coordenadas locales Si previamente se envia el mensaje (Coordenadas o coordenadas) El sistema ademas recibe ordenes de tipo mensaje GSM PDU para accionar cargas

Dependencies:   mbed GPS_G

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers DebouncedIn.cpp Source File

DebouncedIn.cpp

00001 #include "DebouncedIn.h"
00002 #include "mbed.h"
00003 
00004 /*
00005  * Constructor
00006  */
00007 DebouncedIn::DebouncedIn(PinName in) 
00008     : _in(in) {    
00009         
00010     // reset all the flags and counters    
00011     _samples = 0;
00012     _output = 0;
00013     _output_last = 0;
00014     _rising_flag = 0;
00015     _falling_flag = 0;
00016     _state_counter = 0;
00017     
00018     // Attach ticker
00019     _ticker.attach(this, &DebouncedIn::_sample, 0.005);     
00020 }
00021   
00022 void DebouncedIn::_sample() {
00023 
00024     // take a sample
00025     _samples = _samples >> 1; // shift left
00026       
00027     if (_in) {
00028         _samples |= 0x80;
00029     }  
00030       
00031     // examine the sample window, look for steady state
00032     if (_samples == 0x00) {
00033         _output = 0;
00034     } 
00035     else if (_samples == 0xFF) {
00036         _output = 1;
00037     }
00038 
00039 
00040     // Rising edge detection
00041     if ((_output == 1) && (_output_last == 0)) {
00042         _rising_flag++;
00043         _state_counter = 0;
00044     }
00045 
00046     // Falling edge detection
00047     else if ((_output == 0) && (_output_last == 1)) {
00048         _falling_flag++;
00049         _state_counter = 0;
00050     }
00051     
00052     // steady state
00053     else {
00054         _state_counter++;
00055     }
00056     
00057    // update the output
00058     _output_last = _output;
00059     
00060 }
00061 
00062 
00063 
00064 // return number of rising edges
00065 int DebouncedIn::rising(void) {
00066     int return_value = _rising_flag; 
00067     _rising_flag = 0;
00068     return(return_value);
00069 }
00070 
00071 // return number of falling edges
00072 int DebouncedIn::falling(void) {
00073     int return_value = _falling_flag; 
00074     _falling_flag = 0;
00075     return(return_value);
00076 }
00077 
00078 // return number of ticsk we've bene steady for
00079 int DebouncedIn::steady(void) {
00080 return(_state_counter);
00081 }
00082 
00083 // return the debounced status
00084 int DebouncedIn::read(void) {
00085     return(_output);
00086 }
00087 
00088 // shorthand for read()
00089 DebouncedIn::operator int() {
00090     return read();
00091 }
00092 
00093