Se usa un celular Siemens A56i para la comunicación por GSM,la aplicación consiste en esperar un mensaje de texto con la frase "Donde estas?","donde estas" o "donde estas?" que es enviada al Siemens desde cualquier otro celular, para así devolverle al remitente un link de Google Maps con las coordenadas de donde se encuentra en ese momento suministradas por un GPS, que en este caso será un computador que las envía a través de un Dongle conectado,usando el programa de SatGen con un .kml cargado de Google Earth o usando el simulador GPS de Proteus (funciona para ambos casos).

Dependencies:   GPS_G mbed

/media/uploads/seccastanova/whatsapp_image_2018-05-29_at_11.03.46_am.jpeg

DebouncedIn.cpp

Committer:
seccastanova
Date:
2018-05-29
Revision:
0:deee3793c151

File content as of revision 0:deee3793c151:

#include "DebouncedIn.h"
#include "mbed.h"

/*
 * Constructor
 */
DebouncedIn::DebouncedIn(PinName in) 
    : _in(in) {    
        
    // reset all the flags and counters    
    _samples = 0;
    _output = 0;
    _output_last = 0;
    _rising_flag = 0;
    _falling_flag = 0;
    _state_counter = 0;
    
    // Attach ticker
    _ticker.attach(this, &DebouncedIn::_sample, 0.005);     
}
  
void DebouncedIn::_sample() {

    // take a sample
    _samples = _samples >> 1; // shift left
      
    if (_in) {
        _samples |= 0x80;
    }  
      
    // examine the sample window, look for steady state
    if (_samples == 0x00) {
        _output = 0;
    } 
    else if (_samples == 0xFF) {
        _output = 1;
    }


    // Rising edge detection
    if ((_output == 1) && (_output_last == 0)) {
        _rising_flag++;
        _state_counter = 0;
    }

    // Falling edge detection
    else if ((_output == 0) && (_output_last == 1)) {
        _falling_flag++;
        _state_counter = 0;
    }
    
    // steady state
    else {
        _state_counter++;
    }
    
   // update the output
    _output_last = _output;
    
}



// return number of rising edges
int DebouncedIn::rising(void) {
    int return_value = _rising_flag; 
    _rising_flag = 0;
    return(return_value);
}

// return number of falling edges
int DebouncedIn::falling(void) {
    int return_value = _falling_flag; 
    _falling_flag = 0;
    return(return_value);
}

// return number of ticsk we've bene steady for
int DebouncedIn::steady(void) {
return(_state_counter);
}

// return the debounced status
int DebouncedIn::read(void) {
    return(_output);
}

// shorthand for read()
DebouncedIn::operator int() {
    return read();
}