怎么让舵机停下来

怎么让舵机停下来,第1张

以后程序记得写清楚点,规范化一点,还有,需要有必要的注释好不好,不然人家怎么知道你的d1是干嘛的?

这里我当做是你的笔误吧

// duoji1();

前面的“//”应该没有的吧

你的意思应该是:

不断执行duoji1();

同时不断检测按键之类的。

你想想,你进入了duoji1();

当你按下d1后,它怎么能停下来呢,因为d1放在了duoji1();的后面

而且你想要实现及时反应的话,你的算法本身就有问题。

想过另外一个算法吧。

要不就把问题补充详细点,我帮你想一个。

对了我这里有个自己以前做巡线小车的程序,拿去看看吧

#include<reg52h> //头文件

#define uchar unsigned char //宏定义

#define uint unsigned int

sbit infl1=P3^4; //inf代表红外对管,1为外,2为内。

sbit infl2=P3^5;

sbit infr2=P3^6;

sbit infr1=P3^7;

sbit pwm=P1^0; //信号线

uchar jd,count;

void time_init() //中断初始化

{

TMOD=0x01;

TH0=0xff; //高电平单位脉冲时间定为方式1,晶振频率为110592,01ms

TL0=0xa3;

IE=0x82;

TR0=1;

}

void time_ini()interrupt 1 //中断函数

{

TH0=0xff; //重新赋新值

TL0=0xa3;

if(count<jd)

pwm=1;

else pwm=0;

count++;

count=count%200; //脉冲周期20ms

}

void keyscan() //按键扫描

{

if(infr1==0)

{

jd=11;

count=0;

while(infr1==0);

}

if(infr2==0)

{

jd=13;

count=0;

while(infr2==0);

}

if(infl1==0)

{

jd=19;

count=0;

while(infl1==0);

}

if(infl2==0)

{

jd=17;

count=0;

while(infl2==0);

}

}

void main()

{

jd=15; //舵机初始角度为90度,自己定义为0度

count=0;

time_init();

while(1)

{

keyscan();

}

}

舵机响应速度有要求,空载情况一般03秒以下,越快越好。如果嫌它转得太快,可以减少其转动角度,多持续一会儿可以达到同样效果,也可以一点点加大角度,如一次改变10度,保持1秒再增加角度。但某些舵机误差比较大,小角度下动作不准确且缓慢,因此一次调整角度不能太小。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12184600.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存