【问题标题】:Running a void function for specific time [closed]在特定时间运行 void 函数[关闭]
【发布时间】:2016-09-20 05:40:32
【问题描述】:

我正在使用 linux 并编写了一个 .c 文件。我想使用一些 void 类型的函数来执行电机的运动。我的目标是向前移动 2 秒,然后再右转 2 秒等。我怎样才能实现它?功能 MOVE_FORW , MOVE_RIGHT 等是无效的。

函数的返回类型为 void。我的问题是如何让系统在 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();

【问题讨论】:

  • 请说明您的具体问题或添加其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。请参阅“如何提问”页面以获得澄清此问题的帮助。
  • 不清楚你在问什么。 “void 类型的函数”是指函数具有返回类型 void 还是采用 void 参数?无论哪种情况,为什么void 是个问题?就叫吧。请澄清你的问题。最好显示一些具体代码以使其更清晰。
  • 你的问题有很大的空白——代码应该在的空间:(
  • 你不能只获取开始时间然后循环调用move函数直到当前时间超过开始时间2秒吗?
  • 你是说你不知道如何获取当前时间?看看gettimeofdayclock_gettime

标签: c linux time void


【解决方案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");
}

感谢您的尝试和想法!

【讨论】:

    猜你喜欢
    • 2021-01-12
    • 1970-01-01
    • 2021-12-09
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    • 2021-10-02
    • 2018-10-11
    相关资源
    最近更新 更多