mzhh1985 发表于 2017-10-9 09:49:51

这个问题如何设计算法?

本帖最后由 mzhh1985 于 2017-10-9 11:23 编辑

我想做个感应开关,用单片机和一个红外光电连接,中间串联1个接近开关和一个普通开关。接近开关和普通开关正常闭合的时候,当红外感应到物体通过的时候,改变输出状态。
红外第一次感应到物体时候,输出为0
红外第二次该赢到物体时候,输出为1
以此类推
初始状态不确定,红外和输出都不确定,有四种可能:(0,0);(0,1);(1,0);(1,1),要在任意情况下,均可触发红外改变效果。
下面是我写出来的程序,但是总感觉不对劲,请大神帮忙看看

#include "stdio.h"

int a=0;//红外光电开关
int b=0;//a的是否发生改变
int c=0;//接近开关常闭
int d=0;//普通开关
int e=0;//输出
int old_a=0;

int main()
{
//下面输入输出是我自己调试的,
    printf("输入a的状态:");
    scanf("%d",&a);
   printf("输入b的状态:");
    scanf("%d",&b);
   printf("输入c的状态:");
    scanf("%d",&c);
   printf("输入d的状态:");
    scanf("%d",&d);

    int Ztai(int a,int b,int c);
    old_a =a;
    b=Ztai(a,b,old_a);
    if(b&&c&&d)
    {
   e=1;
    }
   else
    {
      e=0;
    }
    printf("a=%d,b=%d,c=%d,d=%d,e=%d",a,b,c,d,e);
return 0;

}
int Ztai(int a,int b,int c)      //自定义函数
{
    if (a!=old_a)
    {
      b = !b;
    }
    else {
      b=b;
    }
    return b;
}

lumber2388779 发表于 2017-10-9 13:29:43

我没看你的代码
给你个思路,先获取红外和输出状态,如果红外状态是1(有感应),如果再检测到变为0(没感应),那就将输出状态取反;如果红外状态是0,那么红外状态应该由0->1->0这样才算是检测到物体通过,这个时候改变输出状态

上善若水··· 发表于 2017-10-9 13:45:36

首先,红线触发这个你要去获取,你要一直判定是需要一个循环的。下面的代码你看一下,只能给你一个思路,主要是不清楚你这个是用在检测物体个数上的,还是安全区域检测。
#include "stdio.h"

bool bRedOpen = false;        // 红外光电开关
bool bRedTrigger = 0;        // 红外开关被触发
bool bNearOpen = false;        // 接近开关常闭
bool bOpen = false;                // 普通开关
intnRed = 0;                        // 红外开关触发的次数

int main()
{
        // 下面输入输出是我自己调试的,
        printf("输入红外光电开关的状态:");
        scanf("%d", &bRedOpen);
        printf("输入红外开关触发的次数:");
        scanf("%d", &nRed);
        printf("输入接近开关的状态:");
        scanf("%d", &bNearOpen);
        printf("输入普通开关的状态:");
        scanf("%d", &bOpen);

        while (true)
        {
                // 判断红外是否被触发
                if (bRedTrigger == true)
                {
                        nRed = 1;
                }
                else
                {
                        nRed = 0;
                }
        }
        return 0;
}

mzhh1985 发表于 2017-10-9 16:04:14

lumber2388779 发表于 2017-10-9 13:29
我没看你的代码
给你个思路,先获取红外和输出状态,如果红外状态是1(有感应),如果再检测到变为0(没感应), ...

谢谢

mzhh1985 发表于 2017-10-9 16:06:50

上善若水··· 发表于 2017-10-9 13:45
首先,红线触发这个你要去获取,你要一直判定是需要一个循环的。下面的代码你看一下,只能给你一个思路,主 ...

我是用在区域的,这个代码我研究看看,谢谢啊
页: [1]
查看完整版本: 这个问题如何设计算法?