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
ConfigFileIO/ConfigFileIO.cpp@21:38c8544db6f4, 2017-11-22 (annotated)
- 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?
User | Revision | Line number | New 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 | } |