servo project

Dependencies:   mbed

Committer:
vmjack
Date:
Tue May 24 14:00:46 2016 +0000
Revision:
0:17a26d8695b9
5/24 servo project

Who changed what in which revision?

UserRevisionLine numberNew 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 }