
servo project
Dependencies: mbed
main.cpp@0:17a26d8695b9, 2016-05-24 (annotated)
- Committer:
- vmjack
- Date:
- Tue May 24 14:00:46 2016 +0000
- Revision:
- 0:17a26d8695b9
5/24 servo project
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
vmjack | 0:17a26d8695b9 | 1 | // UART TX RX |
vmjack | 0:17a26d8695b9 | 2 | #include "mbed.h" |
vmjack | 0:17a26d8695b9 | 3 | |
vmjack | 0:17a26d8695b9 | 4 | Serial uart_1(D10,D2); // TX : D10 , RX : D2 |
vmjack | 0:17a26d8695b9 | 5 | PwmOut mypwm(A0); // A0 : mypwm output |
vmjack | 0:17a26d8695b9 | 6 | |
vmjack | 0:17a26d8695b9 | 7 | // uart send data |
vmjack | 0:17a26d8695b9 | 8 | int display[6] = {0,0,0,0,0,0}; |
vmjack | 0:17a26d8695b9 | 9 | char num[14] = {254,255,0,0,0,0,0,0,0,0,0,0,0,0}; // char num[0] , num[1] : 2 start byte |
vmjack | 0:17a26d8695b9 | 10 | |
vmjack | 0:17a26d8695b9 | 11 | void init_TIMER(void); |
vmjack | 0:17a26d8695b9 | 12 | void timer1_interrupt(void); |
vmjack | 0:17a26d8695b9 | 13 | void init_uart(void); |
vmjack | 0:17a26d8695b9 | 14 | void separate(void); |
vmjack | 0:17a26d8695b9 | 15 | |
vmjack | 0:17a26d8695b9 | 16 | Ticker timer1; |
vmjack | 0:17a26d8695b9 | 17 | |
vmjack | 0:17a26d8695b9 | 18 | int main() |
vmjack | 0:17a26d8695b9 | 19 | { |
vmjack | 0:17a26d8695b9 | 20 | init_TIMER(); |
vmjack | 0:17a26d8695b9 | 21 | init_uart(); |
vmjack | 0:17a26d8695b9 | 22 | mypwm.period_ms(20); // 設mypwm週期為20ms |
vmjack | 0:17a26d8695b9 | 23 | mypwm.write(0.05); // 0 deg |
vmjack | 0:17a26d8695b9 | 24 | // duty = 0.05 + (0.05/90)*angle |
vmjack | 0:17a26d8695b9 | 25 | while(1) |
vmjack | 0:17a26d8695b9 | 26 | { |
vmjack | 0:17a26d8695b9 | 27 | if(uart_1.readable()) |
vmjack | 0:17a26d8695b9 | 28 | { |
vmjack | 0:17a26d8695b9 | 29 | switch(uart_1.getc()) |
vmjack | 0:17a26d8695b9 | 30 | { |
vmjack | 0:17a26d8695b9 | 31 | case 'a': |
vmjack | 0:17a26d8695b9 | 32 | mypwm.write(0.05 + (0.05/90)*0); // 轉0度 |
vmjack | 0:17a26d8695b9 | 33 | break; |
vmjack | 0:17a26d8695b9 | 34 | case 'b': |
vmjack | 0:17a26d8695b9 | 35 | mypwm.write(0.05 + (0.05/90)*45); // 轉45度 |
vmjack | 0:17a26d8695b9 | 36 | break; |
vmjack | 0:17a26d8695b9 | 37 | case 'c': |
vmjack | 0:17a26d8695b9 | 38 | mypwm.write(0.05 + (0.05/90)*90); // 轉90度 |
vmjack | 0:17a26d8695b9 | 39 | break; |
vmjack | 0:17a26d8695b9 | 40 | default: |
vmjack | 0:17a26d8695b9 | 41 | mypwm.write(0.05 + (0.05/90)*0); // 轉0度 |
vmjack | 0:17a26d8695b9 | 42 | break; |
vmjack | 0:17a26d8695b9 | 43 | } |
vmjack | 0:17a26d8695b9 | 44 | } |
vmjack | 0:17a26d8695b9 | 45 | } |
vmjack | 0:17a26d8695b9 | 46 | } |
vmjack | 0:17a26d8695b9 | 47 | |
vmjack | 0:17a26d8695b9 | 48 | int i = 0; |
vmjack | 0:17a26d8695b9 | 49 | void timer1_interrupt() |
vmjack | 0:17a26d8695b9 | 50 | { |
vmjack | 0:17a26d8695b9 | 51 | // uart send data |
vmjack | 0:17a26d8695b9 | 52 | display[0] = 10; |
vmjack | 0:17a26d8695b9 | 53 | display[1] = 20; |
vmjack | 0:17a26d8695b9 | 54 | display[2] = 30; |
vmjack | 0:17a26d8695b9 | 55 | display[3] = 40; |
vmjack | 0:17a26d8695b9 | 56 | display[4] = 50; |
vmjack | 0:17a26d8695b9 | 57 | display[5] = 60; |
vmjack | 0:17a26d8695b9 | 58 | |
vmjack | 0:17a26d8695b9 | 59 | separate(); |
vmjack | 0:17a26d8695b9 | 60 | |
vmjack | 0:17a26d8695b9 | 61 | int j = 0; |
vmjack | 0:17a26d8695b9 | 62 | int k = 1; |
vmjack | 0:17a26d8695b9 | 63 | while(k) |
vmjack | 0:17a26d8695b9 | 64 | { |
vmjack | 0:17a26d8695b9 | 65 | if(uart_1.writeable()) |
vmjack | 0:17a26d8695b9 | 66 | { |
vmjack | 0:17a26d8695b9 | 67 | uart_1.putc(num[i]); |
vmjack | 0:17a26d8695b9 | 68 | i = i + 1; |
vmjack | 0:17a26d8695b9 | 69 | j = j + 1; |
vmjack | 0:17a26d8695b9 | 70 | } |
vmjack | 0:17a26d8695b9 | 71 | |
vmjack | 0:17a26d8695b9 | 72 | if(j>1) |
vmjack | 0:17a26d8695b9 | 73 | { |
vmjack | 0:17a26d8695b9 | 74 | k = 0; |
vmjack | 0:17a26d8695b9 | 75 | j = 0; |
vmjack | 0:17a26d8695b9 | 76 | } |
vmjack | 0:17a26d8695b9 | 77 | } |
vmjack | 0:17a26d8695b9 | 78 | |
vmjack | 0:17a26d8695b9 | 79 | if(i>13) |
vmjack | 0:17a26d8695b9 | 80 | i = 0; |
vmjack | 0:17a26d8695b9 | 81 | } |
vmjack | 0:17a26d8695b9 | 82 | |
vmjack | 0:17a26d8695b9 | 83 | void init_TIMER() |
vmjack | 0:17a26d8695b9 | 84 | { |
vmjack | 0:17a26d8695b9 | 85 | timer1.attach_us(&timer1_interrupt, 1000.0); // 1 ms interrupt period (1 kHz) |
vmjack | 0:17a26d8695b9 | 86 | } |
vmjack | 0:17a26d8695b9 | 87 | |
vmjack | 0:17a26d8695b9 | 88 | void init_uart() |
vmjack | 0:17a26d8695b9 | 89 | { |
vmjack | 0:17a26d8695b9 | 90 | uart_1.baud(115200); // 設定baudrate |
vmjack | 0:17a26d8695b9 | 91 | } |
vmjack | 0:17a26d8695b9 | 92 | |
vmjack | 0:17a26d8695b9 | 93 | void separate(void) |
vmjack | 0:17a26d8695b9 | 94 | { |
vmjack | 0:17a26d8695b9 | 95 | num[2] = display[0] >> 8; // HSB(8bit)資料存入陣列 |
vmjack | 0:17a26d8695b9 | 96 | num[3] = display[0] & 0x00ff; // LSB(8bit)資料存入陣列 |
vmjack | 0:17a26d8695b9 | 97 | num[4] = display[1] >> 8; |
vmjack | 0:17a26d8695b9 | 98 | num[5] = display[1] & 0x00ff; |
vmjack | 0:17a26d8695b9 | 99 | num[6] = display[2] >> 8; |
vmjack | 0:17a26d8695b9 | 100 | num[7] = display[2] & 0x00ff; |
vmjack | 0:17a26d8695b9 | 101 | num[8] = display[3] >> 8; |
vmjack | 0:17a26d8695b9 | 102 | num[9] = display[3] & 0x00ff; |
vmjack | 0:17a26d8695b9 | 103 | num[10] = display[4] >> 8; |
vmjack | 0:17a26d8695b9 | 104 | num[11] = display[4] & 0x00ff; |
vmjack | 0:17a26d8695b9 | 105 | num[12] = display[5] >> 8; |
vmjack | 0:17a26d8695b9 | 106 | num[13] = display[5] & 0x00ff; |
vmjack | 0:17a26d8695b9 | 107 | } |