GPS + SIGFOX

Dependencies:   Akene-sigfox-projet-iot-tracker SerialGPS_IOT_tracker SoftSerial mbed

main.cpp

Committer:
ycardaillac
Date:
2017-02-14
Revision:
1:3390618a8252
Parent:
0:8a9b5024eda9

File content as of revision 1:3390618a8252:

#include "mbed.h"
#include "Akene.h"
#include "SerialGPS.h"
#include "math.h"
 
Serial pc(USBTX, USBRX); // tx, rx
SerialGPS gps(PA_9,PA_10);  // tx, rx

void cbfunc_log(char *s) {

}

/**
 * A callback function for GGA.
 *
 * GGA - Global Positioning System Fixed Data.
 */
 float latitude = 0.0;
 float longitude = 0.0;
 int flag = 0;
void cbfunc_gga(SerialGPS::gps_gga_t *p) {

        pc.printf("%02d:%02d:%02d(P%d,S%d)\r\n", p->hour, p->min, p->sec, p->position_fix, p->satellites_used);

        pc.printf("%c=%10.4f\r\n", p->ns, p->latitude);

        pc.printf("%c=%10.4f\r\n", p->ew, p->longitude);
    
        latitude = (float) p->latitude;
        longitude = (float) p->longitude;
        flag = 1;
        
}

void cbfunc_gsa(SerialGPS::gps_gsa_t *p) {

        pc.printf("SEL:%c FIX:%d\r\n", p->selmode, p->fix);
  
}
void cbfunc_gsv(SerialGPS::gps_gsv_t *p) {
 
        pc.printf("Satellites:%2d\r\n", p->satcnt);

}
void cbfunc_rmc(SerialGPS::gps_rmc_t *p) {

        pc.printf("%02d:%02d:%02d(%c)\r\n", p->hour, p->min, p->sec, p->status);

}

/**
 * Entry point.
 */

int main() {
    
     pc.baud(9600);
    pc.printf("beginn\n\r");
    // GPS set 
    wait(0.5);
    SerialGPS::gps_callback_t cb;
    cb.cbfunc_log = cbfunc_log;
    cb.cbfunc_gga = cbfunc_gga;
    cb.cbfunc_gsa = cbfunc_gsa;
    cb.cbfunc_gsv = cbfunc_gsv;
    cb.cbfunc_rmc = cbfunc_rmc;
    gps.attach(&cb);
    
     
     //Wait for proper longitude and latitude
     while( flag == 0) {
       gps.processing();
        //wait(0.5);
    }


    //sigfox
    char tmp[8];
    printf("\ntest envoie sigfox\n");

    // Init modem
    Akene.begin();
    printf("begin ok");
    
    
    while (!Akene.isReady()) {
        printf("Modem not ready");
        wait(1);
    }

    // DATA ENCODING :

    // Mettre latitude à envoyer dans :
    float float_variable0 = longitude;
    char bytes_array0[4];
    // Mettre longitude à envoyer dans : 
    float float_variable1 = latitude;
    char bytes_array1[4];
    
    *((float *)bytes_array0) = float_variable0;
    *((float *)bytes_array1) = float_variable1;   
    
    char bytes_array_final [8];
    int i;
    for ( i =0;i<8;i++){
        if (i<4){
             bytes_array_final[i]=bytes_array0[i];   
            
        }
        else {
            bytes_array_final[i]=bytes_array1[i-4];    
        }   
    }
    
    // DATA SENDING : 
    printf("Sending");

     Akene.send(&bytes_array_final,sizeof(bytes_array_final));
    wait(10);
    
    
}