From 2792a8d347ba5cf230327d4fa177b055f343929c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=AE=B8=E6=99=9F=E6=98=8A?= <545403892@qq.com> Date: Thu, 28 Dec 2023 15:07:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dad=E8=AF=BB=E5=8F=96=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/adc1256.cpp | 17 ++++++++--- src/adc1256.h | 2 ++ src/board.cpp | 3 +- src/board.h | 3 +- src/main.cpp | 76 ++++++++++++++++++++++++++++++------------------- src/motor.cpp | 13 +++++++++ src/motor.h | 8 ++++++ 7 files changed, 87 insertions(+), 35 deletions(-) create mode 100644 src/motor.cpp create mode 100644 src/motor.h diff --git a/src/adc1256.cpp b/src/adc1256.cpp index 0a2c068..031a217 100644 --- a/src/adc1256.cpp +++ b/src/adc1256.cpp @@ -8,10 +8,10 @@ ADS1256 adc(clockMHZ, vRef, false); void adc1256_init(void) { SPI.begin(); - sleep(0.1); + sleep(0.5); SPI.beginTransaction( SPISettings(clockMHZ * 1000000 / 4, MSBFIRST, SPI_MODE1)); - sleep(0.1); + sleep(0.5); adc.begin(ADS1256_DRATE_30000SPS, ADS1256_GAIN_1, false); Serial.println("ADC Started"); @@ -20,10 +20,19 @@ void adc1256_init(void) adc.setChannel(3); } +void adc1256_reset(void) +{ + adc.reset(); +} + +void adc1256_set_channel(uint8_t ch) +{ + adc.setChannel(ch); +} + float adc1256_read(void) { - adc.waitDRDY(); - adc.setChannel(3); + // adc.waitDRDY(); return adc.readCurrentChannel(); } diff --git a/src/adc1256.h b/src/adc1256.h index 963a40f..fa61dd6 100644 --- a/src/adc1256.h +++ b/src/adc1256.h @@ -3,6 +3,8 @@ // Function declarations void adc1256_init(void); +void adc1256_reset(void); void adc1256_loop(void); float adc1256_read(void); +void adc1256_set_channel(uint8_t ch); #endif // ADC1256_H diff --git a/src/board.cpp b/src/board.cpp index 4087695..c690f2d 100644 --- a/src/board.cpp +++ b/src/board.cpp @@ -1,6 +1,6 @@ #include #include "board.h" -#include "adc1256.h" + void board_init(void) { Serial.begin(115200); // The value does not matter if you use an MCU with native USB @@ -10,4 +10,5 @@ void board_init(void) } Serial.println("ADS1256 - 2023-12-22"); adc1256_init(); + // motor_init(); } diff --git a/src/board.h b/src/board.h index f592abc..70bcd1b 100644 --- a/src/board.h +++ b/src/board.h @@ -1,6 +1,7 @@ #ifndef BOARD_H #define BOARD_H - +#include "adc1256.h" +#include "motor.h" // Your code here void board_init(void); diff --git a/src/main.cpp b/src/main.cpp index db9302e..40caaba 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,5 @@ #include #include "board.h" -#include "adc1256.h" volatile bool task_adc1256_flag = false; String read_val = ""; // 用于储存串口接收的字符串 @@ -46,38 +45,49 @@ void task_ads(void *pt) String part01 = fenge(read_val, ",", 0); String part02 = fenge(read_val, ",", 1); - read_val = ""; - - int count = part01.toInt(); - int delay = part02.toInt(); - - array = static_cast(malloc(sizeof(float) * count)); - memset(array, 0, sizeof(array)); - for (i = 0; i < count; i++) + String part03 = fenge(read_val, ",", 2); + if (part01 == "r") { - array[i] = adc1256_read(); - vTaskDelay(delay); - } - // 对array[i]从小到大排序后取中间一个值 - for (i = 0; i < count - 1; i++) - { - for (j = 0; j < count - 1 - i; j++) + adc1256_set_channel(3); + if (part02 != "" && part03 != "") { - if (array[j] > array[j + 1]) + int count = part02.toInt(); + int delay = part03.toInt(); + + array = (float *)malloc(count * sizeof(float)); + memset(array, 0, sizeof(array)); + for (i = 0; i < count; i++) { - temp = array[j]; - array[j] = array[j + 1]; - array[j + 1] = temp; + array[i] = adc1256_read(); + vTaskDelay(delay); } + // 对array[i]从小到大排序后取中间一个值 + for (i = 0; i < count - 1; i++) + { + for (j = 0; j < count - 1 - i; j++) + { + if (array[j] > array[j + 1]) + { + temp = array[j]; + array[j] = array[j + 1]; + array[j + 1] = temp; + } + } + } + Serial.printf("r,%.4f", array[count / 2]); + free(array); + } + else + { + Serial.println("Error: Invalid input"); } } - Serial.println(array[count / 2], 8); + read_val = ""; + task_adc1256_flag = false; - - free(array); + break; } - vTaskDelay(100); // 延时100ms } } @@ -86,15 +96,23 @@ void task_serial(void *pt) { for (;;) { - while (Serial.available() > 0) + if (task_adc1256_flag == false) { - read_val = read_val + char(Serial.read()); // 接收串口数据 - vTaskDelay(20); + while (Serial.available() > 0) + { + read_val = read_val + char(Serial.read()); // 接收串口数据 + vTaskDelay(20); + } + if (read_val.length() > 0) + { + task_adc1256_flag = true; + } } - if (read_val.length() > 0) + else { - task_adc1256_flag = true; + Serial.read(); } + vTaskDelay(100); // 延时100ms } } diff --git a/src/motor.cpp b/src/motor.cpp new file mode 100644 index 0000000..d3d76e5 --- /dev/null +++ b/src/motor.cpp @@ -0,0 +1,13 @@ +#include +#include "motor.h" + +void motor_init(void) +{ + pinMode(PUL, OUTPUT); + pinMode(DIR, OUTPUT); +} + +void motor_loop(void) +{ + digitalWrite(DIR, LOW); // 先让arduino向驱动板输出一个低电平使其反转。 +} diff --git a/src/motor.h b/src/motor.h new file mode 100644 index 0000000..ddd851e --- /dev/null +++ b/src/motor.h @@ -0,0 +1,8 @@ +#ifndef MOTOR_H +#define MOTOR_H +#define PUL 35 // CLK 定义9输出端口为 PUL(脉冲信号) +#define DIR 34 // CW 定义10输出端口为DIR(方向信号) +// Function declarations +void motor_init(void); +void motor_loop(void); +#endif // MOTOR_H