![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
chenghuansmalljj
main.cpp@0:82a391c84dbb, 2018-04-11 (annotated)
- Committer:
- enormousjj
- Date:
- Wed Apr 11 04:53:08 2018 +0000
- Revision:
- 0:82a391c84dbb
servobitch
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
enormousjj | 0:82a391c84dbb | 1 | #include "mbed.h" |
enormousjj | 0:82a391c84dbb | 2 | |
enormousjj | 0:82a391c84dbb | 3 | //****************************************************************************** Define |
enormousjj | 0:82a391c84dbb | 4 | //The number will be compiled as type "double" in default |
enormousjj | 0:82a391c84dbb | 5 | //Add a "f" after the number can make it compiled as type "float" |
enormousjj | 0:82a391c84dbb | 6 | #define Ts 0.01f //period of timer1 (s) |
enormousjj | 0:82a391c84dbb | 7 | #define Servo_Period 20 |
enormousjj | 0:82a391c84dbb | 8 | |
enormousjj | 0:82a391c84dbb | 9 | |
enormousjj | 0:82a391c84dbb | 10 | |
enormousjj | 0:82a391c84dbb | 11 | //****************************************************************************** End of Define |
enormousjj | 0:82a391c84dbb | 12 | |
enormousjj | 0:82a391c84dbb | 13 | //****************************************************************************** I/O |
enormousjj | 0:82a391c84dbb | 14 | //PWM |
enormousjj | 0:82a391c84dbb | 15 | PwmOut servo(A0); |
enormousjj | 0:82a391c84dbb | 16 | //Timer Setting |
enormousjj | 0:82a391c84dbb | 17 | Ticker timer; |
enormousjj | 0:82a391c84dbb | 18 | //****************************************************************************** End of I/O |
enormousjj | 0:82a391c84dbb | 19 | |
enormousjj | 0:82a391c84dbb | 20 | //****************************************************************************** Functions |
enormousjj | 0:82a391c84dbb | 21 | void init_timer(void); |
enormousjj | 0:82a391c84dbb | 22 | void init_PWM(void); |
enormousjj | 0:82a391c84dbb | 23 | void timer_interrupt(void); |
enormousjj | 0:82a391c84dbb | 24 | //****************************************************************************** End of Functions |
enormousjj | 0:82a391c84dbb | 25 | |
enormousjj | 0:82a391c84dbb | 26 | //****************************************************************************** Variables |
enormousjj | 0:82a391c84dbb | 27 | // Servo |
enormousjj | 0:82a391c84dbb | 28 | float zero_degree_duty = 0.062; // 0.025~0.115(-90~+90)(not linear, so the experiment is needed) |
enormousjj | 0:82a391c84dbb | 29 | float pos_90degree_duty = 0.1067; //0.1067 =true //0.113 |
enormousjj | 0:82a391c84dbb | 30 | float neg_90degree_duty = 0.026; //0.025 |
enormousjj | 0:82a391c84dbb | 31 | |
enormousjj | 0:82a391c84dbb | 32 | |
enormousjj | 0:82a391c84dbb | 33 | |
enormousjj | 0:82a391c84dbb | 34 | //****************************************************************************** End of Variables |
enormousjj | 0:82a391c84dbb | 35 | |
enormousjj | 0:82a391c84dbb | 36 | //****************************************************************************** Main |
enormousjj | 0:82a391c84dbb | 37 | int main() |
enormousjj | 0:82a391c84dbb | 38 | { |
enormousjj | 0:82a391c84dbb | 39 | init_timer(); |
enormousjj | 0:82a391c84dbb | 40 | init_PWM(); |
enormousjj | 0:82a391c84dbb | 41 | |
enormousjj | 0:82a391c84dbb | 42 | while(1) |
enormousjj | 0:82a391c84dbb | 43 | { |
enormousjj | 0:82a391c84dbb | 44 | } |
enormousjj | 0:82a391c84dbb | 45 | } |
enormousjj | 0:82a391c84dbb | 46 | //****************************************************************************** End of Main |
enormousjj | 0:82a391c84dbb | 47 | |
enormousjj | 0:82a391c84dbb | 48 | //****************************************************************************** timer_interrupt |
enormousjj | 0:82a391c84dbb | 49 | void timer_interrupt() |
enormousjj | 0:82a391c84dbb | 50 | { |
enormousjj | 0:82a391c84dbb | 51 | |
enormousjj | 0:82a391c84dbb | 52 | |
enormousjj | 0:82a391c84dbb | 53 | static int counter =0; |
enormousjj | 0:82a391c84dbb | 54 | static float servo_counter =zero_degree_duty; |
enormousjj | 0:82a391c84dbb | 55 | |
enormousjj | 0:82a391c84dbb | 56 | counter ++; |
enormousjj | 0:82a391c84dbb | 57 | |
enormousjj | 0:82a391c84dbb | 58 | if(counter >= 600) |
enormousjj | 0:82a391c84dbb | 59 | { |
enormousjj | 0:82a391c84dbb | 60 | return ; |
enormousjj | 0:82a391c84dbb | 61 | |
enormousjj | 0:82a391c84dbb | 62 | } |
enormousjj | 0:82a391c84dbb | 63 | else |
enormousjj | 0:82a391c84dbb | 64 | { |
enormousjj | 0:82a391c84dbb | 65 | if(counter %2 ==0) |
enormousjj | 0:82a391c84dbb | 66 | { |
enormousjj | 0:82a391c84dbb | 67 | servo_counter += ((pos_90degree_duty -zero_degree_duty)/300); |
enormousjj | 0:82a391c84dbb | 68 | //6sec 轉90度 |
enormousjj | 0:82a391c84dbb | 69 | servo.write(servo_counter); |
enormousjj | 0:82a391c84dbb | 70 | } |
enormousjj | 0:82a391c84dbb | 71 | |
enormousjj | 0:82a391c84dbb | 72 | } |
enormousjj | 0:82a391c84dbb | 73 | |
enormousjj | 0:82a391c84dbb | 74 | |
enormousjj | 0:82a391c84dbb | 75 | |
enormousjj | 0:82a391c84dbb | 76 | // Code for servo motor |
enormousjj | 0:82a391c84dbb | 77 | } |
enormousjj | 0:82a391c84dbb | 78 | //****************************************************************************** End of timer_interrupt |
enormousjj | 0:82a391c84dbb | 79 | |
enormousjj | 0:82a391c84dbb | 80 | //****************************************************************************** init_timer |
enormousjj | 0:82a391c84dbb | 81 | void init_timer() |
enormousjj | 0:82a391c84dbb | 82 | { |
enormousjj | 0:82a391c84dbb | 83 | timer.attach_us(&timer_interrupt, 10000);//10ms interrupt period (100 Hz) |
enormousjj | 0:82a391c84dbb | 84 | } |
enormousjj | 0:82a391c84dbb | 85 | //****************************************************************************** End of init_timer |
enormousjj | 0:82a391c84dbb | 86 | |
enormousjj | 0:82a391c84dbb | 87 | //****************************************************************************** init_PWM |
enormousjj | 0:82a391c84dbb | 88 | void init_PWM() |
enormousjj | 0:82a391c84dbb | 89 | { |
enormousjj | 0:82a391c84dbb | 90 | servo.period_ms(Servo_Period); |
enormousjj | 0:82a391c84dbb | 91 | servo.write(zero_degree_duty); |
enormousjj | 0:82a391c84dbb | 92 | } |
enormousjj | 0:82a391c84dbb | 93 | //****************************************************************************** End of init_PWM |