三点倒立

三点倒立パソコン側プログラム(マイコン側プログラムはfour_cr.c)

/* Windows版シリアル送信(m_check.c) 三点倒立 2003/09/() */ four_cr.c #include <windows.h> #include <stdio.h> #include <ctype.h> #define MOTOR_NUM 12 #define MOTION_NUM 14 unsigned char rc[MOTOR_NUM][15]= {{ 90, 90, 90, 90, 90, 90,100,100,100,100,100,100,100,100,100}, {150,150, 90, 90, 90, 90,150,150,150,150,150,150,150,150,100}, {100,100,100,100,100,100,120,120,120,120,120,120,120,120,120}, {179,179,179, 90, 0, 0, 0, 0, 0, 0, 0, 90,179,179, 90}, {150,179,179,179,179,179,179,150,150,150,170,170, 80, 70,150}, {100,100,100,100,100, 0, 0, 0,100,100,100,100,100,100,100}, { 90, 90, 90, 90, 90, 90, 80, 80, 80, 80, 80, 80, 80, 80, 80}, { 30, 30, 90, 90, 90, 90, 30, 30, 30, 30, 30, 30, 30, 30, 80}, { 80, 80, 80, 80, 80, 80, 50, 50, 50, 50, 50, 50, 50, 50, 50}, { 0, 0, 0, 90,179,179,179,179,179,179,179, 90, 0, 0, 90}, { 30, 0, 0, 0, 0, 0, 0, 30, 30, 30, 10, 10,100,110, 30}, { 80, 80, 80, 80, 80,179,179,179, 80, 80, 80, 80, 80, 80, 80}}; /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 */ unsigned char inter[15]={15,25, 25, 25, 25, 5, 5, 5, 10, 15, 15, 15, 100, 10, 30}; typedef enum { // ボーレート設定リスト br2400 = 2400, br4800 = 4800, br9600 = 9600, br19200 = 19200, br31250 = 31250, br38400 = 38400, br57600 = 57600 } BaudRate; /* シリアルポート初期化関数 */ void InitSer(DCB dcb, HANDLE* hComm, BaudRate baud) { *hComm = CreateFile( "COM1", /* シリアルポートの指定 */ GENERIC_WRITE, /* アクセスモード */ 0, /* 共有モード */ NULL, /* セキュリティ属性 */ OPEN_EXISTING, /* 作成フラグ */ FILE_ATTRIBUTE_NORMAL, /* 属性 */ NULL /* テンプレートのハンドル */ ); GetCommState(*hComm, &dcb); /* DCB を取得 */ dcb.BaudRate = baud; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; SetCommState(*hComm, &dcb); /* DCB を設定 */ } int chop(char* input) { int i, c_stat, r_stat=1; for(i=0; input[i]!='\n'; i++){ c_stat=isdigit(input[i]); if(c_stat==0){ r_stat=-1; } } input[i]='\0'; return(r_stat); } int checkn(int maxn) { char input[1024]; /* 入力用 */ int status, status2, value=-1; /* エラー処理,数値格納 */ while(1){ printf("\n送信数値を入力(0-%d)%dで終了:", maxn,maxn+1); fgets(input, 1024, stdin); status=sscanf(input, "%d", &value); status2=chop(input); if(status!=1 || status2<0){ printf("数値以外が入力されました\n"); printf("入力文字%s\n", input); }else if(value>=0 && value <=maxn+1){ if(value==maxn+1){ return(-1); } return(value); }else if(status==1){ printf("0-%dの範囲外の数値が入力されました\n",maxn); printf("入力数値%d\n", value); } value=-1; } } int main(void) { DCB dcb; /* 通信パラメータ */ HANDLE hComm; /* シリアルポートのハンドル */ DWORD writesize; /* ポートへ書き込んだバイト数 */ BaudRate baud=br38400; /* BaudRate設定用 */ unsigned char sendd1,sendd2; /* 数値格納 */ int echeck1,echeck2; InitSer(dcb, &hComm, baud); sendd1=252; WriteFile(hComm, &sendd1, 1, &writesize, NULL); /* シリアルポートに書き込み */ sendd1=MOTION_NUM; WriteFile(hComm, &sendd1, 1, &writesize, NULL); /* シリアルポートに書き込み */ sendd1=1; WriteFile(hComm, &sendd1, 1, &writesize, NULL); /* シリアルポートに書き込み */ for(echeck1=0; echeck1<MOTOR_NUM; echeck1++){ for(echeck2=0; echeck2<MOTION_NUM; echeck2++){ WriteFile(hComm, &rc[echeck1][echeck2], 1, &writesize, NULL); /* シリアルポートに書き込み */ } } sendd1=247; WriteFile(hComm, &sendd1, 1, &writesize, NULL); for(echeck1=0; echeck1<MOTION_NUM; echeck1++){ WriteFile(hComm, &inter[echeck1], 1, &writesize, NULL); } sendd1=254; WriteFile(hComm, &sendd1, 1, &writesize, NULL); /* シリアルポートに書き込み */ while(1){ echeck1=checkn(253); sendd1=echeck1; if(echeck1<0){ break; } WriteFile(hComm, &sendd1, 1, &writesize, NULL); /* シリアルポートに書き込み */ } CloseHandle(hComm); return(0); }

三点倒立

4足歩行ロボットの目次へ

トップページへ

SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送