AI代码矫正,arduino代码

我正在学习arduino,在坐开源硬件的任务,设计了一款垃圾桶,有红外识别和容量检测功能,逻辑是在红外检测到有人经过时舵机启动打开垃圾桶,然后当无人后等待五秒然后舵机复位。然后超声波模块在垃圾桶顶部,一直检测下面垃圾到顶部的距离,然后转化为四个小灯亮的数量。同时设置一个开关,当按下开关时直接打开垃圾桶,同时停止红外工作,当再次按下开关时关闭垃圾桶并继续红外工作,自己实在是学不会代码,就让ai做了下代码,但是代码不好使,想找人帮我看一下代码

#include <Servo.h>

// 定义引脚
const int irSensorPin = 2;
const int ultrasonicTriggerPin = 3;
const int ultrasonicEchoPin = 4;
const int servoPin = 5;
const int buttonPin = 8;
const int ledPins[] = {9, 10, 11, 12};

// 定义常量
const int numLEDs = 4;
const int maxDistance = 15;
const int minDistance = 5;
const int debounceDelay = 50; // 按钮去抖延迟

Servo myservo;
int buttonState = 0;
int lastButtonState = 0;
unsigned long lastDebounceTime = 0;
bool irSensorEnabled = true;

void setup() {
  pinMode(irSensorPin, INPUT);
  pinMode(ultrasonicTriggerPin, OUTPUT);
  pinMode(ultrasonicEchoPin, INPUT);
  pinMode(buttonPin, INPUT_PULLUP);
  myservo.attach(servoPin);
  myservo.write(0);

  for (int i = 0; i < numLEDs; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}

void loop() {
  int irSensorValue = digitalRead(irSensorPin);
  int reading = digitalRead(buttonPin);

  if (reading != lastButtonState) {
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (reading != buttonState) {
      buttonState = reading;
      if (buttonState == LOW) {
        irSensorEnabled = !irSensorEnabled;
        myservo.write(irSensorEnabled ? 0 : 90);
      }
    }
  }

  lastButtonState = reading;

  if (irSensorEnabled) {
    if (irSensorValue == HIGH) {
      myservo.write(90);
      delay(5000);
      myservo.write(0);
    }
  }

  int distance = getDistance();
  int level = map(distance, minDistance, maxDistance, numLEDs, 0);

  for (int i = 0; i < numLEDs; i++) {
    if (i < level) {
      digitalWrite(ledPins[i], HIGH);
    } else {
      digitalWrite(ledPins[i], LOW);
    }
  }

  delay(100);
}

int getDistance() {
  digitalWrite(ultrasonicTriggerPin, LOW);
  delayMicroseconds(2);
  digitalWrite(ultrasonicTriggerPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(ultrasonicTriggerPin, LOW);

  long duration = pulseIn(ultrasonicEchoPin, HIGH);
  int distance = duration * 0.034 / 2;

  return distance;
}