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.
Sensors.cpp
00001 #include "Sensors.h" 00002 00003 using namespace std; 00004 00005 void init_sensors(GPS_I2C &myGPS_I2C, LSM9DS1 &myIMU) 00006 { 00007 /* if (myGPS_I2C.begin() == false) printf("Module failed to respond. Please check wiring. \r\n"); 00008 else printf("GPS module found!\r\n"); 00009 00010 if (myIMU.begin() == false) printf("Failed to communicate with LSM9DS1.\r\n"); 00011 else printf("LSM9DS1 found.\r\n");*/ 00012 00013 myGPS_I2C.begin(); 00014 00015 myIMU.begin(); 00016 myIMU.calibrate(); 00017 } 00018 00019 void read_imu(LSM9DS1 &myIMU) 00020 { 00021 if (myIMU.gyroAvailable()) { 00022 myIMU.readGyro(); 00023 //printf("gyro: %d %d %d\n\r" , myIMU.gx, myIMU.gy, myIMU.gz); 00024 } 00025 00026 if (myIMU.magAvailable()) { 00027 myIMU.readMag(); 00028 //printf("mag: %d %d %d\n\r", myIMU.mx, myIMU.my, myIMU.mz); 00029 } 00030 00031 if (myIMU.tempAvailable()) { 00032 myIMU.readTemp(); 00033 //printf("temp: %d \n\r" , myIMU.temperature); 00034 } 00035 00036 if (myIMU.accelAvailable()) { 00037 myIMU.readAccel(); 00038 //printf("accel: %d %d %d\n\n\r", myIMU.ax, myIMU.ay, myIMU.az); 00039 } 00040 } 00041 00042 00043 void is_available(Is_sensor& is_sensor, LSM9DS1 &myIMU) 00044 { 00045 is_sensor.gyro = myIMU.gyroAvailable(); 00046 is_sensor.mag = myIMU.magAvailable(); 00047 is_sensor.temp = myIMU.tempAvailable(); 00048 is_sensor.accel = myIMU.accelAvailable(); 00049 printf("is_gyro : %d \r\n, is_mag : %d \r\n, is_temp : %d \r\n, is_accel : %d \r\n", is_sensor.gyro, is_sensor.mag, is_sensor.temp, is_sensor.accel); 00050 } 00051 00052 00053 void read_gps(GPS_I2C &myGPS_I2C, Gps_info &info) 00054 { 00055 char sentences[2048]; 00056 char rmc_sentence[2048]; 00057 int char_number = 0; 00058 00059 while (myGPS_I2C.available()) { //available() returns the number of new bytes available from the GPS module 00060 char incoming = myGPS_I2C.read(); //Read the latest byte from Qwiic GPS 00061 if(incoming == '$') { 00062 sentences[char_number] = '\n'; 00063 char_number++; 00064 sentences[char_number] = '\r'; 00065 00066 } 00067 sentences[char_number] = incoming; 00068 char_number++; 00069 } 00070 00071 search_word(sentences, rmc_sentence); 00072 00073 //GNRMC Parsing 00074 //Gps_info rmc; 00075 RMC_parsing(rmc_sentence, info); 00076 /* cout << "time = " << rmc.time << "\r\n"; 00077 cout << "status = " << rmc.status << "\r\n"; 00078 cout << "latitude = " << rmc.latitude << "\r\n"; 00079 cout << "N/S indicator = " << rmc.NS_indicator << "\r\n"; 00080 cout << "longitude = " << rmc.longitude << "\r\n"; 00081 cout << "E/W indicator = " << rmc.EW_indicator << "\r\n"; 00082 cout << "Speed = " << rmc.speed << "\r\n"; 00083 cout << "Course = " << rmc.course << "\r\n"; 00084 cout << "Date = " << rmc.date << "\r\n"; 00085 cout << "Mode = " << rmc.mode << "\r\n";*/ 00086 } 00087 00088 00089 void search_word(char sentences[MAX_PACKET_SIZE] , char one_sentence[MAX_PACKET_SIZE]) 00090 { 00091 char *s = strstr(sentences, "$GNRMC"); 00092 00093 if (s != NULL) { // if successful then s now points at "$GNRMC" 00094 //printf("Found string at index = %d\r\n", s - sentences); 00095 strcpy(one_sentence, s); 00096 /* printf("RMC Sentence : \r\n"); 00097 printf("%s", one_sentence); 00098 printf("\r\n");*/ 00099 } // index of "sentence_to_find" in buff can be found by pointer subtraction 00100 else { 00101 printf("String not found\r\n"); // `strstr` returns NULL if search string not found 00102 } 00103 } 00104 00105 void RMC_parsing(char *rmc_sentence, Gps_info &rmc) 00106 { 00107 size_t rmc_field=0; 00108 rmc.time.clear(); 00109 rmc.latitude.clear(); 00110 rmc.longitude.clear(); 00111 rmc.speed.clear(); 00112 rmc.course.clear(); 00113 rmc.date.clear(); 00114 00115 for(size_t i=0; i < MAX_PACKET_SIZE; i++) { 00116 while(rmc_sentence[i] == ',') { 00117 rmc_field++; 00118 i++; 00119 } 00120 00121 switch (rmc_field) { 00122 case 1: 00123 rmc.time.push_back(rmc_sentence[i]); 00124 break; 00125 00126 case 2: 00127 rmc.status = rmc_sentence[i]; 00128 break; 00129 00130 case 3: 00131 rmc.latitude.push_back(rmc_sentence[i]); 00132 break; 00133 00134 case 4: 00135 rmc.NS_indicator = rmc_sentence[i]; 00136 break; 00137 00138 case 5: 00139 rmc.longitude.push_back(rmc_sentence[i]); 00140 break; 00141 00142 case 6: 00143 rmc.EW_indicator = rmc_sentence[i]; 00144 break; 00145 00146 case 7: 00147 rmc.speed.push_back(rmc_sentence[i]); 00148 break; 00149 00150 case 8: 00151 rmc.course.push_back(rmc_sentence[i]); 00152 break; 00153 00154 case 9: 00155 rmc.date.push_back(rmc_sentence[i]); 00156 break; 00157 00158 case 10: 00159 rmc.mode = rmc_sentence[i]; 00160 break; 00161 00162 default: 00163 break; 00164 } 00165 } 00166 }
Generated on Mon Jul 18 2022 01:09:19 by
1.7.2