|
條件如下:
1. 紅外線遮蔽感受到人,沒有標籤要會叫。
2. 紅外線遮蔽感受到人,但也有標籤不能叫。
以下是我所寫的程式代碼:
但機器運作後怪怪的,時有時無。
附上程式改寫前跟後的差異。
因為朋友說可能需要用中斷來寫,
但又有人說不需要用中斷。
但最後修改一次的程式碼後,總覺得不知哪裡還怪怪的。
因為拿掉了延遲,那標籤信號搞不好會先觸發感應信號給我的ESP32,不等待人踩進紅外線的信號過來而做出判斷,
不曉得我的想法是否正確,還望高手指點迷津一下!
改寫前:
#include <Arduino.h>
const int relay_P=4; //relay腳位
const int infrared_P=12; //紅外線腳位
const int tag_P=14; //標籤腳位
int infraredState=0;
int tagState=0;
void relay_close()
{
digitalWrite(relay_P,0); //Relay關閉
}
void relay_open()
{
digitalWrite(relay_P,1); //Relay開啟
}
void setup()
{
pinMode(relay_P,OUTPUT);
pinMode(infrared_P,INPUT);
pinMode(tag_P,INPUT);
}
void loop()
{
int tagState=digitalRead(tag_P);
delay(4000);
int infraredState=digitalRead(infrared_P);
if(infraredState==1 && tagState==1)
{
relay_close();
}
else if(infraredState==1 && tagState==0)
{
relay_open();
}
else
{
relay_close();
}
}
改寫後:
#include <Arduino.h>
const int relay_P=4; //relay腳位
const int infrared_P=12; //紅外線腳位
const int tag_P=14; //標籤腳位
int infraredState=0;
int tagState=0;
void relay_close()
{
digitalWrite(relay_P,0); //Relay關閉
}
void relay_open()
{
digitalWrite(relay_P,1); //Relay開啟
}
void setup()
{
pinMode(relay_P,OUTPUT);
pinMode(infrared_P,INPUT);
pinMode(tag_P,INPUT);
}
void loop()
{
bool tagState=digitalRead(tag_P);
bool infraredState=digitalRead(infrared_P);
if(tagState==1)
{
if(infraredstate==1)
{
relay_close();
}
else
{
relay_close();
}
}
|
|