GPS + SIGFOX

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

Committer:
ycardaillac
Date:
Tue Feb 14 16:27:44 2017 +0000
Revision:
1:3390618a8252
Parent:
0:8a9b5024eda9

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ycardaillac 0:8a9b5024eda9 1 #include "mbed.h"
ycardaillac 0:8a9b5024eda9 2 #include "Akene.h"
ycardaillac 1:3390618a8252 3 #include "SerialGPS.h"
ycardaillac 1:3390618a8252 4 #include "math.h"
ycardaillac 0:8a9b5024eda9 5
ycardaillac 1:3390618a8252 6 Serial pc(USBTX, USBRX); // tx, rx
ycardaillac 1:3390618a8252 7 SerialGPS gps(PA_9,PA_10); // tx, rx
ycardaillac 1:3390618a8252 8
ycardaillac 1:3390618a8252 9 void cbfunc_log(char *s) {
ycardaillac 1:3390618a8252 10
ycardaillac 1:3390618a8252 11 }
ycardaillac 1:3390618a8252 12
ycardaillac 1:3390618a8252 13 /**
ycardaillac 1:3390618a8252 14 * A callback function for GGA.
ycardaillac 1:3390618a8252 15 *
ycardaillac 1:3390618a8252 16 * GGA - Global Positioning System Fixed Data.
ycardaillac 1:3390618a8252 17 */
ycardaillac 1:3390618a8252 18 float latitude = 0.0;
ycardaillac 1:3390618a8252 19 float longitude = 0.0;
ycardaillac 1:3390618a8252 20 int flag = 0;
ycardaillac 1:3390618a8252 21 void cbfunc_gga(SerialGPS::gps_gga_t *p) {
ycardaillac 1:3390618a8252 22
ycardaillac 1:3390618a8252 23 pc.printf("%02d:%02d:%02d(P%d,S%d)\r\n", p->hour, p->min, p->sec, p->position_fix, p->satellites_used);
ycardaillac 1:3390618a8252 24
ycardaillac 1:3390618a8252 25 pc.printf("%c=%10.4f\r\n", p->ns, p->latitude);
ycardaillac 1:3390618a8252 26
ycardaillac 1:3390618a8252 27 pc.printf("%c=%10.4f\r\n", p->ew, p->longitude);
ycardaillac 1:3390618a8252 28
ycardaillac 1:3390618a8252 29 latitude = (float) p->latitude;
ycardaillac 1:3390618a8252 30 longitude = (float) p->longitude;
ycardaillac 1:3390618a8252 31 flag = 1;
ycardaillac 1:3390618a8252 32
ycardaillac 1:3390618a8252 33 }
ycardaillac 1:3390618a8252 34
ycardaillac 1:3390618a8252 35 void cbfunc_gsa(SerialGPS::gps_gsa_t *p) {
ycardaillac 1:3390618a8252 36
ycardaillac 1:3390618a8252 37 pc.printf("SEL:%c FIX:%d\r\n", p->selmode, p->fix);
ycardaillac 1:3390618a8252 38
ycardaillac 1:3390618a8252 39 }
ycardaillac 1:3390618a8252 40 void cbfunc_gsv(SerialGPS::gps_gsv_t *p) {
ycardaillac 0:8a9b5024eda9 41
ycardaillac 1:3390618a8252 42 pc.printf("Satellites:%2d\r\n", p->satcnt);
ycardaillac 1:3390618a8252 43
ycardaillac 1:3390618a8252 44 }
ycardaillac 1:3390618a8252 45 void cbfunc_rmc(SerialGPS::gps_rmc_t *p) {
ycardaillac 1:3390618a8252 46
ycardaillac 1:3390618a8252 47 pc.printf("%02d:%02d:%02d(%c)\r\n", p->hour, p->min, p->sec, p->status);
ycardaillac 1:3390618a8252 48
ycardaillac 1:3390618a8252 49 }
ycardaillac 1:3390618a8252 50
ycardaillac 1:3390618a8252 51 /**
ycardaillac 1:3390618a8252 52 * Entry point.
ycardaillac 1:3390618a8252 53 */
ycardaillac 1:3390618a8252 54
ycardaillac 1:3390618a8252 55 int main() {
ycardaillac 1:3390618a8252 56
ycardaillac 1:3390618a8252 57 pc.baud(9600);
ycardaillac 1:3390618a8252 58 pc.printf("beginn\n\r");
ycardaillac 1:3390618a8252 59 // GPS set
ycardaillac 1:3390618a8252 60 wait(0.5);
ycardaillac 1:3390618a8252 61 SerialGPS::gps_callback_t cb;
ycardaillac 1:3390618a8252 62 cb.cbfunc_log = cbfunc_log;
ycardaillac 1:3390618a8252 63 cb.cbfunc_gga = cbfunc_gga;
ycardaillac 1:3390618a8252 64 cb.cbfunc_gsa = cbfunc_gsa;
ycardaillac 1:3390618a8252 65 cb.cbfunc_gsv = cbfunc_gsv;
ycardaillac 1:3390618a8252 66 cb.cbfunc_rmc = cbfunc_rmc;
ycardaillac 1:3390618a8252 67 gps.attach(&cb);
ycardaillac 1:3390618a8252 68
ycardaillac 1:3390618a8252 69
ycardaillac 1:3390618a8252 70 //Wait for proper longitude and latitude
ycardaillac 1:3390618a8252 71 while( flag == 0) {
ycardaillac 1:3390618a8252 72 gps.processing();
ycardaillac 1:3390618a8252 73 //wait(0.5);
ycardaillac 1:3390618a8252 74 }
ycardaillac 0:8a9b5024eda9 75
ycardaillac 0:8a9b5024eda9 76
ycardaillac 1:3390618a8252 77 //sigfox
ycardaillac 0:8a9b5024eda9 78 char tmp[8];
ycardaillac 0:8a9b5024eda9 79 printf("\ntest envoie sigfox\n");
ycardaillac 0:8a9b5024eda9 80
ycardaillac 0:8a9b5024eda9 81 // Init modem
ycardaillac 0:8a9b5024eda9 82 Akene.begin();
ycardaillac 0:8a9b5024eda9 83 printf("begin ok");
ycardaillac 0:8a9b5024eda9 84
ycardaillac 1:3390618a8252 85
ycardaillac 1:3390618a8252 86 while (!Akene.isReady()) {
ycardaillac 1:3390618a8252 87 printf("Modem not ready");
ycardaillac 1:3390618a8252 88 wait(1);
ycardaillac 1:3390618a8252 89 }
ycardaillac 1:3390618a8252 90
ycardaillac 1:3390618a8252 91 // DATA ENCODING :
ycardaillac 0:8a9b5024eda9 92
ycardaillac 1:3390618a8252 93 // Mettre latitude à envoyer dans :
ycardaillac 1:3390618a8252 94 float float_variable0 = longitude;
ycardaillac 1:3390618a8252 95 char bytes_array0[4];
ycardaillac 1:3390618a8252 96 // Mettre longitude à envoyer dans :
ycardaillac 1:3390618a8252 97 float float_variable1 = latitude;
ycardaillac 1:3390618a8252 98 char bytes_array1[4];
ycardaillac 1:3390618a8252 99
ycardaillac 1:3390618a8252 100 *((float *)bytes_array0) = float_variable0;
ycardaillac 1:3390618a8252 101 *((float *)bytes_array1) = float_variable1;
ycardaillac 1:3390618a8252 102
ycardaillac 1:3390618a8252 103 char bytes_array_final [8];
ycardaillac 1:3390618a8252 104 int i;
ycardaillac 1:3390618a8252 105 for ( i =0;i<8;i++){
ycardaillac 1:3390618a8252 106 if (i<4){
ycardaillac 1:3390618a8252 107 bytes_array_final[i]=bytes_array0[i];
ycardaillac 1:3390618a8252 108
ycardaillac 0:8a9b5024eda9 109 }
ycardaillac 1:3390618a8252 110 else {
ycardaillac 1:3390618a8252 111 bytes_array_final[i]=bytes_array1[i-4];
ycardaillac 1:3390618a8252 112 }
ycardaillac 1:3390618a8252 113 }
ycardaillac 1:3390618a8252 114
ycardaillac 1:3390618a8252 115 // DATA SENDING :
ycardaillac 1:3390618a8252 116 printf("Sending");
ycardaillac 0:8a9b5024eda9 117
ycardaillac 1:3390618a8252 118 Akene.send(&bytes_array_final,sizeof(bytes_array_final));
ycardaillac 1:3390618a8252 119 wait(10);
ycardaillac 1:3390618a8252 120
ycardaillac 1:3390618a8252 121
ycardaillac 0:8a9b5024eda9 122 }