打印

我写的一个程序,功能是:让门关闭3秒之后,开始锁门。我

[复制链接]
1856|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kongxy|  楼主 | 2013-3-31 09:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 kongxy 于 2013-3-31 09:26 编辑

if(/*门关上*/)
{
   time=0;//计时器
   while(/*门关上*/)
   {
          if(time>3)
          {
                 //锁门。
                 time=0;
          }
    }
}
我做了一个实验:让门关上,然后立即打开。。。现象是:门倒是可以打开,但是3秒之后,锁锁上了。。。。这是怎么回事

相关帖子

沙发
NE5532| | 2013-3-31 09:31 | 只看该作者
while(1)
{
if(门==开)
  Null;
else
{
  if time >=3秒
  锁门
}
}

你是想要这个效果吧,另外这个程序会反复锁门,楼主再动下脑筋怎么改进咯。

使用特权

评论回复
板凳
diweo| | 2013-3-31 09:33 | 只看该作者
一会儿“让门关闭3秒之后,开始锁门”,一会儿‘让门关上,然后立即打开’,请问你的目的到底是什么?

使用特权

评论回复
地板
kongxy|  楼主 | 2013-3-31 09:37 | 只看该作者
diweo 发表于 2013-3-31 09:33
一会儿“让门关闭3秒之后,开始锁门”,一会儿‘让门关上,然后立即打开’,请问你的目的到底是什么? ...

我的目的是:我关门的时候,又不想 关了。。可以打开,而且打开之后门不上锁

使用特权

评论回复
5
kongxy|  楼主 | 2013-3-31 09:40 | 只看该作者
NE5532 发表于 2013-3-31 09:31
while(1)
{
if(门==开)

版主大人的逻辑和我的一样啊...我的是给一个关门信号,然后进行下面程序。。版主的是while(1)。。。。我不明白为什么我的程序会出现我说的那种情况。

使用特权

评论回复
6
diweo| | 2013-3-31 09:45 | 只看该作者
是不是其他地方有上锁的操作?你贴出的代码好像不会在门开的时候导致上锁。

使用特权

评论回复
7
kongxy|  楼主 | 2013-3-31 10:07 | 只看该作者
diweo 发表于 2013-3-31 09:45
是不是其他地方有上锁的操作?你贴出的代码好像不会在门开的时候导致上锁。 ...

/*----------------------------------------------                                                              
                     锁门程序void lock();        
------------------------------------------------*/
void lock()      //门关上;magnet_sw==0,单片机会收到关门信号进入lock()
{  
     Time=0;
     while(magnet_sw==0)        //门关上
     {
           if(Time>5)
           {
                 Time=0;
                       锁门
          }
   }

使用特权

评论回复
8
NE5532| | 2013-3-31 10:48 | 只看该作者
kongxy 发表于 2013-3-31 09:40
版主大人的逻辑和我的一样啊...我的是给一个关门信号,然后进行下面程序。。版主的是while(1)。。。。 ...

你再画流程图来看看呢。

使用特权

评论回复
9
reille| | 2013-3-31 10:55 | 只看该作者
kongxy 发表于 2013-3-31 10:07
/*----------------------------------------------                                                    ...

你的magnet_sw这个变量控制对了没有?你的unlock(门打开的时候是怎么处理的)函数呢,可否贴出来看下?
PS,你的代码这样写是不好的,像2楼的写法较好些

使用特权

评论回复
10
李冬发| | 2013-3-31 11:03 | 只看该作者
你的“门关上”这个信号的检测有问题。
肯定是检测到“门关上”后就没再继续检测,成了不是“实时”的信号了。变脏了...

使用特权

评论回复
11
kongxy|  楼主 | 2013-3-31 12:52 | 只看该作者
本帖最后由 kongxy 于 2013-3-31 12:56 编辑
reille 发表于 2013-3-31 10:55
你的magnet_sw这个变量控制对了没有?你的unlock(门打开的时候是怎么处理的)函数呢,可否贴出来看下?
...

void lock()
{  
        Time=0;
        while(magnet_sw==0)        //门关上
        {
               if(Time>3)
              {
                   Time=0;
                   while(limit_sw_l==1)//门没有完全上锁
                  {         
                     Ia=0;          //正转
                     Ib=1;
                     deletey(500);        //等待电流稳定
                     if((ADC(0x05)>1))
                     {
                         FMQ_2();
                          vert_time++;
                          LED_R=1;
                          Ia=0;           //停
                          Ib=0;
                          deletey(20000);
                          while(limit_sw_o==1) //反转到门完全打开位置
                          {
                               Ia=1;                  //反转
                               Ib=0;
                               deletey(200);
                               if((ADC(0x05)>1))  //反转过程中发生再次发生堵转,堵转次数加一,跳出反转程序。
                               {
                                  vert_time++;
                                  break;
                               }
                          }
                          Ia=0;                  //停
                          Ib=0;
                          deletey(20000);
                   }  //if((ADC(0x05)>1))
                    if(vert_time>2)                //        堵转次数超过2次,报警
                    {
                       vert_time=0;
                       FMQ_3();
                    }

              }// while(limit_sw_l==1)门没有完全上锁
              Ia=0;                  //停
              Ib=0;
             door_state=0;                 //置门的状态为关闭
                 
     }//if(Time>3)

}
        
}

使用特权

评论回复
12
fengxt27| | 2013-3-31 16:39 | 只看该作者
楼主在锁们之前再次检测门是否关好试下,
if(/*门关上*/)
{
   time=0;//计时器
   while(/*门关上*/)
   {
          if(time>3)
          {
                 if(/*门关上*/)
                 {//锁门。};
                 time=0;
          }
    }
}

使用特权

评论回复
13
wujianwxj| | 2013-3-31 17:15 | 只看该作者
检测关门信号的时间放长一点

使用特权

评论回复
14
ifpga| | 2013-4-1 08:44 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

14

帖子

0

粉丝