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
- Committer:
- MarcelPortmann
- Date:
- 2020-05-27
- Revision:
- 11:995f62d934b2
- Parent:
- 10:333f82852d69
File content as of revision 11:995f62d934b2:
/* Hear cold stand a discription */ #include "teach.h" teach::teach(void) // constructor { lowcount = 0, highcount = 0; //sets startvalue data_vec.clear(); //store.init(); } void teach::setstart(float posx,float posy,float posz, int time) { lowcount = 0; temp.start = true; temp.end = false; temp.hi = highcount; temp.low = lowcount; temp.time = time; temp.pos[0] = posx; temp.pos[1] = posy; temp.pos[2] = posz; data_vec.push_back(temp); lowcount++; highcount++; contr_sice(); } void teach::setpoint(float posx,float posy,float posz, int time) { lowcount++; temp.start = false; temp.end = false; temp.hi = highcount; temp.low = lowcount; temp.time = time; temp.pos[0] = posx; temp.pos[1] = posy; temp.pos[2] = posz; data_vec.push_back(temp); contr_sice(); } void teach::setend(float posx,float posy,float posz, int time) { temp.start = false; temp.end = true; temp.hi = highcount; temp.low = lowcount; temp.time = time; temp.pos[0] = posx; temp.pos[1] = posy; temp.pos[2] = posz; data_vec.push_back(temp); lowcount = 0; highcount++; contr_sice(); } void teach::save(string name) { tr_name = name; store.LoeschenDatenblock(tr_name); // deleats existing datablock from sd-card store.ErstellenDatenblock(tr_name); process(); } void teach::stop(void) { data_vec.clear(); highcount = 0; lowcount = 0; // memory lösch funktion; temp.start = false; temp.end = false; temp.hi = 0; temp.low = 0; temp.time = 0; temp.pos[0] = 0; temp.pos[1] = 0; temp.pos[2] = 0; } void teach::process(void) { int i=0, k=0, p=0, count=0,forward = 100000, backward = 100000; float tempsum[3] = {}; float empty[3] = {}; int max = data_vec.size(); printf("Anzahl Datenpunkte: %d \n", max); for(i=0; i<max; i++) { // avrage starting Point //printf("--%d->",data_vec[i].start); if(data_vec[i].start) { tempsum[0] += data_vec[i].pos[0]; tempsum[1] += data_vec[i].pos[1]; tempsum[2] += data_vec[i].pos[2]; k++; } } tempsum[0] = tempsum[0]/k; tempsum[1] = tempsum[1]/k; tempsum[2] = tempsum[2]/k; empty[0] = 1; // status: 000 standart point empty[1] = 0; // 001 start point empty[2] = 0; // 010 end point printf("Startpunkt"); store.SpeichernPosition(tr_name,0,tempsum,empty,empty); // save startpoint to memory i = 0, k = 0, tempsum[0] = 0, tempsum[1] = 0, tempsum[2] = 0; // reset counters for(i=0; i<max-5; i++) { // forward point number while(!data_vec[k].end) { count++; k++; } if(count<forward) { // Catching to short / fails trainings forward = count; } while(!data_vec[k].start) { k++; } i = k; count = 0; } k = 0; for(i=0; i<max-10; i++) { // backward point number while(!data_vec[k].end) { k++; } while(!data_vec[k].start) { count++; k++; } if(count<backward) { backward = count; } i = k; count = 0; } printf("Durchschnittliche Punkte: Vorwerts Punkte %d Rückwärts Punkte %d \n", forward, backward); k = 0; struct temp_arry forw[forward]; // temp array initialise and zerowing for(i=0; i<forward; i++) { forw[i].time=0; forw[i].pos[0]=0; forw[i].pos[1]=0; forw[i].pos[2]=0; } for(i=0; i<max-10; i++) { // avrage forward points for(p=0; p<forward; p++) { forw[p].time += data_vec[k].time; forw[p].pos[0] += data_vec[k].pos[0]; forw[p].pos[1] += data_vec[k].pos[1]; forw[p].pos[2] += data_vec[k].pos[2]; k++; //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); } while(!data_vec[k].start) { k++; } i = k; count++; } for(i=0; i<forward; i++) { forw[i].time = (forw[i].time)/count; forw[i].pos[0] = (forw[i].pos[0])/count; forw[i].pos[1] = (forw[i].pos[1])/count; forw[i].pos[2] = (forw[i].pos[2])/count; } count = 0; k = 0, i = 0, p = 0; // reset counters // Save forward way to memory empty[0] = 0; // status: 000 standart point empty[1] = 0; // 001 start point empty[2] = 0; // 010 end point for(i=0; i<forward; i++) { store.SpeichernPosition(tr_name,forw[i].time,forw[i].pos,empty,empty); } for(i=0; i<max; i++) { // avrage end Point if(data_vec[i].end) { tempsum[0] += data_vec[i].pos[0]; tempsum[1] += data_vec[i].pos[1]; tempsum[2] += data_vec[i].pos[2]; k++; } } printf("Vorwärts Repetitionen: %d \n" , k); tempsum[0] = tempsum[0]/k; tempsum[1] = tempsum[1]/k; tempsum[2] = tempsum[2]/k; // save endpoint to memory empty[0] = 0; // status: 000 standart point empty[1] = 1; // 001 start point empty[2] = 0; // 010 end point printf("Endpunkt"); store.SpeichernPosition(tr_name,0,tempsum,empty,empty); // save endpoint to memory i = 0, k = 0, tempsum[0] = 0, tempsum[1] = 0, tempsum[2] = 0; // reset counters struct temp_arry backw[backward]; // temp array initialise and zerowing for(i=0; i<backward; i++) { backw[i].time=0; backw[i].pos[0]=0; backw[i].pos[1]=0; backw[i].pos[2]=0; } for(i=0; i<max-10; i++) { // avrage backward points while(!data_vec[k].end) { k++; } for(p=0; p<backward; p++) { backw[p].time += data_vec[k].time; backw[p].pos[0] += data_vec[k].pos[0]; backw[p].pos[1] += data_vec[k].pos[1]; backw[p].pos[2] += data_vec[k].pos[2]; k++; //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); } i = k; count++; } printf("Rückwärts repetitionen: %d \n", count); for(i=0; i<backward; i++) { backw[i].time = (backw[i].time)/count; backw[i].pos[0] = (backw[i].pos[0])/count; backw[i].pos[1] = (backw[i].pos[1])/count; backw[i].pos[2] = (backw[i].pos[2])/count; } count = 0; k = 0, i = 0, p = 0; // reset counters // save backward way to memory empty[0] = 0; // status: 000 standart point empty[1] = 0; // 001 start point empty[2] = 0; // 010 end point for(i=0; i<backward; i++) { store.SpeichernPosition(tr_name,backw[i].time,backw[i].pos,empty,empty); } } void teach::temp_store() { } void teach::contr_sice() { if((data_vec.size()*sizeof(posdata)) >= MAX_SIZE) { // fehlermeldung oder speichern bei zu grossem temp speicher } }