From 4924cab809710adbeab1695f147ffbae56c6bbdc Mon Sep 17 00:00:00 2001 From: "DESKTOP-T3S0O41\\iris_lj" Date: Thu, 23 Jul 2026 09:06:41 +0800 Subject: [PATCH] V2.0.3 --- src/sensor.cpp | 402 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 317 insertions(+), 85 deletions(-) diff --git a/src/sensor.cpp b/src/sensor.cpp index 47318cf..2530972 100644 --- a/src/sensor.cpp +++ b/src/sensor.cpp @@ -1,3 +1,256 @@ +// #include "Sensor.h" +// #include "driver/uart.h" + +// sensor_data sensor_info; + +// EventGroupHandle_t sensor_event_group; +// uint16_t receive_buff1[516]; +// uint16_t receive_buff2[516]; +// volatile uint32_t count = 0; +// uint32_t pos = 0; +// volatile uint64_t frame_count = 0; +// volatile bool read_flag = false; +// #define trigger_pin GPIO_NUM_8 +// #define rst_pin GPIO_NUM_38 +// void IRAM_ATTR handleFallingEdge() +// { +// // read_flag = true; +// // count = 0; +// // if(count == 3) digitalWrite(rst_pin, 0); +// if(digitalRead(trigger_pin) == 0) read_flag = true; +// else read_flag = false; +// } + +// void sensor_init() +// { +// sensor_info.sn = 0; +// if (SPIFFS.begin(true)) +// { +// // Serial.println("SPIFFS mount ok!"); +// sensor_data_read(&sensor_info); +// } +// else +// { +// // Serial.println("SPIFFS mount failed!"); +// } + +// if(sensor_info.flag != 1) +// { +// sensor_info.flag = 0; +// sensor_info.a1 = 2.73e-8; +// sensor_info.a2 = -0.000025; +// sensor_info.a3 = -1.14675; +// sensor_info.a4 = 1082.6422; +// // sensor_info.sn = 1; +// } + +// pinMode(Shutter1_pin, OUTPUT); +// pinMode(Shutter2_pin, OUTPUT); +// pinMode(rst_pin, OUTPUT); + + +// Shutter_Open(Shutter_1); +// // digitalWrite(rst_pin, 1); +// // vTaskDelay(36); +// digitalWrite(rst_pin, 0); +// vTaskDelay(36); + +// Serial2.setTimeout(1); +// Serial2.setRxBufferSize(1032); +// Serial2.setTxBufferSize(256); +// Serial2.begin(921600,SERIAL_8N1,rx,tx); + +// Send_Shutter_Time(12); + +// // Serial2.end(); + +// sensor_event_group = xEventGroupCreate(); + +// pinMode(trigger_pin, INPUT); +// attachInterrupt(digitalPinToInterrupt(trigger_pin), handleFallingEdge, CHANGE); + +// xTaskCreatePinnedToCore(sensor_read_task, "sensor_read_task", 1024*10, NULL, 30, NULL, 0); + +// vTaskDelay(2000); +// digitalWrite(rst_pin, 1); +// shutter_stop(); +// } + + + +// void sensor_rest() +// { +// digitalWrite(rst_pin, 0); +// // for(int i = 0; i < 10000; i++); +// vTaskDelay(1); +// // delayMicroseconds(50); +// digitalWrite(rst_pin, 1); +// } + +// void sensor_write(uint8_t *data,uint32_t len) +// { +// Serial2.write(data,len); +// } + +// void Send_Shutter_Time(uint32_t shutter_time) { +// uint32_t tt = shutter_time*1000; + +// uint8_t t_buff[4]; +// t_buff[0] = *((uint8_t *)&tt+3); +// t_buff[1] = *((uint8_t *)&tt+2); +// t_buff[2] = *((uint8_t *)&tt+1); +// t_buff[3] = *((uint8_t *)&tt); +// sensor_write(t_buff,4); +// } + + +// void sensor_read_task(void *pvParameters) +// { +// uint8_t *p = new uint8_t[1040]; +// int indexnow=0; +// while (1) +// { +// if(read_flag == true) +// { +// int lent=0; +// u_char c=-1; +// while (1) +// { + +// int temp = uart_read_bytes(2,p,1032,10); + +// if(temp == 1032) +// { +// // p[lent] = c; +// // lent++; +// // if(lent >= 1032) +// // { +// lent = 1032; +// break; +// // } +// } +// else +// { +// read_flag = false; +// continue; +// } +// } +// memcpy(receive_buff2,p,lent); + +// frame_count++; +// read_flag = false; +// continue; +// } +// else +// { +// if(Serial2.available()) +// { +// Serial2.readBytes((uint8_t *)p, Serial2.available()); +// } +// vTaskDelay(1); +// } +// } +// } + +// void get_sensor_data(uint16_t *data_buff) +// { +// // sensor_rest(); +// // xEventGroupSetBits(sensor_event_group, START_READ_BIT); +// uint32_t target = frame_count + 1; +// while(frame_count < target) +// { +// vTaskDelay(1); +// } +// if(target == frame_count) +// { +// for (int i = 0; i < 516; i++) +// { +// data_buff[i] = receive_buff2[i]; +// } +// } +// } + +// // void get_sensor_data(uint16_t *data_buff,int timewaitinms) +// // { +// // sensor_rest(); +// // // xEventGroupSetBits(sensor_event_group, START_READ_BIT); +// // vTaskDelay(timewaitinms); +// // uint32_t target = frame_count + 1; +// // while(frame_count < target) +// // { +// // vTaskDelay(1); +// // } +// // if(target == frame_count) +// // { +// // for (int i = 0; i < 516; i++) +// // { +// // data_buff[i] = receive_buff2[i]; +// // } +// // } +// // } +// void Shutter_Open(uint8_t shutter) +// { +// digitalWrite(Shutter2_pin, 1); +// digitalWrite(Shutter1_pin, 0); +// // if (shutter == Shutter_1) +// // { +// // digitalWrite( Shutter2_pin, 1); +// // digitalWrite(Shutter1_pin, 0); + +// // } +// // else if(shutter == Shutter_2) +// // { +// // digitalWrite(Shutter1_pin, 1); +// // } +// } + +// void shutter_stop() +// { +// digitalWrite(Shutter1_pin, 0); +// digitalWrite(Shutter2_pin, 0); +// } + +// void Shutter_Close(uint8_t shutter) +// { +// digitalWrite(Shutter2_pin, 0); +// digitalWrite(Shutter1_pin, 1); +// // if (shutter == Shutter_1) +// // { +// // digitalWrite( Shutter1_pin, 1); +// // digitalWrite( Shutter2_pin, 0); +// // } +// // else if (shutter == Shutter_2) +// // { +// // digitalWrite(Shutter1_pin, 0); +// // } +// } + + +// void sensor_data_save(sensor_data *sensor_data_struct) +// { +// File file; +// file = SPIFFS.open("/system.bin", FILE_WRITE); +// file.write((uint8_t *)sensor_data_struct,sizeof(sensor_data)); +// file.flush(); +// file.close(); +// } + +// void sensor_data_read(sensor_data *sensor_data_struct) +// { +// File file; +// file = SPIFFS.open("/system.bin", FILE_READ); +// file.read((uint8_t *)sensor_data_struct,sizeof(sensor_data)); +// file.flush(); +// file.close(); +// } + + + + + + +/////////////////////////////////////////////////////////////////////////////////// + #include "Sensor.h" #include "driver/uart.h" @@ -14,13 +267,25 @@ volatile bool read_flag = false; #define rst_pin GPIO_NUM_38 void IRAM_ATTR handleFallingEdge() { - // read_flag = true; - // count = 0; - // if(count == 3) digitalWrite(rst_pin, 0); if(digitalRead(trigger_pin) == 0) read_flag = true; else read_flag = false; } + +void uart2_init(void) +{ + const uart_config_t uart_config = { + .baud_rate = 921600, + .data_bits = UART_DATA_8_BITS, + .parity = UART_PARITY_DISABLE, + .stop_bits = UART_STOP_BITS_1, + .flow_ctrl = UART_HW_FLOWCTRL_DISABLE, + }; + // We won't use a buffer for sending data. + uart_driver_install(UART_NUM_2, 1032, 1024 * 2, 0, NULL, 0); + uart_param_config(UART_NUM_2, &uart_config); + uart_set_pin(UART_NUM_2, tx, rx, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE); +} void sensor_init() { sensor_info.sn = 0; @@ -55,14 +320,14 @@ void sensor_init() digitalWrite(rst_pin, 0); vTaskDelay(36); - Serial2.setTimeout(1); - Serial2.setRxBufferSize(1032); - Serial2.setTxBufferSize(256); - Serial2.begin(921600,SERIAL_8N1,rx,tx); + // Serial2.setTimeout(1); + // Serial2.setRxBufferSize(1032); + // Serial2.setTxBufferSize(256); + // Serial2.begin(921600,SERIAL_8N1,rx,tx); - Send_Shutter_Time(12); -// Serial2.end(); + + sensor_event_group = xEventGroupCreate(); @@ -71,9 +336,9 @@ void sensor_init() xTaskCreatePinnedToCore(sensor_read_task, "sensor_read_task", 1024*10, NULL, 30, NULL, 0); - vTaskDelay(2000); - digitalWrite(rst_pin, 1); - shutter_stop(); + // vTaskDelay(100); + // digitalWrite(rst_pin, 1); + // shutter_stop(); } @@ -89,7 +354,8 @@ void sensor_rest() void sensor_write(uint8_t *data,uint32_t len) { - Serial2.write(data,len); + // Serial2.write(data,len); + uart_write_bytes(UART_NUM_2, data, len); } void Send_Shutter_Time(uint32_t shutter_time) { @@ -106,56 +372,55 @@ void Send_Shutter_Time(uint32_t shutter_time) { void sensor_read_task(void *pvParameters) { + uart2_init(); + vTaskDelay(100); + uart_flush_input(UART_NUM_2); + shutter_stop(); + Send_Shutter_Time(12); + vTaskDelay(10); + digitalWrite(rst_pin, 1); + + + uint8_t *p = new uint8_t[1040]; int indexnow=0; while (1) { - if(read_flag == true) + uint32_t length = 0; + uart_get_buffered_data_len(UART_NUM_2, (size_t*)&length); + if(length > 0) { int lent=0; - u_char c=-1; - while (1) - { - - int temp = uart_read_bytes(2,p,1032,10); - - if(temp == 1032) - { - // p[lent] = c; - // lent++; - // if(lent >= 1032) - // { - lent = 1032; - break; - // } - } - else - { - read_flag = false; - continue; - } - } - memcpy(receive_buff2,p,lent); + int temp = uart_read_bytes(2,p,1032,10); - frame_count++; - read_flag = false; - continue; - } - else - { - if(Serial2.available()) + if(temp == 1032 && p[0] == 0xff && p[1] == 0xff) { - Serial2.readBytes((uint8_t *)p, Serial2.available()); + + lent = 1032; + memcpy(receive_buff2,p,lent); + frame_count++; + read_flag = false; + } + else + { + // read_flag = false; + digitalWrite(rst_pin, 0); + vTaskDelay(10); + uart_flush_input(UART_NUM_2); + vTaskDelay(10); + digitalWrite(rst_pin, 1); + + // continue; } - vTaskDelay(1); } + + vTaskDelay(1); } } void get_sensor_data(uint16_t *data_buff) { - // sensor_rest(); - // xEventGroupSetBits(sensor_event_group, START_READ_BIT); + uint32_t target = frame_count + 1; while(frame_count < target) { @@ -170,38 +435,12 @@ void get_sensor_data(uint16_t *data_buff) } } -// void get_sensor_data(uint16_t *data_buff,int timewaitinms) -// { -// sensor_rest(); -// // xEventGroupSetBits(sensor_event_group, START_READ_BIT); -// vTaskDelay(timewaitinms); -// uint32_t target = frame_count + 1; -// while(frame_count < target) -// { -// vTaskDelay(1); -// } -// if(target == frame_count) -// { -// for (int i = 0; i < 516; i++) -// { -// data_buff[i] = receive_buff2[i]; -// } -// } -// } + void Shutter_Open(uint8_t shutter) { digitalWrite(Shutter2_pin, 1); digitalWrite(Shutter1_pin, 0); - // if (shutter == Shutter_1) - // { - // digitalWrite( Shutter2_pin, 1); - // digitalWrite(Shutter1_pin, 0); - - // } - // else if(shutter == Shutter_2) - // { - // digitalWrite(Shutter1_pin, 1); - // } + } void shutter_stop() @@ -214,15 +453,7 @@ void Shutter_Close(uint8_t shutter) { digitalWrite(Shutter2_pin, 0); digitalWrite(Shutter1_pin, 1); - // if (shutter == Shutter_1) - // { - // digitalWrite( Shutter1_pin, 1); - // digitalWrite( Shutter2_pin, 0); - // } - // else if (shutter == Shutter_2) - // { - // digitalWrite(Shutter1_pin, 0); - // } + } @@ -246,3 +477,4 @@ void sensor_data_read(sensor_data *sensor_data_struct) +