Read IMU data at Serial port (p28, p27), data rate <100Hz @115200bps Read 5 channels PPM signal at p11 using InterruptIn Send data via RF Modem at serial port (p13, p14) in 36Hz @115200 Drive i2C motor speed controller at I2C port (p9, p10) in every 10mS (control loop delay time)
rc.h@0:bd282c11d296, 2010-08-12 (annotated)
- Committer:
- agiembed
- Date:
- Thu Aug 12 01:08:40 2010 +0000
- Revision:
- 0:bd282c11d296
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
agiembed | 0:bd282c11d296 | 1 | Timer tick; |
agiembed | 0:bd282c11d296 | 2 | InterruptIn rc(p11); |
agiembed | 0:bd282c11d296 | 3 | short buf_ppm[6]; |
agiembed | 0:bd282c11d296 | 4 | char i = 0, idx, cnt = 0; |
agiembed | 0:bd282c11d296 | 5 | |
agiembed | 0:bd282c11d296 | 6 | |
agiembed | 0:bd282c11d296 | 7 | void get_PPM(){ |
agiembed | 0:bd282c11d296 | 8 | switch (idx){ |
agiembed | 0:bd282c11d296 | 9 | case 1: |
agiembed | 0:bd282c11d296 | 10 | RC.roll = buf_ppm[2]; |
agiembed | 0:bd282c11d296 | 11 | RC.throttle = buf_ppm[3]; |
agiembed | 0:bd282c11d296 | 12 | RC.pitch = buf_ppm[4]; |
agiembed | 0:bd282c11d296 | 13 | RC.yaw = buf_ppm[5]; |
agiembed | 0:bd282c11d296 | 14 | RC.sw = buf_ppm[0]; |
agiembed | 0:bd282c11d296 | 15 | break; |
agiembed | 0:bd282c11d296 | 16 | |
agiembed | 0:bd282c11d296 | 17 | case 2: |
agiembed | 0:bd282c11d296 | 18 | RC.roll = buf_ppm[3]; |
agiembed | 0:bd282c11d296 | 19 | RC.throttle = buf_ppm[4]; |
agiembed | 0:bd282c11d296 | 20 | RC.pitch = buf_ppm[5]; |
agiembed | 0:bd282c11d296 | 21 | RC.yaw = buf_ppm[0]; |
agiembed | 0:bd282c11d296 | 22 | RC.sw = buf_ppm[1]; |
agiembed | 0:bd282c11d296 | 23 | break; |
agiembed | 0:bd282c11d296 | 24 | |
agiembed | 0:bd282c11d296 | 25 | case 3: |
agiembed | 0:bd282c11d296 | 26 | RC.roll = buf_ppm[4]; |
agiembed | 0:bd282c11d296 | 27 | RC.throttle = buf_ppm[5]; |
agiembed | 0:bd282c11d296 | 28 | RC.pitch = buf_ppm[0]; |
agiembed | 0:bd282c11d296 | 29 | RC.yaw = buf_ppm[1]; |
agiembed | 0:bd282c11d296 | 30 | RC.sw = buf_ppm[2]; |
agiembed | 0:bd282c11d296 | 31 | break; |
agiembed | 0:bd282c11d296 | 32 | |
agiembed | 0:bd282c11d296 | 33 | case 4: |
agiembed | 0:bd282c11d296 | 34 | RC.roll = buf_ppm[5]; |
agiembed | 0:bd282c11d296 | 35 | RC.throttle = buf_ppm[0]; |
agiembed | 0:bd282c11d296 | 36 | RC.pitch = buf_ppm[1]; |
agiembed | 0:bd282c11d296 | 37 | RC.yaw = buf_ppm[2]; |
agiembed | 0:bd282c11d296 | 38 | RC.sw = buf_ppm[3]; |
agiembed | 0:bd282c11d296 | 39 | break; |
agiembed | 0:bd282c11d296 | 40 | |
agiembed | 0:bd282c11d296 | 41 | case 5: |
agiembed | 0:bd282c11d296 | 42 | RC.roll = buf_ppm[0]; |
agiembed | 0:bd282c11d296 | 43 | RC.throttle = buf_ppm[1]; |
agiembed | 0:bd282c11d296 | 44 | RC.pitch = buf_ppm[2]; |
agiembed | 0:bd282c11d296 | 45 | RC.yaw = buf_ppm[3]; |
agiembed | 0:bd282c11d296 | 46 | RC.sw = buf_ppm[4]; |
agiembed | 0:bd282c11d296 | 47 | break; |
agiembed | 0:bd282c11d296 | 48 | |
agiembed | 0:bd282c11d296 | 49 | case 0: |
agiembed | 0:bd282c11d296 | 50 | RC.roll = buf_ppm[1]; |
agiembed | 0:bd282c11d296 | 51 | RC.throttle = buf_ppm[2]; |
agiembed | 0:bd282c11d296 | 52 | RC.pitch = buf_ppm[3]; |
agiembed | 0:bd282c11d296 | 53 | RC.yaw = buf_ppm[4]; |
agiembed | 0:bd282c11d296 | 54 | RC.sw = buf_ppm[5]; |
agiembed | 0:bd282c11d296 | 55 | break; |
agiembed | 0:bd282c11d296 | 56 | |
agiembed | 0:bd282c11d296 | 57 | default: break; |
agiembed | 0:bd282c11d296 | 58 | } |
agiembed | 0:bd282c11d296 | 59 | test = buf_ppm[2]; |
agiembed | 0:bd282c11d296 | 60 | if(cnt<100)test1 = test; |
agiembed | 0:bd282c11d296 | 61 | return; |
agiembed | 0:bd282c11d296 | 62 | } |
agiembed | 0:bd282c11d296 | 63 | |
agiembed | 0:bd282c11d296 | 64 | |
agiembed | 0:bd282c11d296 | 65 | |
agiembed | 0:bd282c11d296 | 66 | void gets_PPM(){ |
agiembed | 0:bd282c11d296 | 67 | test = buf_ppm[2]; |
agiembed | 0:bd282c11d296 | 68 | if(cnt<100)test1 = test; |
agiembed | 0:bd282c11d296 | 69 | //eyetosee(); |
agiembed | 0:bd282c11d296 | 70 | } |
agiembed | 0:bd282c11d296 | 71 | |
agiembed | 0:bd282c11d296 | 72 | void PPM_rise() { |
agiembed | 0:bd282c11d296 | 73 | tick.stop(); // Stop timer |
agiembed | 0:bd282c11d296 | 74 | buf_ppm[i]=tick.read_us(); // Read timer to buffer[i] i=turns |
agiembed | 0:bd282c11d296 | 75 | tick.reset(); // Reset timer |
agiembed | 0:bd282c11d296 | 76 | i++; // increment i. |
agiembed | 0:bd282c11d296 | 77 | if(buf_ppm[i]>5000) idx = i; |
agiembed | 0:bd282c11d296 | 78 | if(i==6) i = 0; |
agiembed | 0:bd282c11d296 | 79 | get_PPM(); |
agiembed | 0:bd282c11d296 | 80 | cnt++; |
agiembed | 0:bd282c11d296 | 81 | if(cnt>200) cnt = 200; |
agiembed | 0:bd282c11d296 | 82 | tick.start(); |
agiembed | 0:bd282c11d296 | 83 | } |
agiembed | 0:bd282c11d296 | 84 | |
agiembed | 0:bd282c11d296 | 85 | |
agiembed | 0:bd282c11d296 | 86 | /* |
agiembed | 0:bd282c11d296 | 87 | Channel 1 = Roll |
agiembed | 0:bd282c11d296 | 88 | Channel 2 = Throttle |
agiembed | 0:bd282c11d296 | 89 | Channel 3 = Pitch |
agiembed | 0:bd282c11d296 | 90 | Channel 4 = Yaw |
agiembed | 0:bd282c11d296 | 91 | Channel 5 = Switch |
agiembed | 0:bd282c11d296 | 92 | */ |