2個傳感控制(標籤、紅外線)-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 319|回复: 0

[未解决] 2個傳感控制(標籤、紅外線)

[复制链接]
发表于 2022-7-4 02:18 | 显示全部楼层 |阅读模式
條件如下:
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();
    }
}


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 00:37 , Processed in 0.071637 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表