- 0から255までの値を入力すると、その値に応じてサーボモータの角度が変わる.
- 0-255以外の値を入力するとプログラムは終了する.
01:#include <sys/types.h>
02:#include <sys/stat.h>
03:#include <sys/ioctl.h>
04:#include <fcntl.h>
05:#include <termios.h>
06:#include <unistd.h>
07:#include <stdio.h>
08:#include <stdlib.h>
09:#include <string.h>
10:
11:#define SERIAL_PORT "/dev/ttyAM1"
12:
13:int main(){
14: int fd;
15: fd = open(SERIAL_PORT, O_RDWR | O_NOCTTY);
16: if(fd < 0){
17: printf("%s doesn't open it\n",SERIAL_PORT);
18: return -1;
19: }
20:
21: struct termios oldtio, newtio;
22: tcgetattr(fd, &oldtio);
23: newtio = oldtio;
24:
25: /* 通信方式の設定・非カノニカル入力処理選択 */
26: newtio.c_iflag = IGNPAR;
27: newtio.c_lflag = 0;
28:
29: /* read関数での文字待ちうけの設定 */
30: newtio.c_cc[VTIME] = 0; /* 値x0.1秒待つ */
31: newtio.c_cc[VMIN] = 1; /* 値の文字分だけ入力されるまで待つ*/
32:
33: /* 通信速度の設定 */
34: cfsetspeed(&newtio, B9600);
35:
36: /* シリアルデバイス初期化処理 */
37: tcflush(fd, TCIFLUSH);
38: tcsetattr(fd, TCSANOW, &newtio);
39:
40: /* サーボ指令の雛形 */
41: /* 個別サーボ駆動モード, サーボコントローラID:3, サーボ番号:0 */
42: unsigned char output[7] = {255,3,4,2,0,127,20};
43:
44: /* input(入力):サーボへの角度指令:有効範囲0(0°)-255(180°) */
45: /* 入力が有効範囲内の間,サーボをコントロール */
46: int input;
47: while(1){
48: printf("input value from 0 to 255[-1:end]:");
49: scanf("%d", &input);
50: if(input < 0 || input > 255){ /* サーボコントロール終了 */
51: break;
52: }
53: /* output[5]がサーボへの角度指令 */
54: output[5] = (unsigned char)input;
55: write(fd, output, sizeof(output));
56: }
57:
58: /* シリアルデバイス終了処理 */
59: tcsetattr(fd, TCSANOW, &oldtio);
60: close(fd);
61: return 0;
62:}