トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS   ログイン

ゼミのお話/ロボット工学者養成所/一覧/シリアル通信によるデバイス制御/プログラム骨子 の変更点

 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:/* シリアルインターフェースに対応するデバイスファイル */
 12:#define SERIAL_PORT     "/dev/ttyAM1"
 13:
 14:int main(){
 15:
 16:  /* シリアルインターフェースのオープン */
 17:  /* O_RDWR: 入出力用にオープン */
 18:  /* O_NOCTTY: ノイズ等による不意のctrl-cを防ぐため,tty制御なし */
 19:  /* シリアルインターフェースをint型変数"fd"の名前で扱えるように */
 20:  int fd;
 21:  fd = open(SERIAL_PORT, O_RDWR | O_NOCTTY);
 22:  if(fd < 0){
 23:    printf("%s doesn't open it\n",SERIAL_PORT);
 24:    return -1;
 25:  }
 26:
 27:  /* シリアルポートの設定を行う変数を宣言 */
 28:  struct termios oldtio, newtio;
 29:  /* 現在の設定を oldtio に保存 */
 30:  tcgetattr(fd, &oldtio);
 31:  /* 今回使用する設定 newtio に現在の設定 oldtio をコピー */
 32:  newtio = oldtio;
 33:
 34:  /* 入出力スピードの設定 */
 35:  /* 以下の方法1または方法2で設定.どちらかでよいので方法2を有効にしている */
 36:
 37:  /* 方法1 */
 38:  /* cfsetispeed(&newtio, B115200); /* 入力スピード設定 */
 39:  /* cfsetospeed(&newtio, B115200); /* 出力スピード設定 */
 40:
 41:  /* 方法2 */
 42:  cfsetspeed(&newtio, B115200); /* 入出力スピード設定 */
 43:
 44:  /* 27行目-42行目までの設定を有効にする */
 45:  tcflush(fd, TCIFLUSH);
 46:  tcsetattr(fd, TCSANOW, &newtio); /* 設定を有効に */
 47:
 48:  /* ここからがユーザ固有の処理:例として文字列 hello を送信(write関数).受信はread関数 */
 49:  char buf[20];
 50:  strcpy(buf,"hello");
 51:  write(fd, buf , sizeof(buf)); /* write関数:送信処理 */
 52:
 53:  /* デバイスの設定を戻す */
 54:  tcsetattr(fd, TCSANOW, &oldtio);
 55:  close(fd);
 56:  return 0;
 57:}