[[ゼミのお話/ロボット工学者養成所]] --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:}