#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;
  }
}
$abcdeabcde151015202530fghijfghij
4-Digit Display