马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 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;
}
首先,红线触发这个你要去获取,你要一直判定是需要一个循环的。下面的代码你看一下,只能给你一个思路,主要是不清楚你这个是用在检测物体个数上的,还是安全区域检测。 #include "stdio.h"
bool bRedOpen = false; // 红外光电开关
bool bRedTrigger = 0; // 红外开关被触发
bool bNearOpen = false; // 接近开关常闭
bool bOpen = false; // 普通开关
int nRed = 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;
}
|