ESP32 WROOM 32とLD2410Cを用いて、人を検知した距離を表示するプログラムを考えております。 OPENAIの「o1」に聞いた所、以下のプログラムが出てきました。 これをArduino IDEに入力してもコンパイルが通りません。 修正箇所を教えて戴けないでしょうか。 宜しくお願い致します。 #include <Arduino.h> HardwareSerial sensorSerial(2); static const int BUFFER_SIZE = 128; uint8_t rxBuffer[BUFFER_SIZE]; int bufferIndex = 0; unsigned long lastPrintTime = 0; const unsigned long PRINT_INTERVAL = 500; #define FRAME_HEADER_1 0xFD #define FRAME_HEADER_2 0xFC float parseDistance(const uint8_t* data, int length) { if (length < 10) {^ return -1.0; } uint16_t distRaw = (uint16_t)(data[6] | (data[7] << 8)); float distance_m = distRaw / 1000.0; return distance_m; } void setup() { Serial.begin(115200); delay(1000); Serial.println("LD2410C Radar Test Start"); sensorSerial.begin(256000, SERIAL_8N1, 16, 17); memset(rxBuffer, 0, BUFFER_SIZE); bufferIndex = 0; } void loop() { while (sensorSerial.available() > 0) { uint8_t incomingByte = sensorSerial.read(); rxBuffer[bufferIndex++] = incomingByte; if (bufferIndex >= BUFFER_SIZE) { bufferIndex = 0; } if (bufferIndex >= 2) { if (rxBuffer[0] == FRAME_HEADER_1 && rxBuffer[1] == FRAME_HEADER_2) { if (bufferIndex > 2) { uint8_t frameLength = rxBuffer[2]; if (bufferIndex >= frameLength) { float distance = parseDistance(rxBuffer, frameLength); bufferIndex = 0; unsigned long now = millis(); if (now - lastPrintTime > PRINT_INTERVAL) { lastPrintTime = now; if (distance >= 0.0) { Serial.print("Detected distance: "); Serial.print(distance, 2); Serial.println(" m"); } else { Serial.println("No valid frame or distance data"); } } } } } else { bufferIndex = 0; } } } }
工学