2016-05-23 4 views
-4

Ich verwende Linux und habe eine .c-Datei geschrieben. Ich möchte einige Funktionen des Typs void verwenden, um die Bewegung eines Motors durchzuführen. Ich strebe an, es für 2 Sekunden vorwärts zu bewegen, dann nach rechts für weitere 2 usw. zu drehen. Wie kann ich es erreichen? Die Funktionen MOVE_FORW, MOVE_RIGHT usw. sind ungültig.Ausführen einer Void-Funktion für eine bestimmte Zeit

Die Funktion hat den Rückgabetyp void. Mein Problem ist, wie ich das System dazu bringen soll, die Aufgabe, die ich möchte, für eine Echtzeit von 2 Sekunden auszuführen. Welche Art von Verzögerung sollte ich verwenden?

Hier ist der Code: Ich möchte zwei Räder über einen Motor steuern. Die Namen sind symbolisch:

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"); 
} 

Vielen Dank für Ihre Versuch und Gedanken einen Weg:

/* 
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

_Bitte klären Sie Ihr spezifisches Problem oder fügen Sie weitere Details hinzu, um genau das hervorzuheben, was Sie benötigen. Wie es derzeit geschrieben wird, ist es schwer zu sagen, was genau Sie fragen. Weitere Informationen zur Klärung dieser Frage finden Sie auf der Seite "Fragen stellen". –

+1

Es ist nicht klar, was Sie fragen. Mit "Funktionen vom Typ void" meinen Sie, dass die Funktionen den Rückgabetyp "void" oder die Parameter "void" haben. In jedem Fall, warum ist die "Leere" ein Problem? Ruf es einfach an. Bitte klären Sie Ihre Frage. Am besten, wenn Sie einen konkreten Code zeigen, um es klarer zu machen. – kaylum

+0

Es gibt eine massive Lücke in Ihrer Frage - der Raum, wo der Code sein sollte :( –

Antwort

1

ich es einfach gelöst!

Verwandte Themen