Easy Training / Teach

Dependents:   Teach_demo Easyfit

Committer:
MarcelPortmann
Date:
Wed May 27 19:19:16 2020 +0000
Revision:
11:995f62d934b2
Parent:
10:333f82852d69

        

Who changed what in which revision?

UserRevisionLine numberNew 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 6:6c3d0a838b6c 15 //store.init();
MarcelPortmann 0:c203f964c949 16 }
MarcelPortmann 0:c203f964c949 17
MarcelPortmann 0:c203f964c949 18 void teach::setstart(float posx,float posy,float posz, int time)
MarcelPortmann 0:c203f964c949 19 {
MarcelPortmann 0:c203f964c949 20 lowcount = 0;
MarcelPortmann 0:c203f964c949 21
MarcelPortmann 0:c203f964c949 22 temp.start = true;
MarcelPortmann 0:c203f964c949 23 temp.end = false;
MarcelPortmann 0:c203f964c949 24 temp.hi = highcount;
MarcelPortmann 0:c203f964c949 25 temp.low = lowcount;
MarcelPortmann 0:c203f964c949 26 temp.time = time;
MarcelPortmann 0:c203f964c949 27 temp.pos[0] = posx;
MarcelPortmann 0:c203f964c949 28 temp.pos[1] = posy;
MarcelPortmann 0:c203f964c949 29 temp.pos[2] = posz;
MarcelPortmann 0:c203f964c949 30 data_vec.push_back(temp);
MarcelPortmann 0:c203f964c949 31
MarcelPortmann 0:c203f964c949 32 lowcount++;
MarcelPortmann 0:c203f964c949 33 highcount++;
MarcelPortmann 0:c203f964c949 34
MarcelPortmann 0:c203f964c949 35 contr_sice();
MarcelPortmann 0:c203f964c949 36 }
MarcelPortmann 0:c203f964c949 37
MarcelPortmann 0:c203f964c949 38 void teach::setpoint(float posx,float posy,float posz, int time)
MarcelPortmann 0:c203f964c949 39 {
MarcelPortmann 0:c203f964c949 40 lowcount++;
MarcelPortmann 0:c203f964c949 41
MarcelPortmann 0:c203f964c949 42 temp.start = false;
MarcelPortmann 0:c203f964c949 43 temp.end = false;
MarcelPortmann 0:c203f964c949 44 temp.hi = highcount;
MarcelPortmann 0:c203f964c949 45 temp.low = lowcount;
MarcelPortmann 0:c203f964c949 46 temp.time = time;
MarcelPortmann 0:c203f964c949 47 temp.pos[0] = posx;
MarcelPortmann 0:c203f964c949 48 temp.pos[1] = posy;
MarcelPortmann 0:c203f964c949 49 temp.pos[2] = posz;
MarcelPortmann 0:c203f964c949 50 data_vec.push_back(temp);
MarcelPortmann 0:c203f964c949 51
MarcelPortmann 0:c203f964c949 52 contr_sice();
MarcelPortmann 0:c203f964c949 53 }
MarcelPortmann 0:c203f964c949 54
MarcelPortmann 0:c203f964c949 55 void teach::setend(float posx,float posy,float posz, int time)
MarcelPortmann 0:c203f964c949 56 {
MarcelPortmann 0:c203f964c949 57 temp.start = false;
MarcelPortmann 0:c203f964c949 58 temp.end = true;
MarcelPortmann 0:c203f964c949 59 temp.hi = highcount;
MarcelPortmann 0:c203f964c949 60 temp.low = lowcount;
MarcelPortmann 0:c203f964c949 61 temp.time = time;
MarcelPortmann 0:c203f964c949 62 temp.pos[0] = posx;
MarcelPortmann 0:c203f964c949 63 temp.pos[1] = posy;
MarcelPortmann 0:c203f964c949 64 temp.pos[2] = posz;
MarcelPortmann 0:c203f964c949 65 data_vec.push_back(temp);
MarcelPortmann 0:c203f964c949 66
MarcelPortmann 0:c203f964c949 67 lowcount = 0;
MarcelPortmann 0:c203f964c949 68 highcount++;
MarcelPortmann 0:c203f964c949 69
MarcelPortmann 0:c203f964c949 70 contr_sice();
MarcelPortmann 0:c203f964c949 71 }
MarcelPortmann 0:c203f964c949 72
MarcelPortmann 0:c203f964c949 73 void teach::save(string name)
MarcelPortmann 0:c203f964c949 74 {
MarcelPortmann 0:c203f964c949 75 tr_name = name;
MarcelPortmann 6:6c3d0a838b6c 76 store.LoeschenDatenblock(tr_name); // deleats existing datablock from sd-card
MarcelPortmann 0:c203f964c949 77 store.ErstellenDatenblock(tr_name);
MarcelPortmann 4:b0a7cc9ff8d4 78
MarcelPortmann 4:b0a7cc9ff8d4 79
MarcelPortmann 4:b0a7cc9ff8d4 80
MarcelPortmann 0:c203f964c949 81 process();
MarcelPortmann 0:c203f964c949 82
MarcelPortmann 0:c203f964c949 83 }
MarcelPortmann 0:c203f964c949 84
MarcelPortmann 0:c203f964c949 85 void teach::stop(void)
MarcelPortmann 0:c203f964c949 86 {
MarcelPortmann 0:c203f964c949 87 data_vec.clear();
MarcelPortmann 0:c203f964c949 88 highcount = 0; lowcount = 0;
MarcelPortmann 0:c203f964c949 89 // memory lösch funktion;
MarcelPortmann 0:c203f964c949 90 temp.start = false;
MarcelPortmann 0:c203f964c949 91 temp.end = false;
MarcelPortmann 0:c203f964c949 92 temp.hi = 0;
MarcelPortmann 0:c203f964c949 93 temp.low = 0;
MarcelPortmann 0:c203f964c949 94 temp.time = 0;
MarcelPortmann 0:c203f964c949 95 temp.pos[0] = 0;
MarcelPortmann 0:c203f964c949 96 temp.pos[1] = 0;
MarcelPortmann 0:c203f964c949 97 temp.pos[2] = 0;
MarcelPortmann 0:c203f964c949 98
MarcelPortmann 0:c203f964c949 99 }
MarcelPortmann 0:c203f964c949 100
MarcelPortmann 0:c203f964c949 101 void teach::process(void)
MarcelPortmann 0:c203f964c949 102 {
MarcelPortmann 0:c203f964c949 103 int i=0, k=0, p=0, count=0,forward = 100000, backward = 100000;
MarcelPortmann 0:c203f964c949 104 float tempsum[3] = {};
MarcelPortmann 0:c203f964c949 105 float empty[3] = {};
MarcelPortmann 0:c203f964c949 106 int max = data_vec.size();
MarcelPortmann 11:995f62d934b2 107 printf("Anzahl Datenpunkte: %d \n", max);
MarcelPortmann 8:0715eeedf5da 108
MarcelPortmann 8:0715eeedf5da 109
MarcelPortmann 0:c203f964c949 110
MarcelPortmann 4:b0a7cc9ff8d4 111 for(i=0; i<max; i++) { // avrage starting Point
MarcelPortmann 11:995f62d934b2 112 //printf("--%d->",data_vec[i].start);
MarcelPortmann 0:c203f964c949 113 if(data_vec[i].start) {
MarcelPortmann 0:c203f964c949 114 tempsum[0] += data_vec[i].pos[0];
MarcelPortmann 0:c203f964c949 115 tempsum[1] += data_vec[i].pos[1];
MarcelPortmann 0:c203f964c949 116 tempsum[2] += data_vec[i].pos[2];
MarcelPortmann 0:c203f964c949 117 k++;
MarcelPortmann 0:c203f964c949 118 }
MarcelPortmann 0:c203f964c949 119 }
MarcelPortmann 0:c203f964c949 120 tempsum[0] = tempsum[0]/k;
MarcelPortmann 0:c203f964c949 121 tempsum[1] = tempsum[1]/k;
MarcelPortmann 0:c203f964c949 122 tempsum[2] = tempsum[2]/k;
MarcelPortmann 0:c203f964c949 123
MarcelPortmann 0:c203f964c949 124 empty[0] = 1; // status: 000 standart point
MarcelPortmann 0:c203f964c949 125 empty[1] = 0; // 001 start point
MarcelPortmann 0:c203f964c949 126 empty[2] = 0; // 010 end point
MarcelPortmann 11:995f62d934b2 127 printf("Startpunkt");
MarcelPortmann 0:c203f964c949 128 store.SpeichernPosition(tr_name,0,tempsum,empty,empty); // save startpoint to memory
MarcelPortmann 0:c203f964c949 129
MarcelPortmann 0:c203f964c949 130
MarcelPortmann 0:c203f964c949 131 i = 0, k = 0, tempsum[0] = 0, tempsum[1] = 0, tempsum[2] = 0; // reset counters
MarcelPortmann 0:c203f964c949 132
MarcelPortmann 9:a30b877cb866 133
MarcelPortmann 0:c203f964c949 134
MarcelPortmann 9:a30b877cb866 135 for(i=0; i<max-5; i++) { // forward point number
MarcelPortmann 0:c203f964c949 136
MarcelPortmann 0:c203f964c949 137 while(!data_vec[k].end) {
MarcelPortmann 0:c203f964c949 138 count++;
MarcelPortmann 0:c203f964c949 139 k++;
MarcelPortmann 0:c203f964c949 140 }
MarcelPortmann 0:c203f964c949 141
MarcelPortmann 0:c203f964c949 142 if(count<forward) {
MarcelPortmann 8:0715eeedf5da 143 // Catching to short / fails trainings
MarcelPortmann 0:c203f964c949 144 forward = count;
MarcelPortmann 8:0715eeedf5da 145
MarcelPortmann 0:c203f964c949 146 }
MarcelPortmann 0:c203f964c949 147 while(!data_vec[k].start) {
MarcelPortmann 0:c203f964c949 148 k++;
MarcelPortmann 0:c203f964c949 149 }
MarcelPortmann 0:c203f964c949 150 i = k;
MarcelPortmann 0:c203f964c949 151 count = 0;
MarcelPortmann 0:c203f964c949 152
MarcelPortmann 0:c203f964c949 153 }
MarcelPortmann 4:b0a7cc9ff8d4 154
MarcelPortmann 4:b0a7cc9ff8d4 155
MarcelPortmann 0:c203f964c949 156
MarcelPortmann 0:c203f964c949 157 k = 0;
MarcelPortmann 8:0715eeedf5da 158 for(i=0; i<max-10; i++) { // backward point number
MarcelPortmann 0:c203f964c949 159
MarcelPortmann 0:c203f964c949 160 while(!data_vec[k].end) {
MarcelPortmann 0:c203f964c949 161 k++;
MarcelPortmann 0:c203f964c949 162 }
MarcelPortmann 0:c203f964c949 163
MarcelPortmann 0:c203f964c949 164 while(!data_vec[k].start) {
MarcelPortmann 0:c203f964c949 165 count++;
MarcelPortmann 0:c203f964c949 166 k++;
MarcelPortmann 0:c203f964c949 167 }
MarcelPortmann 0:c203f964c949 168 if(count<backward) {
MarcelPortmann 11:995f62d934b2 169
MarcelPortmann 0:c203f964c949 170 backward = count;
MarcelPortmann 8:0715eeedf5da 171
MarcelPortmann 0:c203f964c949 172 }
MarcelPortmann 0:c203f964c949 173 i = k;
MarcelPortmann 0:c203f964c949 174 count = 0;
MarcelPortmann 0:c203f964c949 175
MarcelPortmann 0:c203f964c949 176 }
MarcelPortmann 4:b0a7cc9ff8d4 177
MarcelPortmann 11:995f62d934b2 178 printf("Durchschnittliche Punkte: Vorwerts Punkte %d Rückwärts Punkte %d \n", forward, backward);
MarcelPortmann 4:b0a7cc9ff8d4 179
MarcelPortmann 5:658665f56b9c 180
MarcelPortmann 0:c203f964c949 181
MarcelPortmann 0:c203f964c949 182 k = 0;
MarcelPortmann 0:c203f964c949 183 struct temp_arry forw[forward]; // temp array initialise and zerowing
MarcelPortmann 0:c203f964c949 184 for(i=0; i<forward; i++) {
MarcelPortmann 0:c203f964c949 185 forw[i].time=0;
MarcelPortmann 0:c203f964c949 186 forw[i].pos[0]=0;
MarcelPortmann 0:c203f964c949 187 forw[i].pos[1]=0;
MarcelPortmann 0:c203f964c949 188 forw[i].pos[2]=0;
MarcelPortmann 0:c203f964c949 189 }
MarcelPortmann 5:658665f56b9c 190
MarcelPortmann 5:658665f56b9c 191 for(i=0; i<max-10; i++) { // avrage forward points
MarcelPortmann 5:658665f56b9c 192 for(p=0; p<forward; p++) {
MarcelPortmann 0:c203f964c949 193 forw[p].time += data_vec[k].time;
MarcelPortmann 0:c203f964c949 194 forw[p].pos[0] += data_vec[k].pos[0];
MarcelPortmann 0:c203f964c949 195 forw[p].pos[1] += data_vec[k].pos[1];
MarcelPortmann 0:c203f964c949 196 forw[p].pos[2] += data_vec[k].pos[2];
MarcelPortmann 0:c203f964c949 197 k++;
MarcelPortmann 5:658665f56b9c 198 //printf("data_vec[k].pos[0]: %f,data_vec[k].time: %d, k:%d \n",data_vec[k].pos[0],data_vec[k].time,k);
MarcelPortmann 0:c203f964c949 199 }
MarcelPortmann 5:658665f56b9c 200
MarcelPortmann 0:c203f964c949 201 while(!data_vec[k].start) {
MarcelPortmann 0:c203f964c949 202 k++;
MarcelPortmann 0:c203f964c949 203 }
MarcelPortmann 0:c203f964c949 204 i = k;
MarcelPortmann 0:c203f964c949 205 count++;
MarcelPortmann 0:c203f964c949 206
MarcelPortmann 0:c203f964c949 207 }
MarcelPortmann 5:658665f56b9c 208
MarcelPortmann 5:658665f56b9c 209 for(i=0; i<forward; i++) {
MarcelPortmann 0:c203f964c949 210 forw[i].time = (forw[i].time)/count;
MarcelPortmann 0:c203f964c949 211 forw[i].pos[0] = (forw[i].pos[0])/count;
MarcelPortmann 0:c203f964c949 212 forw[i].pos[1] = (forw[i].pos[1])/count;
MarcelPortmann 0:c203f964c949 213 forw[i].pos[2] = (forw[i].pos[2])/count;
MarcelPortmann 0:c203f964c949 214 }
MarcelPortmann 0:c203f964c949 215 count = 0;
MarcelPortmann 0:c203f964c949 216 k = 0, i = 0, p = 0; // reset counters
MarcelPortmann 5:658665f56b9c 217
MarcelPortmann 0:c203f964c949 218 // Save forward way to memory
MarcelPortmann 0:c203f964c949 219 empty[0] = 0; // status: 000 standart point
MarcelPortmann 0:c203f964c949 220 empty[1] = 0; // 001 start point
MarcelPortmann 0:c203f964c949 221 empty[2] = 0; // 010 end point
MarcelPortmann 5:658665f56b9c 222 for(i=0; i<forward; i++) {
MarcelPortmann 10:333f82852d69 223
MarcelPortmann 0:c203f964c949 224 store.SpeichernPosition(tr_name,forw[i].time,forw[i].pos,empty,empty);
MarcelPortmann 0:c203f964c949 225 }
MarcelPortmann 5:658665f56b9c 226
MarcelPortmann 5:658665f56b9c 227 for(i=0; i<max; i++) { // avrage end Point
MarcelPortmann 0:c203f964c949 228 if(data_vec[i].end) {
MarcelPortmann 0:c203f964c949 229 tempsum[0] += data_vec[i].pos[0];
MarcelPortmann 0:c203f964c949 230 tempsum[1] += data_vec[i].pos[1];
MarcelPortmann 0:c203f964c949 231 tempsum[2] += data_vec[i].pos[2];
MarcelPortmann 0:c203f964c949 232 k++;
MarcelPortmann 0:c203f964c949 233 }
MarcelPortmann 5:658665f56b9c 234
MarcelPortmann 0:c203f964c949 235 }
MarcelPortmann 11:995f62d934b2 236 printf("Vorwärts Repetitionen: %d \n" , k);
MarcelPortmann 0:c203f964c949 237 tempsum[0] = tempsum[0]/k;
MarcelPortmann 0:c203f964c949 238 tempsum[1] = tempsum[1]/k;
MarcelPortmann 0:c203f964c949 239 tempsum[2] = tempsum[2]/k;
MarcelPortmann 0:c203f964c949 240
MarcelPortmann 0:c203f964c949 241 // save endpoint to memory
MarcelPortmann 0:c203f964c949 242 empty[0] = 0; // status: 000 standart point
MarcelPortmann 0:c203f964c949 243 empty[1] = 1; // 001 start point
MarcelPortmann 0:c203f964c949 244 empty[2] = 0; // 010 end point
MarcelPortmann 11:995f62d934b2 245 printf("Endpunkt");
MarcelPortmann 0:c203f964c949 246 store.SpeichernPosition(tr_name,0,tempsum,empty,empty); // save endpoint to memory
MarcelPortmann 0:c203f964c949 247
MarcelPortmann 0:c203f964c949 248 i = 0, k = 0, tempsum[0] = 0, tempsum[1] = 0, tempsum[2] = 0; // reset counters
MarcelPortmann 0:c203f964c949 249
MarcelPortmann 0:c203f964c949 250 struct temp_arry backw[backward]; // temp array initialise and zerowing
MarcelPortmann 0:c203f964c949 251 for(i=0; i<backward; i++) {
MarcelPortmann 0:c203f964c949 252 backw[i].time=0;
MarcelPortmann 0:c203f964c949 253 backw[i].pos[0]=0;
MarcelPortmann 0:c203f964c949 254 backw[i].pos[1]=0;
MarcelPortmann 0:c203f964c949 255 backw[i].pos[2]=0;
MarcelPortmann 0:c203f964c949 256 }
MarcelPortmann 0:c203f964c949 257
MarcelPortmann 5:658665f56b9c 258 for(i=0; i<max-10; i++) { // avrage backward points
MarcelPortmann 0:c203f964c949 259
MarcelPortmann 0:c203f964c949 260 while(!data_vec[k].end) {
MarcelPortmann 0:c203f964c949 261 k++;
MarcelPortmann 0:c203f964c949 262 }
MarcelPortmann 0:c203f964c949 263
MarcelPortmann 5:658665f56b9c 264 for(p=0; p<backward; p++) {
MarcelPortmann 0:c203f964c949 265 backw[p].time += data_vec[k].time;
MarcelPortmann 0:c203f964c949 266 backw[p].pos[0] += data_vec[k].pos[0];
MarcelPortmann 0:c203f964c949 267 backw[p].pos[1] += data_vec[k].pos[1];
MarcelPortmann 0:c203f964c949 268 backw[p].pos[2] += data_vec[k].pos[2];
MarcelPortmann 0:c203f964c949 269 k++;
MarcelPortmann 11:995f62d934b2 270 //printf("data_vec[k].pos[0]: %f,data_vec[k].time: %d, k:%d \n",data_vec[k].pos[0],data_vec[k].time,k);
MarcelPortmann 0:c203f964c949 271 }
MarcelPortmann 0:c203f964c949 272 i = k;
MarcelPortmann 0:c203f964c949 273 count++;
MarcelPortmann 0:c203f964c949 274 }
MarcelPortmann 11:995f62d934b2 275 printf("Rückwärts repetitionen: %d \n", count);
MarcelPortmann 5:658665f56b9c 276 for(i=0; i<backward; i++) {
MarcelPortmann 0:c203f964c949 277 backw[i].time = (backw[i].time)/count;
MarcelPortmann 0:c203f964c949 278 backw[i].pos[0] = (backw[i].pos[0])/count;
MarcelPortmann 0:c203f964c949 279 backw[i].pos[1] = (backw[i].pos[1])/count;
MarcelPortmann 0:c203f964c949 280 backw[i].pos[2] = (backw[i].pos[2])/count;
MarcelPortmann 0:c203f964c949 281 }
MarcelPortmann 0:c203f964c949 282 count = 0;
MarcelPortmann 0:c203f964c949 283 k = 0, i = 0, p = 0; // reset counters
MarcelPortmann 5:658665f56b9c 284
MarcelPortmann 0:c203f964c949 285 // save backward way to memory
MarcelPortmann 0:c203f964c949 286 empty[0] = 0; // status: 000 standart point
MarcelPortmann 0:c203f964c949 287 empty[1] = 0; // 001 start point
MarcelPortmann 0:c203f964c949 288 empty[2] = 0; // 010 end point
MarcelPortmann 5:658665f56b9c 289 for(i=0; i<backward; i++) {
MarcelPortmann 0:c203f964c949 290 store.SpeichernPosition(tr_name,backw[i].time,backw[i].pos,empty,empty);
MarcelPortmann 0:c203f964c949 291 }
MarcelPortmann 5:658665f56b9c 292
MarcelPortmann 0:c203f964c949 293 }
MarcelPortmann 0:c203f964c949 294
MarcelPortmann 0:c203f964c949 295 void teach::temp_store()
MarcelPortmann 0:c203f964c949 296 {
MarcelPortmann 0:c203f964c949 297
MarcelPortmann 0:c203f964c949 298
MarcelPortmann 0:c203f964c949 299 }
MarcelPortmann 0:c203f964c949 300
MarcelPortmann 0:c203f964c949 301 void teach::contr_sice()
MarcelPortmann 0:c203f964c949 302 {
MarcelPortmann 0:c203f964c949 303 if((data_vec.size()*sizeof(posdata)) >= MAX_SIZE) {
MarcelPortmann 0:c203f964c949 304 // fehlermeldung oder speichern bei zu grossem temp speicher
MarcelPortmann 0:c203f964c949 305 }
MarcelPortmann 0:c203f964c949 306 }