Arduino红外门

Arduino红外门,arduino,infrared,Arduino,Infrared,我想做一个红外传感器门与DFRobot红外传感器(开关)和伺服。问题出在if语句中,因为当红外传感器前面没有任何东西时,digitalread总是在变化,这是它所支持的方式。。。因此,它可以快速关闭和打开。但我希望当传感器前面有东西时,门是打开的,然后是延迟,如果门前面有东西(新的),门就会关上 霉菌代码: #include <Servo.h> Servo myservo;// create servo object to control a servo

我想做一个红外传感器门与DFRobot红外传感器(开关)和伺服。问题出在if语句中,因为当红外传感器前面没有任何东西时,digitalread总是在变化,这是它所支持的方式。。。因此,它可以快速关闭和打开。但我希望当传感器前面有东西时,门是打开的,然后是延迟,如果门前面有东西(新的),门就会关上

霉菌代码:

    #include <Servo.h> 

Servo myservo;// create servo object to control a servo 
            // a maximum of eight servo objects can be created 
int IRsensor =8;

int pos = 180;    // variable to store the servo position 
int d;
boolean kondisi;


void setup() 
{ 
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
  pinMode (IRsensor,INPUT);
  Serial.begin (9600);
} 


void loop() 
 { 
  d = digitalRead (IRsensor);
  bukatutup (d);
  delay (15);
}

void bukatutup(int IR)
{
  Serial.println (IR);
  if (IR == 0 and (kondisi == false))
 {
   pos = 0;
   Serial.println ("terbuka");
  myservo.write (pos);
  kondisi == true;
  delay(1000);
  }
  else if ( IR == 0 and (kondisi == true))
{
   pos = 180;
   Serial.println ("tertutup");
   kondisi == false;
   myservo.write (pos);
   delay (1000);
  }
 }   
#包括
伺服myservo;//创建伺服对象以控制伺服
//最多可以创建八个伺服对象
int IRsensor=8;
int pos=180;//变量来存储伺服位置
int d;
布尔kondisi;
无效设置()
{ 
myservo.attach(9);//将针脚9上的伺服连接到伺服对象
pinMode(红外传感器,输入);
Serial.begin(9600);
} 
void循环()
{ 
d=数字读取(红外传感器);
布卡图普(d);
延误(15);
}
无效bukatutup(内部IR)
{
Serial.println(IR);
if(IR==0和(kondisi==false))
{
pos=0;
Serial.println(“terbuka”);
myservo.write(pos);
kondisi==真;
延迟(1000);
}
else如果(IR==0和(kondisi==true))
{
pos=180;
Serial.println(“tertutup”);
kondisi==假;
myservo.write(pos);
延迟(1000);
}
}   

Thx,

所以您需要引入延迟,这就是问题所在吗?检测到什么东西,打开门,但只有在一段时间内没有检测到任何东西时才关门?不,我希望门前面有东西(新的)时关门好的,对不起。但是你想让门一直关着,直到有一段时间门前什么都没看到,这是问题吗?让我澄清一下,首先传感器会打开(有东西)(门打开),然后它会关闭(没有东西)(门一直打开),然后如果它再次打开(有新东西)它将关闭。当传感器第三次跳闸时,您希望发生什么情况?所以传感器跳闸一次:打开门。然后什么也没检测到:准备关门。检测到:关上门。既然门已经关上,当再次检测到某些东西时,需要发生什么?