//自動出力用、角度rawデータを10回測定の合計、誤差を出す。 #include #include #include #include #include #include #include #include #include #include #define STX 0x02 #define ETX 0x03 using namespace std; //使用する関数の宣言 float mmtodeg(float);//mmからdegに変換する関数 void wrtsrv(float);//deg値を実験系サーバーへ書き込む関数 void wrtldf(int, float);//測定結果をローカルデータファイルに書き込む void start();//busyがoffの時にonにする。onの時は異常終了する。 void finish();//busyをoffにする。 int main(){ start();//busyがoffの時にonにする。onの時は異常終了する。 char serial_dev[]="/dev/ttyUSB0";//シリアルデバイス名 //OLM100のデバイスファイルを指定します。 //USBコネクタにこれしか刺さっていない場合は //多分変更しなくて大丈夫です。 int fd; fd=open(serial_dev,O_RDWR | O_NOCTTY); //ファイルをオープンする。返り値は「ファイル記述子(ファイルディスクリプター)」 //負値の時はファイルオープンに失敗 if(fd < 0){ cout <<"cannot open "<< serial_dev << endl; exit(1); } char rqcom[30]; char ascom[30]; sprintf(rqcom, "%c%s%c",STX,"0107",ETX); //リクエストコマンドの生成 int wnum, rnum; //string position[30]; int posival[30]; for(int j=0;j<10;j++){ wnum = write(fd, rqcom, strlen(rqcom)); rnum = read(fd, ascom, 20); for(int i=0; i<20;i++){ if(i<5){//応答の5文字目以降のみ格納 ascom[i]=' '; } if(ascom[i]==ETX){ ascom[i]=' '; } } //position[j]=ascom; posival[j]=atoi(ascom); // cout << "position"<tm_year + 1900)*10000+(now->tm_mon + 1)*100+(now->tm_mday)) ); ofstream outputfile(fname, ios::app );//ファイル生成,既にあれば追記 if((now->tm_hour)<10){outputfile <<" ";}//1桁の時にスペースを入れてきれいに表示する処理 outputfile << now->tm_hour << ':'; if((now->tm_min)<10){outputfile <<"0";} outputfile << now->tm_min << ':'; if((now->tm_sec)<10){outputfile <<"0";} outputfile << now->tm_sec << '\t' << sum << '\t' << sigma << '\t' << mmtodeg(sum*1.0/100) <