#include <TM1637Display.h>
// 定义出入口的红外传感器引脚
const int imIRSensorPin = 2;
const int exIRSensorPin = 3;
// 定义TM1637数码管引脚
const int CLK = 8; // TM1637的CLK引脚连接到8号引脚
const int DIO = 9; // TM1637的DIO引脚连接到9号引脚
TM1637Display tm1637(CLK, DIO);
int peopleCount = 0; // 人数计数变量
bool imSensorState = LOW; // 入口传感器的状态
bool exSensorState = LOW; // 出口传感器的状态
void setup() {
// 出入口红外传感器引脚设定为输入模式
pinMode(imIRSensorPin, INPUT);
pinMode(exIRSensorPin, INPUT);
// 初始化TM1637数码管
tm1637.setBrightness(7); // 设置亮度(0-7)
// 初始化串口通信
Serial.begin(9600);
}
void loop() {
// 读取红外传感器的值
int imIRSensorVal = digitalRead(imIRSensorPin);
int exIRSensorVal = digitalRead(exIRSensorPin);
// 如果检测到有人进入且传感器前一时刻状态为“无人”
if (imIRSensorVal == HIGH && !imSensorState) {
// 设定此刻传感器状态为“有人”
imSensorState = HIGH;
// 人数加一
peopleCount++;
// 输出人数到串口监视器窗口
Serial.print("当前人数为: ");
Serial.println(peopleCount);
// 更新TM1637数码管显示的数字
tm1637.showNumberDec(peopleCount);
}
// 如果传感器的值回到低电平,重置传感器状态
if (imIRSensorVal == LOW) {
imSensorState = LOW;
}
// 如果检测到有人离开且传感器前一时刻状态为“无人”
if (exIRSensorVal == HIGH && !exSensorState) {
// 设定此刻传感器状态为“有人”
exSensorState = HIGH;
// 人数减一
peopleCount--;
// 输出人数到串口监视器窗口
Serial.print("当前人数为: ");
Serial.println(peopleCount);
// 更新TM1637数码管显示的数字
tm1637.showNumberDec(peopleCount);
}
// 如果传感器的值回到低电平,重置传感器状态
if (exIRSensorVal == LOW) {
exSensorState = LOW;
}
}