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.
Dependencies: QEI mbed-rtos mbed
main.cpp@0:9f2b0ea63eac, 2013-12-01 (annotated)
- 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?
User | Revision | Line number | New 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 | } |