Tracks GPS coordinates of an asset. Uses: GPS GSM Accelerometer mbed

Dependencies:   mbed MODSERIAL ADXL345 MODGPS

main.cpp

Committer:
gsulc
Date:
2012-05-04
Revision:
0:4415987ca08f

File content as of revision 0:4415987ca08f:

#include "mbed.h"
#include "stdio.h"
#include "sms.h"                //custom sms library
#include "SecurityMechanism.h"  //custom security mechanism library
#include "MODSERIAL.h"          //buffer library for serial
#include "GPS.h"                //GPS library
#include "ADXL345.h"            //Sparkfun ADXL345 accelerometer library

// System
DigitalOut pulse(LED1); //heartbeat
Serial pc(USBTX,USBRX); //for debugging

// Peripherals
MODSERIAL gsm(p28,p27);
GPS gps(NC, p10);
ADXL345 accelerometer(p5, p6, p7, p8);

// Power Control
DigitalOut gps_on(p22);
DigitalOut gps_xstandby(p21);
DigitalOut accelerometer_on(p20);
//DigitalIn security_pwrd(p17);
AnalogIn voltage_level(p19);

// Global Vars
int accel_reading[3] = {0, 0, 0};   //x, y, z coordinates of accelerometer
int prev_accel_reading[3] = {0, 0, 0};   //x, y, z coordinates of accelerometer
string phoneNumber = "4047849578";
bool security_enabled = true;
bool movement_detected = false;
bool command_sent = false;
#define ACCEL_THRESH 50

int main() {
    pc.printf("Initializing Program.\r\n");
    //****init GSM    
    GSM_init();
    
    //****init GPS
    pc.printf("Initializing GPS.\r\n");
    GPS_Time t;
    gps.baud(4800);
    
    //****init accelerometer
    accelerometer_on = 1;
    pc.printf("Initializing Accelerometer.\r\n");
    //Go into standby mode to configure the device.
    accelerometer.setPowerControl(0x00);

    //Full resolution, +/-16g, 4mg/LSB.
    accelerometer.setDataFormatControl(0x0B);
    
    //3.2kHz data rate.
    accelerometer.setDataRate(ADXL345_3200HZ);

    //Measurement mode.
    accelerometer.setPowerControl(0x08);
    
    pc.printf("Initializing Complete.\r\n");
    
    wait(0.4);

    while(1) {
        accelerometer.getOutput(accel_reading);
        //check for movement
        for (int i = 0; i < 3; i++) {
            if (((int16_t)prev_accel_reading[i] != 0) && (int16_t)abs(accel_reading[i] - prev_accel_reading[i]) > ACCEL_THRESH) {
                pc.printf("Movement detected\r\n");
                movement_detected = true;
            }
            prev_accel_reading[i] = accel_reading[i];
        }
        
        //pc.printf("Seurity system = %d\r\n", security_pwrd);
        //security_enabled = security_pwrd;
        
        if (movement_detected) {
            if (security_enabled) {
                //turn off accelerometer
                accelerometer_on = 0;
                pc.printf("Alert\r\n");
                send_location();
                wait(30);
            }
        }
        
        if (command_sent) {
            pc.printf("Ping.\r\n");
            send_location();
            command_sent = false;
            gps_on = 0;
            gps_xstandby = 0;
        }
        
        //heartbeat
        pulse = 1;
        wait(0.2);
        pulse = 0;
        wait(0.2);
    }
}