Joao Luiz Almeida de Souza Ramos / Mbed 2 deprecated furutacontroller

Dependencies:   QEI mbed-rtos mbed

Committer:
jaoramos
Date:
Sun Dec 01 23:00:51 2013 +0000
Revision:
0:9f2b0ea63eac
Child:
1:5c05e0d08e61
main allows to save angles

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jaoramos 0:9f2b0ea63eac 1 #include "mbed.h"
jaoramos 0:9f2b0ea63eac 2 #include "rtos.h"
jaoramos 0:9f2b0ea63eac 3 #include "QEI.h"
jaoramos 0:9f2b0ea63eac 4
jaoramos 0:9f2b0ea63eac 5 #define NR_SAMPLES 4000
jaoramos 0:9f2b0ea63eac 6
jaoramos 0:9f2b0ea63eac 7 Serial pc(USBTX, USBRX);
jaoramos 0:9f2b0ea63eac 8
jaoramos 0:9f2b0ea63eac 9 QEI encoder(p29, p30, NC, 1024);
jaoramos 0:9f2b0ea63eac 10 Timer T;
jaoramos 0:9f2b0ea63eac 11
jaoramos 0:9f2b0ea63eac 12 // open a file for data logger
jaoramos 0:9f2b0ea63eac 13 LocalFileSystem local("local");
jaoramos 0:9f2b0ea63eac 14
jaoramos 0:9f2b0ea63eac 15 float angle = 0.0;
jaoramos 0:9f2b0ea63eac 16 int pulses0 = 0;
jaoramos 0:9f2b0ea63eac 17 int deltaPulses;
jaoramos 0:9f2b0ea63eac 18 float t0 = 0.0;
jaoramos 0:9f2b0ea63eac 19 float t = 0.0, dt, vel;
jaoramos 0:9f2b0ea63eac 20 int curPulses;
jaoramos 0:9f2b0ea63eac 21 float conversion = 360.0/(1024.0*2.0);
jaoramos 0:9f2b0ea63eac 22 float* buffer;
jaoramos 0:9f2b0ea63eac 23
jaoramos 0:9f2b0ea63eac 24 int index;
jaoramos 0:9f2b0ea63eac 25
jaoramos 0:9f2b0ea63eac 26 void saving(void const *args) {
jaoramos 0:9f2b0ea63eac 27 index = 0;
jaoramos 0:9f2b0ea63eac 28 while (true) {
jaoramos 0:9f2b0ea63eac 29 //fprintf(fp, "0.0\n");
jaoramos 0:9f2b0ea63eac 30 //fprintf(fp, "%f, %f, %f\n", angle, vel, t);
jaoramos 0:9f2b0ea63eac 31 //printf("Vel is: %f, dt = %f\r\n", vel, dt);
jaoramos 0:9f2b0ea63eac 32 buffer[index] = angle;
jaoramos 0:9f2b0ea63eac 33 buffer[index+1] = t;
jaoramos 0:9f2b0ea63eac 34 index = index+2;
jaoramos 0:9f2b0ea63eac 35 Thread::wait(10);
jaoramos 0:9f2b0ea63eac 36 }
jaoramos 0:9f2b0ea63eac 37 }
jaoramos 0:9f2b0ea63eac 38
jaoramos 0:9f2b0ea63eac 39 void computing(void const *args) {
jaoramos 0:9f2b0ea63eac 40 while (true) {
jaoramos 0:9f2b0ea63eac 41 t = T.read();
jaoramos 0:9f2b0ea63eac 42 dt = t - t0;
jaoramos 0:9f2b0ea63eac 43 curPulses = encoder.getPulses();
jaoramos 0:9f2b0ea63eac 44 angle = float(curPulses)*conversion;
jaoramos 0:9f2b0ea63eac 45
jaoramos 0:9f2b0ea63eac 46 deltaPulses = curPulses - pulses0;
jaoramos 0:9f2b0ea63eac 47 vel = float(deltaPulses)/dt*conversion;
jaoramos 0:9f2b0ea63eac 48
jaoramos 0:9f2b0ea63eac 49 pulses0 = curPulses;
jaoramos 0:9f2b0ea63eac 50 t0 = t;
jaoramos 0:9f2b0ea63eac 51 Thread::wait(1);
jaoramos 0:9f2b0ea63eac 52 }
jaoramos 0:9f2b0ea63eac 53 }
jaoramos 0:9f2b0ea63eac 54
jaoramos 0:9f2b0ea63eac 55 void saveToFile ()
jaoramos 0:9f2b0ea63eac 56 {
jaoramos 0:9f2b0ea63eac 57 FILE *fp = fopen("/local/data.csv", "w");
jaoramos 0:9f2b0ea63eac 58 if (!fp) {
jaoramos 0:9f2b0ea63eac 59 fprintf(stderr, "File could not be openend \n\r");
jaoramos 0:9f2b0ea63eac 60 exit(1);
jaoramos 0:9f2b0ea63eac 61 }
jaoramos 0:9f2b0ea63eac 62
jaoramos 0:9f2b0ea63eac 63 wait(2.0);
jaoramos 0:9f2b0ea63eac 64
jaoramos 0:9f2b0ea63eac 65 for (int i=0; i < index; i=i+2) {
jaoramos 0:9f2b0ea63eac 66
jaoramos 0:9f2b0ea63eac 67 fprintf(fp,"%f,%f\n", buffer[i],buffer[i+1]);
jaoramos 0:9f2b0ea63eac 68 }
jaoramos 0:9f2b0ea63eac 69 pc.printf("closing file\n\r");
jaoramos 0:9f2b0ea63eac 70 fclose(fp);
jaoramos 0:9f2b0ea63eac 71 wait(2.0);;
jaoramos 0:9f2b0ea63eac 72 }
jaoramos 0:9f2b0ea63eac 73
jaoramos 0:9f2b0ea63eac 74 int main() {
jaoramos 0:9f2b0ea63eac 75 //allocate memory for the buffer
jaoramos 0:9f2b0ea63eac 76 buffer = new float[NR_SAMPLES];
jaoramos 0:9f2b0ea63eac 77 T.start();
jaoramos 0:9f2b0ea63eac 78 Thread thrd2(computing,NULL,osPriorityRealtime);
jaoramos 0:9f2b0ea63eac 79 Thread thrd3(saving,NULL,osPriorityNormal);
jaoramos 0:9f2b0ea63eac 80
jaoramos 0:9f2b0ea63eac 81 pc.printf("Start!\r\n");
jaoramos 0:9f2b0ea63eac 82 pc.printf("Time: %f\r\n", t);
jaoramos 0:9f2b0ea63eac 83 while (t < 10.0)
jaoramos 0:9f2b0ea63eac 84 {
jaoramos 0:9f2b0ea63eac 85 pc.printf("Time: %f\r\n", t);
jaoramos 0:9f2b0ea63eac 86 Thread::wait(1000);
jaoramos 0:9f2b0ea63eac 87 }
jaoramos 0:9f2b0ea63eac 88 pc.printf("Done!\r\n");
jaoramos 0:9f2b0ea63eac 89 thrd2.terminate();
jaoramos 0:9f2b0ea63eac 90 thrd3.terminate();
jaoramos 0:9f2b0ea63eac 91 saveToFile();
jaoramos 0:9f2b0ea63eac 92 }