![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
GNSS1A1 polytech grenoble
main.cpp
- Committer:
- nirnakern
- Date:
- 2017-10-23
- Revision:
- 0:4e088cbb2dbf
- Child:
- 1:2f8deb2a7fe1
File content as of revision 0:4e088cbb2dbf:
#include "mbed.h" #include "rtos/rtos.h" #include "Teseo-LIV3F.h" #include <cstdlib> #include <vector> #include "XNucleoIKS01A2.h" /*cose per gps*/ static Thread t1; static Thread t2; static Mutex data_access; static Timer system_timer; static Serial usb_serial(USBTX, USBRX, 9600); static Serial *serial_debug= &usb_serial; static Teseo_LIV3F Teseo(D8, D13, D6, PE_7, PE_8, &usb_serial); struct gps_coordinate{ float lat; char lat_cardinal; float longitud; char long_cardinal; bool valid; }; gps_coordinate myPosition; /*cose per sensori*/ static Thread t3; static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5); /* Retrieve the composing elements of the expansion board */ static LSM303AGRMagSensor *magnetometer = mems_expansion_board->magnetometer; static HTS221Sensor *hum_temp = mems_expansion_board->ht_sensor; static LPS22HBSensor *press_temp = mems_expansion_board->pt_sensor; static LSM6DSLSensor *acc_gyro = mems_expansion_board->acc_gyro; static LSM303AGRAccSensor *accelerometer = mems_expansion_board->accelerometer; void f1 (){ enum nmea_msg_id id; Teseo.Reset(serial_debug); Teseo.startListener(serial_debug); while(1) { osEvent evt = Teseo.queue.get(); if (evt.status == osEventMessage) { struct teseo_msg *message = (struct teseo_msg *)evt.value.p; if (message->len){ id = Teseo.MsgDetect(message->buf, message->len, serial_debug); } if (id==1){ //da qui converto il messaggio in coordinate// data_access.lock(); vector<char> pos; //latitudine // printf ("latitudine="); int cursor; for (int i=7;;i++){ cursor=i; if (message->buf[i] == ',') break; pos.push_back(message->buf[i]); } //ma quanto è cool? conversione da vector ad array e poi a float myPosition.lat= atof (&pos[0]); // printf ("%f",myPosition.lat); // printf (" "); myPosition.lat_cardinal= message->buf[cursor+1]; // printf ("%c ",myPosition.lat_cardinal); pos.clear(); // printf ("longitudine="); for (int i=cursor+3;;i++){ cursor=i; if (message->buf[i] == ',') break; pos.push_back(message->buf[i]); } myPosition.longitud= atof (&pos[0]); // printf ("%f",myPosition.longitud); // printf (" "); myPosition.long_cardinal= message->buf[cursor+1]; // printf ("%c ",myPosition.long_cardinal); for (int i=cursor+3;;i++){ cursor=i; if (message->buf[i] == 'A' ){ myPosition.valid=true; break; }else if (message->buf[i] == 'V' ) { myPosition.valid=false; break; } } if (myPosition.valid==true){ // printf ("Valid"); } if (myPosition.valid==false){ //printf ("Not Valid"); } data_access.unlock(); // printf ("\n\r"); } Teseo.mpool.free(message); } } } void f2 (){ Thread::wait (1000); Thread::wait (2000); while (true){ Thread::wait (3000); data_access.lock(); printf ("lat:%f %c, lon:%f %c, %d\n\r",myPosition.lat,myPosition.lat_cardinal, myPosition.longitud, myPosition.long_cardinal, myPosition.valid ); data_access.unlock(); } } void accgyro_thread(){ uint8_t id; float value1, value2; char buffer1[32], buffer2[32]; int32_t axes[3]; int32_t axesOld[3]; float odr =208.0f; /* Enable all sensors */ accelerometer->enable(); acc_gyro->enable_x(); acc_gyro->enable_g(); acc_gyro->set_g_odr (odr); while (true){ Thread::wait (5000); acc_gyro->get_g_axes(axes); printf("LSM6DSL [gyro/mdps]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); acc_gyro->get_x_axes(axes); printf("LSM6DSL [acc/mg]: %6ld, %6ld, %6ld\r\n", axes[0], axes[1], axes[2]); } } int main() { t1.start(f1); t2.start (f2); t3.start (accgyro_thread); }