人体红外传感器加声音传感器控制LED灯带问题-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 374|回复: 3

[未解决] 人体红外传感器加声音传感器控制LED灯带问题

[复制链接]
发表于 2022-7-29 09:15 | 显示全部楼层 |阅读模式
各位大神好!
我理想中的效果是:手在人体红外感应器前挥一下,LED灯带就亮,再挥一下就灭,但是实际因为红外感应有延时的存在,所以程序效果不是想象中的,请问该怎么修改程序?
然后我还想再加个声音传感器,在亮的时候,通过拍手的声音来切换LED亮灯的模式,
简单来说就是(红外控制灯的开关,声控切换灯亮的模式)请问声控这部分程序又该加在哪里?
// 定义红外传感器引脚
const int  irSensorPin = 2;
//定义led灯珠引脚
const int ledPin = 6;
// 定义用来记录红外感应次数的整型变量
int irSensorCounter = 0;
// 记录当前按键的状态
int irSensorState = 0;
// 记录按键之前的状态
int lastirSensorState = 0;

void setup() {
  pinMode(irSensorPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  irSensorState = digitalRead(irSensorPin);
  // 判断当前的按键状态是否和之前有所变化
  if (irSensorState != lastirSensorState) {
    // 判断当前按键是否为按下状态,
    // 如果为按下状态,则记录按键次数的变量加一。
    if (irSensorState == HIGH) {
      // 将记录按键次数的变量加一
      irSensorCounter++;
      // 向串口调试终端打印字符串“on”
      // 表示当前按键状态为按下接通状态
      // 输出完成之后自动换行
      Serial.println("on");
      // 向串口调试终端打印字符串
      // “number of button pushes: ”,此处没有换行
      Serial.print("number of irSensor:  ");
      // 接着上一行尾部,打印记录按键次数变量的数值
      Serial.println(irSensorCounter);
    } else {
      // 向串口调试终端打印字符串“off”
      // 表示当前按键状态为松开状态,也即断开状态
      Serial.println("off");
    }
    // 为了避免信号互相干扰
    // 此处将每次按键的变化时间间隔延迟50毫秒
    delay(50);
  }
  // 将每次loop结束时最新的按键状态进行更新
  irSensorState = irSensorState;

  // 次数是奇数,即此时点亮LED灯
  if (irSensorCounter % 2 == 1) {
    // 点亮板载LED灯
    digitalWrite(ledPin, HIGH);
  } else {
    // 熄灭板载LED灯
    digitalWrite(ledPin, LOW);
  }
}

发表于 2022-7-29 10:27 | 显示全部楼层
人体红外感应器 是啥? 上个照片看看,如果是人体传感器那是很不准的,需要换
 楼主| 发表于 2022-7-29 13:46 | 显示全部楼层
Zoologist 发表于 2022-7-29 10:27
人体红外感应器 是啥? 上个照片看看,如果是人体传感器那是很不准的,需要换 ...


就是这个hc  sr501
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-1 01:33 , Processed in 0.153751 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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