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.
Dependents: Teach_demo Easyfit
teach.cpp@0:c203f964c949, 2020-04-28 (annotated)
- Committer:
- MarcelPortmann
- Date:
- Tue Apr 28 12:52:01 2020 +0000
- Revision:
- 0:c203f964c949
- Child:
- 2:a6d12e229ad3
teach as library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
MarcelPortmann | 0:c203f964c949 | 1 | /* |
MarcelPortmann | 0:c203f964c949 | 2 | Hear cold stand a discription |
MarcelPortmann | 0:c203f964c949 | 3 | |
MarcelPortmann | 0:c203f964c949 | 4 | */ |
MarcelPortmann | 0:c203f964c949 | 5 | |
MarcelPortmann | 0:c203f964c949 | 6 | |
MarcelPortmann | 0:c203f964c949 | 7 | #include "teach.h" |
MarcelPortmann | 0:c203f964c949 | 8 | |
MarcelPortmann | 0:c203f964c949 | 9 | |
MarcelPortmann | 0:c203f964c949 | 10 | teach::teach(void) // constructor |
MarcelPortmann | 0:c203f964c949 | 11 | { |
MarcelPortmann | 0:c203f964c949 | 12 | |
MarcelPortmann | 0:c203f964c949 | 13 | lowcount = 0, highcount = 0; //sets startvalue |
MarcelPortmann | 0:c203f964c949 | 14 | data_vec.clear(); |
MarcelPortmann | 0:c203f964c949 | 15 | } |
MarcelPortmann | 0:c203f964c949 | 16 | |
MarcelPortmann | 0:c203f964c949 | 17 | void teach::setstart(float posx,float posy,float posz, int time) |
MarcelPortmann | 0:c203f964c949 | 18 | { |
MarcelPortmann | 0:c203f964c949 | 19 | lowcount = 0; |
MarcelPortmann | 0:c203f964c949 | 20 | |
MarcelPortmann | 0:c203f964c949 | 21 | temp.start = true; |
MarcelPortmann | 0:c203f964c949 | 22 | temp.end = false; |
MarcelPortmann | 0:c203f964c949 | 23 | temp.hi = highcount; |
MarcelPortmann | 0:c203f964c949 | 24 | temp.low = lowcount; |
MarcelPortmann | 0:c203f964c949 | 25 | temp.time = time; |
MarcelPortmann | 0:c203f964c949 | 26 | temp.pos[0] = posx; |
MarcelPortmann | 0:c203f964c949 | 27 | temp.pos[1] = posy; |
MarcelPortmann | 0:c203f964c949 | 28 | temp.pos[2] = posz; |
MarcelPortmann | 0:c203f964c949 | 29 | data_vec.push_back(temp); |
MarcelPortmann | 0:c203f964c949 | 30 | |
MarcelPortmann | 0:c203f964c949 | 31 | lowcount++; |
MarcelPortmann | 0:c203f964c949 | 32 | highcount++; |
MarcelPortmann | 0:c203f964c949 | 33 | |
MarcelPortmann | 0:c203f964c949 | 34 | contr_sice(); |
MarcelPortmann | 0:c203f964c949 | 35 | } |
MarcelPortmann | 0:c203f964c949 | 36 | |
MarcelPortmann | 0:c203f964c949 | 37 | void teach::setpoint(float posx,float posy,float posz, int time) |
MarcelPortmann | 0:c203f964c949 | 38 | { |
MarcelPortmann | 0:c203f964c949 | 39 | lowcount++; |
MarcelPortmann | 0:c203f964c949 | 40 | |
MarcelPortmann | 0:c203f964c949 | 41 | temp.start = false; |
MarcelPortmann | 0:c203f964c949 | 42 | temp.end = false; |
MarcelPortmann | 0:c203f964c949 | 43 | temp.hi = highcount; |
MarcelPortmann | 0:c203f964c949 | 44 | temp.low = lowcount; |
MarcelPortmann | 0:c203f964c949 | 45 | temp.time = time; |
MarcelPortmann | 0:c203f964c949 | 46 | temp.pos[0] = posx; |
MarcelPortmann | 0:c203f964c949 | 47 | temp.pos[1] = posy; |
MarcelPortmann | 0:c203f964c949 | 48 | temp.pos[2] = posz; |
MarcelPortmann | 0:c203f964c949 | 49 | data_vec.push_back(temp); |
MarcelPortmann | 0:c203f964c949 | 50 | |
MarcelPortmann | 0:c203f964c949 | 51 | contr_sice(); |
MarcelPortmann | 0:c203f964c949 | 52 | } |
MarcelPortmann | 0:c203f964c949 | 53 | |
MarcelPortmann | 0:c203f964c949 | 54 | void teach::setend(float posx,float posy,float posz, int time) |
MarcelPortmann | 0:c203f964c949 | 55 | { |
MarcelPortmann | 0:c203f964c949 | 56 | temp.start = false; |
MarcelPortmann | 0:c203f964c949 | 57 | temp.end = true; |
MarcelPortmann | 0:c203f964c949 | 58 | temp.hi = highcount; |
MarcelPortmann | 0:c203f964c949 | 59 | temp.low = lowcount; |
MarcelPortmann | 0:c203f964c949 | 60 | temp.time = time; |
MarcelPortmann | 0:c203f964c949 | 61 | temp.pos[0] = posx; |
MarcelPortmann | 0:c203f964c949 | 62 | temp.pos[1] = posy; |
MarcelPortmann | 0:c203f964c949 | 63 | temp.pos[2] = posz; |
MarcelPortmann | 0:c203f964c949 | 64 | data_vec.push_back(temp); |
MarcelPortmann | 0:c203f964c949 | 65 | |
MarcelPortmann | 0:c203f964c949 | 66 | lowcount = 0; |
MarcelPortmann | 0:c203f964c949 | 67 | highcount++; |
MarcelPortmann | 0:c203f964c949 | 68 | |
MarcelPortmann | 0:c203f964c949 | 69 | contr_sice(); |
MarcelPortmann | 0:c203f964c949 | 70 | } |
MarcelPortmann | 0:c203f964c949 | 71 | |
MarcelPortmann | 0:c203f964c949 | 72 | void teach::save(string name) |
MarcelPortmann | 0:c203f964c949 | 73 | { |
MarcelPortmann | 0:c203f964c949 | 74 | tr_name = name; |
MarcelPortmann | 0:c203f964c949 | 75 | store.ErstellenDatenblock(tr_name); |
MarcelPortmann | 0:c203f964c949 | 76 | process(); |
MarcelPortmann | 0:c203f964c949 | 77 | |
MarcelPortmann | 0:c203f964c949 | 78 | } |
MarcelPortmann | 0:c203f964c949 | 79 | |
MarcelPortmann | 0:c203f964c949 | 80 | void teach::stop(void) |
MarcelPortmann | 0:c203f964c949 | 81 | { |
MarcelPortmann | 0:c203f964c949 | 82 | data_vec.clear(); |
MarcelPortmann | 0:c203f964c949 | 83 | highcount = 0; lowcount = 0; |
MarcelPortmann | 0:c203f964c949 | 84 | // memory lösch funktion; |
MarcelPortmann | 0:c203f964c949 | 85 | temp.start = false; |
MarcelPortmann | 0:c203f964c949 | 86 | temp.end = false; |
MarcelPortmann | 0:c203f964c949 | 87 | temp.hi = 0; |
MarcelPortmann | 0:c203f964c949 | 88 | temp.low = 0; |
MarcelPortmann | 0:c203f964c949 | 89 | temp.time = 0; |
MarcelPortmann | 0:c203f964c949 | 90 | temp.pos[0] = 0; |
MarcelPortmann | 0:c203f964c949 | 91 | temp.pos[1] = 0; |
MarcelPortmann | 0:c203f964c949 | 92 | temp.pos[2] = 0; |
MarcelPortmann | 0:c203f964c949 | 93 | |
MarcelPortmann | 0:c203f964c949 | 94 | } |
MarcelPortmann | 0:c203f964c949 | 95 | |
MarcelPortmann | 0:c203f964c949 | 96 | void teach::process(void) |
MarcelPortmann | 0:c203f964c949 | 97 | { |
MarcelPortmann | 0:c203f964c949 | 98 | int i=0, k=0, p=0, count=0,forward = 100000, backward = 100000; |
MarcelPortmann | 0:c203f964c949 | 99 | float tempsum[3] = {}; |
MarcelPortmann | 0:c203f964c949 | 100 | float empty[3] = {}; |
MarcelPortmann | 0:c203f964c949 | 101 | int max = data_vec.size(); |
MarcelPortmann | 0:c203f964c949 | 102 | |
MarcelPortmann | 0:c203f964c949 | 103 | for(i=0; i<=max; i++) { // avrage starting Point |
MarcelPortmann | 0:c203f964c949 | 104 | if(data_vec[i].start) { |
MarcelPortmann | 0:c203f964c949 | 105 | tempsum[0] += data_vec[i].pos[0]; |
MarcelPortmann | 0:c203f964c949 | 106 | tempsum[1] += data_vec[i].pos[1]; |
MarcelPortmann | 0:c203f964c949 | 107 | tempsum[2] += data_vec[i].pos[2]; |
MarcelPortmann | 0:c203f964c949 | 108 | k++; |
MarcelPortmann | 0:c203f964c949 | 109 | } |
MarcelPortmann | 0:c203f964c949 | 110 | } |
MarcelPortmann | 0:c203f964c949 | 111 | tempsum[0] = tempsum[0]/k; |
MarcelPortmann | 0:c203f964c949 | 112 | tempsum[1] = tempsum[1]/k; |
MarcelPortmann | 0:c203f964c949 | 113 | tempsum[2] = tempsum[2]/k; |
MarcelPortmann | 0:c203f964c949 | 114 | |
MarcelPortmann | 0:c203f964c949 | 115 | empty[0] = 1; // status: 000 standart point |
MarcelPortmann | 0:c203f964c949 | 116 | empty[1] = 0; // 001 start point |
MarcelPortmann | 0:c203f964c949 | 117 | empty[2] = 0; // 010 end point |
MarcelPortmann | 0:c203f964c949 | 118 | store.SpeichernPosition(tr_name,0,tempsum,empty,empty); // save startpoint to memory |
MarcelPortmann | 0:c203f964c949 | 119 | |
MarcelPortmann | 0:c203f964c949 | 120 | |
MarcelPortmann | 0:c203f964c949 | 121 | i = 0, k = 0, tempsum[0] = 0, tempsum[1] = 0, tempsum[2] = 0; // reset counters |
MarcelPortmann | 0:c203f964c949 | 122 | |
MarcelPortmann | 0:c203f964c949 | 123 | |
MarcelPortmann | 0:c203f964c949 | 124 | |
MarcelPortmann | 0:c203f964c949 | 125 | for(i=0; i<=max; i++) { // forward point number |
MarcelPortmann | 0:c203f964c949 | 126 | |
MarcelPortmann | 0:c203f964c949 | 127 | while(!data_vec[k].end) { |
MarcelPortmann | 0:c203f964c949 | 128 | count++; |
MarcelPortmann | 0:c203f964c949 | 129 | k++; |
MarcelPortmann | 0:c203f964c949 | 130 | } |
MarcelPortmann | 0:c203f964c949 | 131 | |
MarcelPortmann | 0:c203f964c949 | 132 | if(count<forward) { |
MarcelPortmann | 0:c203f964c949 | 133 | forward = count; |
MarcelPortmann | 0:c203f964c949 | 134 | } |
MarcelPortmann | 0:c203f964c949 | 135 | while(!data_vec[k].start) { |
MarcelPortmann | 0:c203f964c949 | 136 | k++; |
MarcelPortmann | 0:c203f964c949 | 137 | } |
MarcelPortmann | 0:c203f964c949 | 138 | i = k; |
MarcelPortmann | 0:c203f964c949 | 139 | count = 0; |
MarcelPortmann | 0:c203f964c949 | 140 | |
MarcelPortmann | 0:c203f964c949 | 141 | } |
MarcelPortmann | 0:c203f964c949 | 142 | |
MarcelPortmann | 0:c203f964c949 | 143 | k = 0; |
MarcelPortmann | 0:c203f964c949 | 144 | for(i=0; i<=max; i++) { // backward point number |
MarcelPortmann | 0:c203f964c949 | 145 | |
MarcelPortmann | 0:c203f964c949 | 146 | while(!data_vec[k].end) { |
MarcelPortmann | 0:c203f964c949 | 147 | k++; |
MarcelPortmann | 0:c203f964c949 | 148 | } |
MarcelPortmann | 0:c203f964c949 | 149 | |
MarcelPortmann | 0:c203f964c949 | 150 | while(!data_vec[k].start) { |
MarcelPortmann | 0:c203f964c949 | 151 | count++; |
MarcelPortmann | 0:c203f964c949 | 152 | k++; |
MarcelPortmann | 0:c203f964c949 | 153 | } |
MarcelPortmann | 0:c203f964c949 | 154 | if(count<backward) { |
MarcelPortmann | 0:c203f964c949 | 155 | backward = count; |
MarcelPortmann | 0:c203f964c949 | 156 | } |
MarcelPortmann | 0:c203f964c949 | 157 | i = k; |
MarcelPortmann | 0:c203f964c949 | 158 | count = 0; |
MarcelPortmann | 0:c203f964c949 | 159 | |
MarcelPortmann | 0:c203f964c949 | 160 | } |
MarcelPortmann | 0:c203f964c949 | 161 | |
MarcelPortmann | 0:c203f964c949 | 162 | k = 0; |
MarcelPortmann | 0:c203f964c949 | 163 | struct temp_arry forw[forward]; // temp array initialise and zerowing |
MarcelPortmann | 0:c203f964c949 | 164 | for(i=0; i<forward; i++) { |
MarcelPortmann | 0:c203f964c949 | 165 | forw[i].time=0; |
MarcelPortmann | 0:c203f964c949 | 166 | forw[i].pos[0]=0; |
MarcelPortmann | 0:c203f964c949 | 167 | forw[i].pos[1]=0; |
MarcelPortmann | 0:c203f964c949 | 168 | forw[i].pos[2]=0; |
MarcelPortmann | 0:c203f964c949 | 169 | } |
MarcelPortmann | 0:c203f964c949 | 170 | |
MarcelPortmann | 0:c203f964c949 | 171 | for(i=0; i<=max; i++) { // avrage forward points |
MarcelPortmann | 0:c203f964c949 | 172 | for(p=0; p<=forward; p++) { |
MarcelPortmann | 0:c203f964c949 | 173 | forw[p].time += data_vec[k].time; |
MarcelPortmann | 0:c203f964c949 | 174 | forw[p].pos[0] += data_vec[k].pos[0]; |
MarcelPortmann | 0:c203f964c949 | 175 | forw[p].pos[1] += data_vec[k].pos[1]; |
MarcelPortmann | 0:c203f964c949 | 176 | forw[p].pos[2] += data_vec[k].pos[2]; |
MarcelPortmann | 0:c203f964c949 | 177 | k++; |
MarcelPortmann | 0:c203f964c949 | 178 | } |
MarcelPortmann | 0:c203f964c949 | 179 | |
MarcelPortmann | 0:c203f964c949 | 180 | while(!data_vec[k].start) { |
MarcelPortmann | 0:c203f964c949 | 181 | k++; |
MarcelPortmann | 0:c203f964c949 | 182 | } |
MarcelPortmann | 0:c203f964c949 | 183 | i = k; |
MarcelPortmann | 0:c203f964c949 | 184 | count++; |
MarcelPortmann | 0:c203f964c949 | 185 | |
MarcelPortmann | 0:c203f964c949 | 186 | } |
MarcelPortmann | 0:c203f964c949 | 187 | for(i=0; i<=forward; i++) { |
MarcelPortmann | 0:c203f964c949 | 188 | forw[i].time = (forw[i].time)/count; |
MarcelPortmann | 0:c203f964c949 | 189 | forw[i].pos[0] = (forw[i].pos[0])/count; |
MarcelPortmann | 0:c203f964c949 | 190 | forw[i].pos[1] = (forw[i].pos[1])/count; |
MarcelPortmann | 0:c203f964c949 | 191 | forw[i].pos[2] = (forw[i].pos[2])/count; |
MarcelPortmann | 0:c203f964c949 | 192 | } |
MarcelPortmann | 0:c203f964c949 | 193 | count = 0; |
MarcelPortmann | 0:c203f964c949 | 194 | k = 0, i = 0, p = 0; // reset counters |
MarcelPortmann | 0:c203f964c949 | 195 | |
MarcelPortmann | 0:c203f964c949 | 196 | // Save forward way to memory |
MarcelPortmann | 0:c203f964c949 | 197 | empty[0] = 0; // status: 000 standart point |
MarcelPortmann | 0:c203f964c949 | 198 | empty[1] = 0; // 001 start point |
MarcelPortmann | 0:c203f964c949 | 199 | empty[2] = 0; // 010 end point |
MarcelPortmann | 0:c203f964c949 | 200 | for(i=0; i<=forward; i++) { |
MarcelPortmann | 0:c203f964c949 | 201 | store.SpeichernPosition(tr_name,forw[i].time,forw[i].pos,empty,empty); |
MarcelPortmann | 0:c203f964c949 | 202 | } |
MarcelPortmann | 0:c203f964c949 | 203 | |
MarcelPortmann | 0:c203f964c949 | 204 | for(i=0; i<=max; i++) { // avrage end Point |
MarcelPortmann | 0:c203f964c949 | 205 | if(data_vec[i].end) { |
MarcelPortmann | 0:c203f964c949 | 206 | tempsum[0] += data_vec[i].pos[0]; |
MarcelPortmann | 0:c203f964c949 | 207 | tempsum[1] += data_vec[i].pos[1]; |
MarcelPortmann | 0:c203f964c949 | 208 | tempsum[2] += data_vec[i].pos[2]; |
MarcelPortmann | 0:c203f964c949 | 209 | k++; |
MarcelPortmann | 0:c203f964c949 | 210 | } |
MarcelPortmann | 0:c203f964c949 | 211 | } |
MarcelPortmann | 0:c203f964c949 | 212 | tempsum[0] = tempsum[0]/k; |
MarcelPortmann | 0:c203f964c949 | 213 | tempsum[1] = tempsum[1]/k; |
MarcelPortmann | 0:c203f964c949 | 214 | tempsum[2] = tempsum[2]/k; |
MarcelPortmann | 0:c203f964c949 | 215 | |
MarcelPortmann | 0:c203f964c949 | 216 | // save endpoint to memory |
MarcelPortmann | 0:c203f964c949 | 217 | empty[0] = 0; // status: 000 standart point |
MarcelPortmann | 0:c203f964c949 | 218 | empty[1] = 1; // 001 start point |
MarcelPortmann | 0:c203f964c949 | 219 | empty[2] = 0; // 010 end point |
MarcelPortmann | 0:c203f964c949 | 220 | store.SpeichernPosition(tr_name,0,tempsum,empty,empty); // save endpoint to memory |
MarcelPortmann | 0:c203f964c949 | 221 | |
MarcelPortmann | 0:c203f964c949 | 222 | i = 0, k = 0, tempsum[0] = 0, tempsum[1] = 0, tempsum[2] = 0; // reset counters |
MarcelPortmann | 0:c203f964c949 | 223 | |
MarcelPortmann | 0:c203f964c949 | 224 | struct temp_arry backw[backward]; // temp array initialise and zerowing |
MarcelPortmann | 0:c203f964c949 | 225 | for(i=0; i<backward; i++) { |
MarcelPortmann | 0:c203f964c949 | 226 | backw[i].time=0; |
MarcelPortmann | 0:c203f964c949 | 227 | backw[i].pos[0]=0; |
MarcelPortmann | 0:c203f964c949 | 228 | backw[i].pos[1]=0; |
MarcelPortmann | 0:c203f964c949 | 229 | backw[i].pos[2]=0; |
MarcelPortmann | 0:c203f964c949 | 230 | } |
MarcelPortmann | 0:c203f964c949 | 231 | |
MarcelPortmann | 0:c203f964c949 | 232 | for(i=0; i<=max; i++) { // avrage backward points |
MarcelPortmann | 0:c203f964c949 | 233 | |
MarcelPortmann | 0:c203f964c949 | 234 | while(!data_vec[k].end) { |
MarcelPortmann | 0:c203f964c949 | 235 | k++; |
MarcelPortmann | 0:c203f964c949 | 236 | } |
MarcelPortmann | 0:c203f964c949 | 237 | |
MarcelPortmann | 0:c203f964c949 | 238 | for(p=0; p<=backward; p++) { |
MarcelPortmann | 0:c203f964c949 | 239 | backw[p].time += data_vec[k].time; |
MarcelPortmann | 0:c203f964c949 | 240 | backw[p].pos[0] += data_vec[k].pos[0]; |
MarcelPortmann | 0:c203f964c949 | 241 | backw[p].pos[1] += data_vec[k].pos[1]; |
MarcelPortmann | 0:c203f964c949 | 242 | backw[p].pos[2] += data_vec[k].pos[2]; |
MarcelPortmann | 0:c203f964c949 | 243 | k++; |
MarcelPortmann | 0:c203f964c949 | 244 | } |
MarcelPortmann | 0:c203f964c949 | 245 | i = k; |
MarcelPortmann | 0:c203f964c949 | 246 | count++; |
MarcelPortmann | 0:c203f964c949 | 247 | } |
MarcelPortmann | 0:c203f964c949 | 248 | |
MarcelPortmann | 0:c203f964c949 | 249 | for(i=0; i<=backward; i++) { |
MarcelPortmann | 0:c203f964c949 | 250 | backw[i].time = (backw[i].time)/count; |
MarcelPortmann | 0:c203f964c949 | 251 | backw[i].pos[0] = (backw[i].pos[0])/count; |
MarcelPortmann | 0:c203f964c949 | 252 | backw[i].pos[1] = (backw[i].pos[1])/count; |
MarcelPortmann | 0:c203f964c949 | 253 | backw[i].pos[2] = (backw[i].pos[2])/count; |
MarcelPortmann | 0:c203f964c949 | 254 | } |
MarcelPortmann | 0:c203f964c949 | 255 | count = 0; |
MarcelPortmann | 0:c203f964c949 | 256 | k = 0, i = 0, p = 0; // reset counters |
MarcelPortmann | 0:c203f964c949 | 257 | |
MarcelPortmann | 0:c203f964c949 | 258 | // save backward way to memory |
MarcelPortmann | 0:c203f964c949 | 259 | empty[0] = 0; // status: 000 standart point |
MarcelPortmann | 0:c203f964c949 | 260 | empty[1] = 0; // 001 start point |
MarcelPortmann | 0:c203f964c949 | 261 | empty[2] = 0; // 010 end point |
MarcelPortmann | 0:c203f964c949 | 262 | for(i=0; i<=backward; i++) { |
MarcelPortmann | 0:c203f964c949 | 263 | store.SpeichernPosition(tr_name,backw[i].time,backw[i].pos,empty,empty); |
MarcelPortmann | 0:c203f964c949 | 264 | } |
MarcelPortmann | 0:c203f964c949 | 265 | |
MarcelPortmann | 0:c203f964c949 | 266 | } |
MarcelPortmann | 0:c203f964c949 | 267 | |
MarcelPortmann | 0:c203f964c949 | 268 | void teach::temp_store() |
MarcelPortmann | 0:c203f964c949 | 269 | { |
MarcelPortmann | 0:c203f964c949 | 270 | |
MarcelPortmann | 0:c203f964c949 | 271 | |
MarcelPortmann | 0:c203f964c949 | 272 | } |
MarcelPortmann | 0:c203f964c949 | 273 | |
MarcelPortmann | 0:c203f964c949 | 274 | void teach::contr_sice() |
MarcelPortmann | 0:c203f964c949 | 275 | { |
MarcelPortmann | 0:c203f964c949 | 276 | if((data_vec.size()*sizeof(posdata)) >= MAX_SIZE) { |
MarcelPortmann | 0:c203f964c949 | 277 | // fehlermeldung oder speichern bei zu grossem temp speicher |
MarcelPortmann | 0:c203f964c949 | 278 | } |
MarcelPortmann | 0:c203f964c949 | 279 | } |