Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed X_NUCLEO_IKS01A2 mbed-rtos
Dependents: ros_button_2021 test test2
Revision 1:54d03a42740a, committed 2021-06-12
- Comitter:
- howanglam3
- Date:
- Sat Jun 12 16:01:51 2021 +0000
- Parent:
- 0:4e088cbb2dbf
- Commit message:
- use as library
Changed in this revision
| main.cpp | Show diff for this revision Revisions of this file |
| main.txt | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Mon Oct 23 07:11:35 2017 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,237 +0,0 @@
-#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);
-
-
-
-
-}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.txt Sat Jun 12 16:01:51 2021 +0000
@@ -0,0 +1,237 @@
+#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);
+
+
+
+
+}