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
Diff: teach.cpp
- Revision:
- 0:c203f964c949
- Child:
- 2:a6d12e229ad3
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/teach.cpp Tue Apr 28 12:52:01 2020 +0000 @@ -0,0 +1,279 @@ +/* +Hear cold stand a discription + +*/ + + +#include "teach.h" + + +teach::teach(void) // constructor +{ + + lowcount = 0, highcount = 0; //sets startvalue + data_vec.clear(); +} + +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.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(); + + for(i=0; i<=max; i++) { // avrage starting Point + 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 + 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; i++) { // forward point number + + while(!data_vec[k].end) { + count++; + k++; + } + + if(count<forward) { + forward = count; + } + while(!data_vec[k].start) { + k++; + } + i = k; + count = 0; + + } + + k = 0; + for(i=0; i<=max; 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; + + } + + 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; 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++; + } + + 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++; + } + } + 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 + 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; 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++; + } + i = k; + 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 + } +} \ No newline at end of file