Arduino_Sensor_Nodes/sketch_nov29b/sketch_nov29b.ino

207 lines
5.3 KiB
C++

#include "DFRobot_C4001.h"
HardwareSerial RadarSerial(1);
DFRobot_C4001_UART radar(&RadarSerial, 9600, /*rx*/17, /*tx*/16); // ESP32-C6 pins
eMode_t currentMode = eExitMode; // 0=presence, 1=speed
void setPresenceMode() {
radar.setSensorMode(eExitMode);
currentMode = eExitMode;
Serial.println("Switched to PRESENCE mode");
// Presence mode settings from sample
// radar.setDetectionRange(30, 1000, 1000); // min,max,trig (cm)
// radar.setTrigSensitivity(1);
// radar.setKeepSensitivity(2);
// radar.setDelay(100, 4); // trig,keep
sSensorStatus_t data;
data = radar.getStatus();
// 0 stop 1 start
Serial.print("work status = ");
Serial.println(data.workStatus);
// 0 is exist 1 speed
Serial.print("work mode = ");
Serial.println(data.workMode);
// 0 no init 1 init success
Serial.print("init status = ");
Serial.println(data.initStatus);
Serial.println();
/*
* min Detection range Minimum distance, unit cm, range 0.3~25m (30~2500), not exceeding max, otherwise the function is abnormal.
* max Detection range Maximum distance, unit cm, range 2.4~25m (240~2500)
* trig Detection range Maximum distance, unit cm, default trig = max
*/
if(radar.setDetectionRange(/*min*/30, /*max*/1000, /*trig*/1000)){
Serial.println("set detection range successfully!");
}
// set trigger sensitivity 0 - 9
if(radar.setTrigSensitivity(1)){
Serial.println("set trig sensitivity successfully!");
}
// set keep sensitivity 0 - 9
if(radar.setKeepSensitivity(2)){
Serial.println("set keep sensitivity successfully!");
}
/*
* trig Trigger delay, unit 0.01s, range 0~2s (0~200)
* keep Maintain the detection timeout, unit 0.5s, range 2~1500 seconds (4~3000)
*/
if(radar.setDelay(/*trig*/10, /*keep*/4)){
Serial.println("set delay successfully!");
}
// get confige params
Serial.print("trig sensitivity = ");
Serial.println(radar.getTrigSensitivity());
Serial.print("keep sensitivity = ");
Serial.println(radar.getKeepSensitivity());
Serial.print("min range = ");
Serial.println(radar.getMinRange());
Serial.print("max range = ");
Serial.println(radar.getMaxRange());
Serial.print("trig range = ");
Serial.println(radar.getTrigRange());
Serial.print("keep time = ");
Serial.println(radar.getKeepTimerout());
Serial.print("trig delay = ");
Serial.println(radar.getTrigDelay());
}
void setSpeedMode() {
radar.setSensorMode(eSpeedMode);
currentMode = eSpeedMode;
Serial.println("Switched to SPEED mode");
// Speed mode settings from sample
// radar.setDetectThres(11, 1200, 10); // min,max,thres (cm)
// radar.setFrettingDetection(eON);
sSensorStatus_t data;
data = radar.getStatus();
// 0 stop 1 start
Serial.print("work status = ");
Serial.println(data.workStatus);
// 0 is exist 1 speed
Serial.print("work mode = ");
Serial.println(data.workMode);
// 0 no init 1 init success
Serial.print("init status = ");
Serial.println(data.initStatus);
Serial.println();
/*
* min Detection range Minimum distance, unit cm, range 0.3~20m (30~2500), not exceeding max, otherwise the function is abnormal.
* max Detection range Maximum distance, unit cm, range 2.4~20m (240~2500)
* thres Target detection threshold, dimensionless unit 0.1, range 0~6553.5 (0~65535)
*/
if (radar.setDetectThres(/*min*/ 11, /*max*/ 1200, /*thres*/ 10)) {
Serial.println("set detect threshold successfully");
}
// set Fretting Detection
radar.setFrettingDetection(eON);
// get confige params
Serial.print("min range = ");
Serial.println(radar.getTMinRange());
Serial.print("max range = ");
Serial.println(radar.getTMaxRange());
Serial.print("threshold range = ");
Serial.println(radar.getThresRange());
Serial.print("fretting detection = ");
Serial.println(radar.getFrettingDetection());
}
void handleSerialCommands() {
while (Serial.available()) {
char cmd = Serial.read();
if (cmd == 'P' || cmd == 'p') {
setPresenceMode();
} else if (cmd == 'S' || cmd == 's') {
setSpeedMode();
}
}
}
void setup() {
Serial.begin(115200);
while (!Serial);
RadarSerial.begin(9600, SERIAL_8N1, 17, 16); // C4001 UART (RX=16, TX=17)
while (!radar.begin()) {
Serial.println("NO Device found!");
delay(1000);
}
Serial.println("C4001 connected!");
// Start in presence mode
setPresenceMode();
Serial.println("Send 'P' for presence, 'S' for speed mode");
}
void loop() {
handleSerialCommands();
// // Remove if (radar.available()) - just read directly
// sSensorStatus_t status = radar.getStatus(); // Always safe to call
// Serial.print("Status: work=");
// Serial.print(status.workStatus);
// Serial.print(", mode=");
// Serial.print(status.workMode);
// Serial.print(", init=");
// Serial.println(status.initStatus);
if (currentMode == eExitMode) {
// PRESENCE MODE
if (radar.motionDetection()) {
Serial.println("MOTION DETECTED");
}
} else if (currentMode == eSpeedMode) {
// SPEED MODE
Serial.print("Targets: ");
Serial.print(radar.getTargetNumber());
Serial.print(" | Speed: ");
Serial.print(radar.getTargetSpeed(), 2);
Serial.print(" m/s | Range: ");
Serial.print(radar.getTargetRange(), 2);
Serial.print(" m | Energy: ");
Serial.println(radar.getTargetEnergy());
}
delay(100);
}