Easy Training / Teach

Dependents:   Teach_demo Easyfit

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