NOT FINISHED YET!!! My first try to get a self built fully working Quadrocopter based on an mbed, a self built frame and some other more or less cheap parts.
RC/RC_Channel.cpp@33:fd98776b6cc7, 2013-04-04 (annotated)
- Committer:
- maetugr
- Date:
- Thu Apr 04 14:25:21 2013 +0000
- Revision:
- 33:fd98776b6cc7
- Parent:
- 29:8b7362a2ee14
- Child:
- 34:3aa1cbcde59d
New version developed in eastern holidays, ported Madgwick Filter, added support for chaning PID values while flying over bluetooth, still not flying stable or even controllable
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
maetugr | 7:9d4313510646 | 1 | #include "RC_Channel.h" |
maetugr | 7:9d4313510646 | 2 | #include "mbed.h" |
maetugr | 7:9d4313510646 | 3 | |
maetugr | 27:9e546fa47c33 | 4 | RC_Channel::RC_Channel(PinName mypin, int index) : myinterrupt(mypin) |
maetugr | 7:9d4313510646 | 5 | { |
maetugr | 27:9e546fa47c33 | 6 | RC_Channel::index = index; |
maetugr | 28:ba6ca9f4def4 | 7 | time = -100; // start value to see if there was any value yet |
maetugr | 27:9e546fa47c33 | 8 | |
maetugr | 27:9e546fa47c33 | 9 | loadCalibrationValue(&scale, "SCALE"); |
maetugr | 29:8b7362a2ee14 | 10 | loadCalibrationValue(&offset, "OFFSE"); |
maetugr | 27:9e546fa47c33 | 11 | |
maetugr | 7:9d4313510646 | 12 | myinterrupt.rise(this, &RC_Channel::rise); |
maetugr | 7:9d4313510646 | 13 | myinterrupt.fall(this, &RC_Channel::fall); |
maetugr | 15:753c5d6a63b3 | 14 | timeoutchecker.attach(this, &RC_Channel::timeoutcheck, 1); |
maetugr | 7:9d4313510646 | 15 | } |
maetugr | 7:9d4313510646 | 16 | |
maetugr | 7:9d4313510646 | 17 | int RC_Channel::read() |
maetugr | 7:9d4313510646 | 18 | { |
maetugr | 29:8b7362a2ee14 | 19 | if(time == -100) |
maetugr | 29:8b7362a2ee14 | 20 | return time; |
maetugr | 27:9e546fa47c33 | 21 | return scale * (float)(time) + offset; // calibration of the readings |
maetugr | 7:9d4313510646 | 22 | } |
maetugr | 7:9d4313510646 | 23 | |
maetugr | 7:9d4313510646 | 24 | void RC_Channel::rise() |
maetugr | 7:9d4313510646 | 25 | { |
maetugr | 7:9d4313510646 | 26 | timer.start(); |
maetugr | 7:9d4313510646 | 27 | } |
maetugr | 7:9d4313510646 | 28 | |
maetugr | 7:9d4313510646 | 29 | void RC_Channel::fall() |
maetugr | 7:9d4313510646 | 30 | { |
maetugr | 7:9d4313510646 | 31 | timer.stop(); |
maetugr | 12:67a06c9b69d5 | 32 | int tester = timer.read_us(); |
maetugr | 12:67a06c9b69d5 | 33 | if(tester >= 1000 && tester <=2000) |
maetugr | 27:9e546fa47c33 | 34 | time = tester-1000; // we want only the signal from 1000 on |
maetugr | 7:9d4313510646 | 35 | timer.reset(); |
maetugr | 10:953afcbcebfc | 36 | timer.start(); |
maetugr | 10:953afcbcebfc | 37 | } |
maetugr | 10:953afcbcebfc | 38 | |
maetugr | 10:953afcbcebfc | 39 | void RC_Channel::timeoutcheck() |
maetugr | 10:953afcbcebfc | 40 | { |
maetugr | 10:953afcbcebfc | 41 | if (timer.read() > 0.3) |
maetugr | 21:c2a2e7cbabdd | 42 | time = -100; |
maetugr | 27:9e546fa47c33 | 43 | } |
maetugr | 27:9e546fa47c33 | 44 | |
maetugr | 27:9e546fa47c33 | 45 | void RC_Channel::saveCalibrationValue(float * value, char * fileextension) |
maetugr | 27:9e546fa47c33 | 46 | { |
maetugr | 27:9e546fa47c33 | 47 | char path[40]; |
maetugr | 27:9e546fa47c33 | 48 | sprintf(path, "/local/FlyBed/RC_%d_%s", index, fileextension); |
maetugr | 27:9e546fa47c33 | 49 | FILE *fp = fopen(path, "w"); |
maetugr | 27:9e546fa47c33 | 50 | if (fp != NULL) { |
maetugr | 27:9e546fa47c33 | 51 | fprintf(fp, "%f", value); |
maetugr | 27:9e546fa47c33 | 52 | fclose(fp); |
maetugr | 27:9e546fa47c33 | 53 | } else |
maetugr | 27:9e546fa47c33 | 54 | value = 0; |
maetugr | 27:9e546fa47c33 | 55 | } |
maetugr | 27:9e546fa47c33 | 56 | |
maetugr | 27:9e546fa47c33 | 57 | void RC_Channel::loadCalibrationValue(float * value, char * fileextension) |
maetugr | 27:9e546fa47c33 | 58 | { |
maetugr | 27:9e546fa47c33 | 59 | char path[40]; |
maetugr | 29:8b7362a2ee14 | 60 | sprintf(path, "/local/RC%d%s", index, fileextension); |
maetugr | 27:9e546fa47c33 | 61 | FILE *fp = fopen(path, "r"); |
maetugr | 27:9e546fa47c33 | 62 | if (fp != NULL) { |
maetugr | 27:9e546fa47c33 | 63 | fscanf(fp, "%f", value); |
maetugr | 27:9e546fa47c33 | 64 | fclose(fp); |
maetugr | 27:9e546fa47c33 | 65 | } else |
maetugr | 27:9e546fa47c33 | 66 | value = 0; |
maetugr | 7:9d4313510646 | 67 | } |