// XIAO ESP32-C3 + RCWL-0516 microwave motion sensor // LED on PWM pin fades up on motion, down after timeout. const int PIR_PIN = D10; // RCWL OUT → D2 (3.3 V logic) const int LED_PIN = D10; // LED+ → D10 through 220 Ω, LED− → GND const int PWM_CH = 0; // LEDC PWM channel const int PWM_BITS = 8; // 0..255 const int PWM_FREQ = 5000; // Hz const uint8_t FADE_STEP = 5; // brightness step const uint16_t FADE_DELAY_MS = 3; const uint32_t HOLD_MS = 5000; // time to wait after last motion uint32_t lastMotionMs = 0; uint8_t target = 0; // 0 or 255 uint8_t level = 0; void setup() { pinMode(PIR_PIN, INPUT); // RCWL output is push-pull 3.3 V analogWrite(D0,255); // ledcSetup(PWM_CH, PWM_FREQ, PWM_BITS); // ledcAttachPin(LED_PIN, PWM_CH); // ledcWrite(PWM_CH, 0); } void loop() { if (digitalRead(PIR_PIN) == HIGH) { lastMotionMs = millis(); target = 255; // fade up on motion } else if (millis() - lastMotionMs > HOLD_MS) { target = 0; // fade down after inactivity } // approach target smoothly if (level < target) level = min(255, level + FADE_STEP); else if (level > target) level = max(0, level - FADE_STEP); // ledcWrite(PWM_CH, level); analogWrite(D0,level); delay(FADE_DELAY_MS); }