most functionality to splashdwon, find neutral and start mission. short timeouts still in code for testing, will adjust to go directly to sit_idle after splashdown

Dependencies:   mbed MODSERIAL FATFileSystem

Committer:
tnhnrl
Date:
Wed Nov 22 23:04:11 2017 +0000
Revision:
21:38c8544db6f4
Parent:
Config_File_IO/ConfigFileIO.cpp@17:7c16b5671d0e
Child:
38:83d06c294807
A few large changes and a few small changes.  Works on the bench.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tnhnrl 17:7c16b5671d0e 1 #include "ConfigFileIO.hpp"
tnhnrl 17:7c16b5671d0e 2 #include "StaticDefs.hpp"
tnhnrl 17:7c16b5671d0e 3
tnhnrl 21:38c8544db6f4 4 //configuration file io, both to read, set, and save
tnhnrl 17:7c16b5671d0e 5
tnhnrl 17:7c16b5671d0e 6 ConfigFileIO::ConfigFileIO() {
tnhnrl 17:7c16b5671d0e 7 }
tnhnrl 17:7c16b5671d0e 8
tnhnrl 21:38c8544db6f4 9 void ConfigFileIO::savePitchData(float p_gain, float i_gain, float d_gain, int batt_zeroOffset) {
tnhnrl 21:38c8544db6f4 10 ConfigFile write_pitch_txt; //write to the config file
tnhnrl 21:38c8544db6f4 11
tnhnrl 21:38c8544db6f4 12 char PGain_buffer[128];
tnhnrl 21:38c8544db6f4 13 sprintf(PGain_buffer,"# pitch outer loop parameters\n\n#Gains\nPGain");
tnhnrl 21:38c8544db6f4 14
tnhnrl 21:38c8544db6f4 15 char string_pgain[128];
tnhnrl 21:38c8544db6f4 16 sprintf(string_pgain, "%f", p_gain);
tnhnrl 21:38c8544db6f4 17 write_pitch_txt.setValue(PGain_buffer, string_pgain);
tnhnrl 21:38c8544db6f4 18
tnhnrl 21:38c8544db6f4 19 char string_igain[128];
tnhnrl 21:38c8544db6f4 20 sprintf(string_igain, "%f", i_gain);
tnhnrl 21:38c8544db6f4 21 write_pitch_txt.setValue("IGain", string_igain);
tnhnrl 17:7c16b5671d0e 22
tnhnrl 21:38c8544db6f4 23 char string_dgain[128];
tnhnrl 21:38c8544db6f4 24 sprintf(string_dgain, "%f", d_gain);
tnhnrl 21:38c8544db6f4 25 write_pitch_txt.setValue("DGain", string_dgain);
tnhnrl 21:38c8544db6f4 26
tnhnrl 21:38c8544db6f4 27 write_pitch_txt.setValue("\n#Pitch sensor filter parameters\nfilterWn", "6.0");
tnhnrl 21:38c8544db6f4 28 write_pitch_txt.setValue("deadband", "0.5");
tnhnrl 17:7c16b5671d0e 29
tnhnrl 21:38c8544db6f4 30 char string_zeroOffset[128];
tnhnrl 21:38c8544db6f4 31 sprintf(string_zeroOffset, "%d", batt_zeroOffset);
tnhnrl 21:38c8544db6f4 32 //bce setting was 41 mm during LASR experiments
tnhnrl 21:38c8544db6f4 33 write_pitch_txt.setValue("\n#Offset for neutral (default: 41)\nzeroOffset", string_zeroOffset);
tnhnrl 21:38c8544db6f4 34
tnhnrl 21:38c8544db6f4 35 //SAVE THE DATA!
tnhnrl 21:38c8544db6f4 36 pc().printf("Saving Buoyancy Engine Neutral Buoyancy Positions!");
tnhnrl 21:38c8544db6f4 37
tnhnrl 21:38c8544db6f4 38 if (!write_pitch_txt.write("/local/pitch.txt")) {
tnhnrl 21:38c8544db6f4 39 pc().printf("\n\rERROR: (SAVE)Failure to write depth.txt file.");
tnhnrl 17:7c16b5671d0e 40 }
tnhnrl 17:7c16b5671d0e 41 else {
tnhnrl 21:38c8544db6f4 42 pc().printf("\n\rFile pitch.txt successful written.\n\r");
tnhnrl 21:38c8544db6f4 43 }
tnhnrl 21:38c8544db6f4 44 }
tnhnrl 21:38c8544db6f4 45
tnhnrl 21:38c8544db6f4 46 void ConfigFileIO::saveDepthData(float p_gain, float i_gain, float d_gain, int bce_zeroOffset) {
tnhnrl 21:38c8544db6f4 47 ConfigFile write_depth_txt; //write to the config file
tnhnrl 21:38c8544db6f4 48
tnhnrl 21:38c8544db6f4 49 char PGain_buffer[128];
tnhnrl 21:38c8544db6f4 50 sprintf(PGain_buffer,"# depth outer loop parameters\n\n#Gains\nPGain");
tnhnrl 21:38c8544db6f4 51
tnhnrl 21:38c8544db6f4 52 char string_pgain[128];
tnhnrl 21:38c8544db6f4 53 sprintf(string_pgain, "%f", p_gain);
tnhnrl 21:38c8544db6f4 54 write_depth_txt.setValue(PGain_buffer, string_pgain);
tnhnrl 21:38c8544db6f4 55
tnhnrl 21:38c8544db6f4 56 char string_igain[128];
tnhnrl 21:38c8544db6f4 57 sprintf(string_igain, "%f", i_gain);
tnhnrl 21:38c8544db6f4 58 write_depth_txt.setValue("IGain", string_igain);
tnhnrl 17:7c16b5671d0e 59
tnhnrl 21:38c8544db6f4 60 char string_dgain[128];
tnhnrl 21:38c8544db6f4 61 sprintf(string_dgain, "%f", d_gain);
tnhnrl 21:38c8544db6f4 62 write_depth_txt.setValue("DGain", string_dgain);
tnhnrl 21:38c8544db6f4 63
tnhnrl 21:38c8544db6f4 64 write_depth_txt.setValue("\n#Depth sensor filter parameters\nfilterWn", "6.0");
tnhnrl 21:38c8544db6f4 65 write_depth_txt.setValue("deadband", "0.5");
tnhnrl 17:7c16b5671d0e 66
tnhnrl 21:38c8544db6f4 67 char string_zeroOffset[128];
tnhnrl 21:38c8544db6f4 68 sprintf(string_zeroOffset, "%d", bce_zeroOffset);
tnhnrl 21:38c8544db6f4 69 //bce setting was 240 mm during LASR experiments
tnhnrl 21:38c8544db6f4 70 write_depth_txt.setValue("\n#Offset for neutral (default: 240)\nzeroOffset", string_zeroOffset);
tnhnrl 21:38c8544db6f4 71
tnhnrl 21:38c8544db6f4 72 //SAVE THE DATA!
tnhnrl 21:38c8544db6f4 73 pc().printf("Saving Buoyancy Engine Neutral Buoyancy Positions!");
tnhnrl 21:38c8544db6f4 74
tnhnrl 21:38c8544db6f4 75 if (!write_depth_txt.write("/local/depth.txt")) {
tnhnrl 21:38c8544db6f4 76 pc().printf("\n\rERROR: (SAVE)Failure to write depth.txt file.");
tnhnrl 17:7c16b5671d0e 77 }
tnhnrl 17:7c16b5671d0e 78 else {
tnhnrl 21:38c8544db6f4 79 pc().printf("\n\rFile depth.txt successful written.\n\r");
tnhnrl 17:7c16b5671d0e 80 }
tnhnrl 17:7c16b5671d0e 81 }
tnhnrl 17:7c16b5671d0e 82
tnhnrl 21:38c8544db6f4 83 int ConfigFileIO::load_BCE_config() {
tnhnrl 21:38c8544db6f4 84 ConfigFile cfg;
tnhnrl 21:38c8544db6f4 85 int count = 0;
tnhnrl 21:38c8544db6f4 86 if (!cfg.read("/local/bce.txt")) {
tnhnrl 21:38c8544db6f4 87 error("File Read Error");
tnhnrl 21:38c8544db6f4 88 }
tnhnrl 21:38c8544db6f4 89 char value[BUFSIZ];
tnhnrl 21:38c8544db6f4 90
tnhnrl 21:38c8544db6f4 91 if (cfg.getValue("PGain", &value[0] , sizeof(value))) {
tnhnrl 21:38c8544db6f4 92 bce().setControllerP(atof(value));
tnhnrl 21:38c8544db6f4 93 count++;
tnhnrl 21:38c8544db6f4 94 }
tnhnrl 21:38c8544db6f4 95 if (cfg.getValue("IGain", &value[0] ,sizeof(value))) {
tnhnrl 21:38c8544db6f4 96 bce().setControllerI(atof(value));
tnhnrl 21:38c8544db6f4 97 count++;
tnhnrl 21:38c8544db6f4 98 }
tnhnrl 21:38c8544db6f4 99 if (cfg.getValue("DGain", &value[0] , sizeof(value))) {
tnhnrl 21:38c8544db6f4 100 bce().setControllerD(atof(value));
tnhnrl 21:38c8544db6f4 101 count++;
tnhnrl 17:7c16b5671d0e 102 }
tnhnrl 21:38c8544db6f4 103 if (cfg.getValue("zeroCounts", &value[0],sizeof(value))) {
tnhnrl 21:38c8544db6f4 104 bce().setZeroCounts(atoi(value));
tnhnrl 21:38c8544db6f4 105 count++;
tnhnrl 21:38c8544db6f4 106 }
tnhnrl 21:38c8544db6f4 107 if (cfg.getValue("PistonTravelLimit", &value[0], sizeof(value))) {
tnhnrl 21:38c8544db6f4 108 bce().setTravelLimit(atof(value));
tnhnrl 21:38c8544db6f4 109 count++;
tnhnrl 21:38c8544db6f4 110 }
tnhnrl 21:38c8544db6f4 111 if (cfg.getValue("slope", &value[0], sizeof(value))) {
tnhnrl 21:38c8544db6f4 112 bce().setPotSlope(atof(value));
tnhnrl 21:38c8544db6f4 113 count++;
tnhnrl 21:38c8544db6f4 114 }
tnhnrl 21:38c8544db6f4 115 if (cfg.getValue("filterWn", &value[0], sizeof(value))) {
tnhnrl 21:38c8544db6f4 116 bce().setFilterFrequency(atof(value));
tnhnrl 21:38c8544db6f4 117 count++;
tnhnrl 21:38c8544db6f4 118 }
tnhnrl 21:38c8544db6f4 119 if (cfg.getValue("deadband", &value[0], sizeof(value))) {
tnhnrl 21:38c8544db6f4 120 bce().setDeadband(atof(value));
tnhnrl 21:38c8544db6f4 121 count++;
tnhnrl 21:38c8544db6f4 122 }
tnhnrl 17:7c16b5671d0e 123
tnhnrl 21:38c8544db6f4 124 return count;
tnhnrl 17:7c16b5671d0e 125 }
tnhnrl 17:7c16b5671d0e 126
tnhnrl 21:38c8544db6f4 127 int ConfigFileIO::load_BATT_config() {
tnhnrl 21:38c8544db6f4 128 ConfigFile cfg;
tnhnrl 21:38c8544db6f4 129 int count = 0;
tnhnrl 21:38c8544db6f4 130 if (!cfg.read("/local/batt.txt")) {
tnhnrl 21:38c8544db6f4 131 error("File Read Error");
tnhnrl 21:38c8544db6f4 132 }
tnhnrl 21:38c8544db6f4 133 char value[BUFSIZ];
tnhnrl 21:38c8544db6f4 134
tnhnrl 21:38c8544db6f4 135
tnhnrl 21:38c8544db6f4 136 if (cfg.getValue("PGain", &value[0] , sizeof(value))) {
tnhnrl 21:38c8544db6f4 137 batt().setControllerP(atof(value));
tnhnrl 21:38c8544db6f4 138 count++;
tnhnrl 21:38c8544db6f4 139 }
tnhnrl 21:38c8544db6f4 140 if (cfg.getValue("IGain", &value[0] ,sizeof(value))) {
tnhnrl 21:38c8544db6f4 141 batt().setControllerI(atof(value));
tnhnrl 21:38c8544db6f4 142 count++;
tnhnrl 21:38c8544db6f4 143 }
tnhnrl 21:38c8544db6f4 144 if (cfg.getValue("DGain", &value[0] , sizeof(value))) {
tnhnrl 21:38c8544db6f4 145 batt().setControllerD(atof(value));
tnhnrl 21:38c8544db6f4 146 count++;
tnhnrl 21:38c8544db6f4 147 }
tnhnrl 21:38c8544db6f4 148 if (cfg.getValue("zeroCounts", &value[0],sizeof(value))) {
tnhnrl 21:38c8544db6f4 149 batt().setZeroCounts(atoi(value));
tnhnrl 21:38c8544db6f4 150 count++;
tnhnrl 21:38c8544db6f4 151 }
tnhnrl 21:38c8544db6f4 152 if (cfg.getValue("PistonTravelLimit", &value[0], sizeof(value))) {
tnhnrl 21:38c8544db6f4 153 batt().setTravelLimit(atof(value));
tnhnrl 21:38c8544db6f4 154 count++;
tnhnrl 21:38c8544db6f4 155 }
tnhnrl 21:38c8544db6f4 156 if (cfg.getValue("slope", &value[0], sizeof(value))) {
tnhnrl 21:38c8544db6f4 157 batt().setPotSlope(atof(value));
tnhnrl 21:38c8544db6f4 158 count++;
tnhnrl 21:38c8544db6f4 159 }
tnhnrl 21:38c8544db6f4 160 if (cfg.getValue("filterWn", &value[0], sizeof(value))) {
tnhnrl 21:38c8544db6f4 161 batt().setFilterFrequency(atof(value));
tnhnrl 21:38c8544db6f4 162 count++;
tnhnrl 21:38c8544db6f4 163 }
tnhnrl 21:38c8544db6f4 164 if (cfg.getValue("deadband", &value[0], sizeof(value))) {
tnhnrl 21:38c8544db6f4 165 batt().setDeadband(atof(value));
tnhnrl 21:38c8544db6f4 166 count++;
tnhnrl 21:38c8544db6f4 167 }
tnhnrl 21:38c8544db6f4 168
tnhnrl 21:38c8544db6f4 169 return count;
tnhnrl 21:38c8544db6f4 170 }
tnhnrl 17:7c16b5671d0e 171
tnhnrl 21:38c8544db6f4 172 int ConfigFileIO::load_DEPTH_config() {
tnhnrl 21:38c8544db6f4 173 ConfigFile cfg;
tnhnrl 21:38c8544db6f4 174 int count = 0;
tnhnrl 21:38c8544db6f4 175 if (!cfg.read("/local/depth.txt")) {
tnhnrl 21:38c8544db6f4 176 error("File Read Error");
tnhnrl 21:38c8544db6f4 177 }
tnhnrl 21:38c8544db6f4 178 char value[BUFSIZ];
tnhnrl 21:38c8544db6f4 179
tnhnrl 21:38c8544db6f4 180 if (cfg.getValue("PGain", &value[0] , sizeof(value))) {
tnhnrl 21:38c8544db6f4 181 depthLoop().setControllerP(atof(value));
tnhnrl 21:38c8544db6f4 182 count++;
tnhnrl 21:38c8544db6f4 183 }
tnhnrl 21:38c8544db6f4 184 if (cfg.getValue("IGain", &value[0] ,sizeof(value))) {
tnhnrl 21:38c8544db6f4 185 depthLoop().setControllerI(atof(value));
tnhnrl 21:38c8544db6f4 186 count++;
tnhnrl 21:38c8544db6f4 187 }
tnhnrl 21:38c8544db6f4 188 if (cfg.getValue("DGain", &value[0] , sizeof(value))) {
tnhnrl 21:38c8544db6f4 189 depthLoop().setControllerD(atof(value));
tnhnrl 21:38c8544db6f4 190 count++;
tnhnrl 21:38c8544db6f4 191 }
tnhnrl 21:38c8544db6f4 192 if (cfg.getValue("filterWn", &value[0], sizeof(value))) {
tnhnrl 21:38c8544db6f4 193 depthLoop().setFilterFrequency(atof(value));
tnhnrl 21:38c8544db6f4 194 count++;
tnhnrl 21:38c8544db6f4 195 }
tnhnrl 21:38c8544db6f4 196 if (cfg.getValue("deadband", &value[0], sizeof(value))) {
tnhnrl 21:38c8544db6f4 197 depthLoop().setDeadband(atof(value));
tnhnrl 21:38c8544db6f4 198 count++;
tnhnrl 21:38c8544db6f4 199 }
tnhnrl 21:38c8544db6f4 200 if (cfg.getValue("zeroOffset", &value[0], sizeof(value))) {
tnhnrl 21:38c8544db6f4 201 depthLoop().setOutputOffset(atof(value));
tnhnrl 21:38c8544db6f4 202 count++;
tnhnrl 21:38c8544db6f4 203 }
tnhnrl 21:38c8544db6f4 204 return count;
tnhnrl 21:38c8544db6f4 205 }
tnhnrl 17:7c16b5671d0e 206
tnhnrl 21:38c8544db6f4 207 int ConfigFileIO::load_PITCH_config() {
tnhnrl 21:38c8544db6f4 208 ConfigFile cfg;
tnhnrl 21:38c8544db6f4 209 int count = 0;
tnhnrl 21:38c8544db6f4 210 if (!cfg.read("/local/pitch.txt")){
tnhnrl 21:38c8544db6f4 211 error("File Read Error");
tnhnrl 21:38c8544db6f4 212 }
tnhnrl 21:38c8544db6f4 213 char value[BUFSIZ];
tnhnrl 21:38c8544db6f4 214
tnhnrl 21:38c8544db6f4 215 if (cfg.getValue("PGain", &value[0] , sizeof(value))) {
tnhnrl 21:38c8544db6f4 216 pitchLoop().setControllerP(atof(value));
tnhnrl 21:38c8544db6f4 217 count++;
tnhnrl 21:38c8544db6f4 218 }
tnhnrl 21:38c8544db6f4 219 if (cfg.getValue("IGain", &value[0] ,sizeof(value))) {
tnhnrl 21:38c8544db6f4 220 pitchLoop().setControllerI(atof(value));
tnhnrl 21:38c8544db6f4 221 count++;
tnhnrl 21:38c8544db6f4 222 }
tnhnrl 21:38c8544db6f4 223 if (cfg.getValue("DGain", &value[0] , sizeof(value))) {
tnhnrl 21:38c8544db6f4 224 pitchLoop().setControllerD(atof(value));
tnhnrl 21:38c8544db6f4 225 count++;
tnhnrl 21:38c8544db6f4 226 }
tnhnrl 21:38c8544db6f4 227 if (cfg.getValue("filterWn", &value[0], sizeof(value))) {
tnhnrl 21:38c8544db6f4 228 pitchLoop().setFilterFrequency(atof(value));
tnhnrl 21:38c8544db6f4 229 count++;
tnhnrl 21:38c8544db6f4 230 }
tnhnrl 21:38c8544db6f4 231 if (cfg.getValue("deadband", &value[0], sizeof(value))) {
tnhnrl 21:38c8544db6f4 232 pitchLoop().setDeadband(atof(value));
tnhnrl 21:38c8544db6f4 233 count++;
tnhnrl 21:38c8544db6f4 234 }
tnhnrl 21:38c8544db6f4 235
tnhnrl 21:38c8544db6f4 236 if (cfg.getValue("zeroOffset", &value[0], sizeof(value))) {
tnhnrl 21:38c8544db6f4 237 pitchLoop().setOutputOffset(atof(value));
tnhnrl 21:38c8544db6f4 238 count++;
tnhnrl 21:38c8544db6f4 239 }
tnhnrl 21:38c8544db6f4 240 return count;
tnhnrl 21:38c8544db6f4 241 }