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)
Diff: rc.h
- Revision:
- 0:bd282c11d296
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rc.h Thu Aug 12 01:08:40 2010 +0000 @@ -0,0 +1,92 @@ +Timer tick; +InterruptIn rc(p11); +short buf_ppm[6]; +char i = 0, idx, cnt = 0; + + +void get_PPM(){ + switch (idx){ + case 1: + RC.roll = buf_ppm[2]; + RC.throttle = buf_ppm[3]; + RC.pitch = buf_ppm[4]; + RC.yaw = buf_ppm[5]; + RC.sw = buf_ppm[0]; + break; + + case 2: + RC.roll = buf_ppm[3]; + RC.throttle = buf_ppm[4]; + RC.pitch = buf_ppm[5]; + RC.yaw = buf_ppm[0]; + RC.sw = buf_ppm[1]; + break; + + case 3: + RC.roll = buf_ppm[4]; + RC.throttle = buf_ppm[5]; + RC.pitch = buf_ppm[0]; + RC.yaw = buf_ppm[1]; + RC.sw = buf_ppm[2]; + break; + + case 4: + RC.roll = buf_ppm[5]; + RC.throttle = buf_ppm[0]; + RC.pitch = buf_ppm[1]; + RC.yaw = buf_ppm[2]; + RC.sw = buf_ppm[3]; + break; + + case 5: + RC.roll = buf_ppm[0]; + RC.throttle = buf_ppm[1]; + RC.pitch = buf_ppm[2]; + RC.yaw = buf_ppm[3]; + RC.sw = buf_ppm[4]; + break; + + case 0: + RC.roll = buf_ppm[1]; + RC.throttle = buf_ppm[2]; + RC.pitch = buf_ppm[3]; + RC.yaw = buf_ppm[4]; + RC.sw = buf_ppm[5]; + break; + + default: break; + } + test = buf_ppm[2]; + if(cnt<100)test1 = test; + return; +} + + + +void gets_PPM(){ + test = buf_ppm[2]; + if(cnt<100)test1 = test; + //eyetosee(); +} + +void PPM_rise() { + tick.stop(); // Stop timer + buf_ppm[i]=tick.read_us(); // Read timer to buffer[i] i=turns + tick.reset(); // Reset timer + i++; // increment i. + if(buf_ppm[i]>5000) idx = i; + if(i==6) i = 0; + get_PPM(); + cnt++; + if(cnt>200) cnt = 200; + tick.start(); +} + + +/* +Channel 1 = Roll +Channel 2 = Throttle +Channel 3 = Pitch +Channel 4 = Yaw +Channel 5 = Switch +*/ \ No newline at end of file