2016-05-23 13 views
-4

私はlinuxを使用していて、.cファイルを書きました。私はモーターの動きを行うためにvoid型のいくつかの関数を使いたいと思っています。私はそれを2秒間前進させ、次にもう2等分に向けることを目指しています。どうすればそれを達成できますか?関数MOVE_FORW、MOVE_RIGHTなどは無効です。特定の時間にvoid関数を実行する

この関数の戻り値の型はvoidです。私の問題は、私が2秒のリアルタイムで欲しいタスクをシステムに実行させる方法です。どのような遅れを使うべきですか?

コードは です。モーターで2つのホイールを制御したいと思います。名前が象徴されている:

/* 
DEFINITIONS 

FLEN FILE LEFT ENABLE GPIO177 
FREN FILE RIGHT ENABLE GPIO168 
FLC FILE LEFT C GPIO166 
FRC FILE RIGHT C GPIO169 
FLD FILE LEFT D GPIO167 
FRD FILE RIGHT D GPIO170 

LEH LEFT ENABLE HIGH 
LEL LEFT ENABLE LOW 
LCH LEFT C HIGH 
LCL LEFT C LOW 
LDH LEFT D HIGH 
LDL LEFT D LOW 

REH RIGHT ENABLE HIGH 
REL RIGHT ENABLE LOW 
RCH RIGHT C HIGH 
RCL RIGHT C LOW 
RDH RIGHT D HIGH 
RDL RIGHT D LOW 
*/ 

FILE *FLEN,*FREN,*FLC,*FRC,*FLD,*FRD; 

FILE *DIR_FLEN,*DIR_FREN,*DIR_FLC,*DIR_FRC,*DIR_FLD,*DIR_FRD; 

//LEFT WHEEL 
#define LEH() fprintf(FLEN,"1") 
#define LEL() fprintf(FLEN,"0") 
#define LCH() fprintf(FLC,"1") 
#define LCL() fprintf(FLC,"0") 
#define LDH() fprintf(FLD,"1") 
#define LDL() fprintf(FLD,"0") 

//RIGHT WHEEL 
#define REH() fprintf(FREN,"1") 
#define REL() fprintf(FREN,"0") 
#define RCH() fprintf(FRC,"1") 
#define RCL() fprintf(FRC,"0") 
#define RDH() fprintf(FRD,"1") 
#define RDL() fprintf(FRD,"0") 


void MOVE_FORW(){ 
LEH(); 
LCH(); 
LDL(); 
REH(); 
RCH(); 
RDL(); 
} 



void MOVE_BCKW(){ 
LEH(); 
LCL(); 
LDH(); 
REH(); 
RCL(); 
RDH(); 
} 

void MOVE_RIGHT(){ 
LEH(); 
LCH(); 
LDL(); 
REH(); 
RCL(); 
RDH(); 
} 


void MOVE_LEFT(){ 
LEH(); 
LCL(); 
LDH(); 
REH(); 
RCH(); 
RDL(); 
} 



int main(void){ 

//HANDLING FILES - opening files fow writing (overwriting) 

//EXPORTING AS OUTPUT - DEFINING DIRECTION (out) 

system("echo 177 > /sys/class/gpio/export"); 
printf("FINE\n"); 

DIR_FLEN=fopen("/sys/class/gpio/gpio177/direction","w+"); //GPIO 177 
fprintf(DIR_FLEN,"out"); 
FLEN=fopen("/sys/class/gpio/gpio177/value","w+"); //GPIO 177 



system("echo 168 > /sys/class/gpio/export"); 
DIR_FREN=fopen("/sys/class/gpio/gpio168/direction","w+"); //GPIO 168 
fprintf(DIR_FREN,"out"); 
FREN=fopen("/sys/class/gpio/gpio168/value","w+"); //GPIO 168 


system("echo 166 > /sys/class/gpio/export"); 
DIR_FLC=fopen("/sys/class/gpio/gpio166/direction","w+"); 
fprintf(DIR_FLC,"out"); 
FLC=fopen("/sys/class/gpio/gpio166/value","w+"); 


system("echo 169 > /sys/class/gpio/export"); 
DIR_FRC=fopen("/sys/class/gpio/gpio169/direction","w+"); 
fprintf(DIR_FRC,"out"); 
FRC=fopen("/sys/class/gpio/gpio169/value","w+"); 


system("echo 167 > /sys/class/gpio/export"); 
DIR_FLD=fopen("/sys/class/gpio/gpio167/direction","w+"); 
fprintf(DIR_FLD,"out"); 
FLD=fopen("/sys/class/gpio/gpio167/value","w+"); 


system("echo 170> /sys/class/gpio/export"); 
DIR_FRD=fopen("/sys/class/gpio/gpio170/direction","w+"); 
fprintf(DIR_FRD,"out"); 
FRD=fopen("/sys/class/gpio/gpio170/value","w+"); 


MOVE_FORW(); 
+1

_具体的な問題を明確にしたり、詳細を追加して必要なものを正確に強調してください。現在書かれているとおり、あなたが求めていることを正確に伝えるのは難しいです。この質問を明確にするために、How to Askページを参照してください._ –

+1

あなたが何を求めているかははっきりしません。 "void型の関数"とは、関数が戻り値の型が 'void'か' void'パラメータを持つことを意味しますか?どちらの場合でも、なぜ「無効」が問題になるのですか?ちょうどそれを呼び出します。あなたの質問を明確にしてください。明確にするための具体的なコードを表示すると最適です。 – kaylum

+0

あなたの質問には膨大な空白があります。コードはどこにあるべきですか?( –

答えて

1

私は単にそれを解決:あなたの試みや思考のための

void MOVE_FORW(){ 
LEH(); 
LCH(); 
LDL(); 
REH(); 
RCH(); 
RDL(); 
system("sleep 3"); 
} 



void MOVE_BCKW(){ 
LEH(); 
LCL(); 
LDH(); 
REH(); 
RCL(); 
RDH(); 
system("sleep 3"); 
} 

void MOVE_RIGHT(){ 
LEH(); 
LCH(); 
LDL(); 
REH(); 
RCL(); 
RDH(); 
system("sleep 3"); 
} 


void MOVE_LEFT(){ 
LEH(); 
LCL(); 
LDH(); 
REH(); 
RCH(); 
RDL(); 
system("sleep 3"); 
} 

おかげでどのような方法を!

関連する問題