修复ad读取失败
This commit is contained in:
parent
edb98ecff6
commit
2792a8d347
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#include <HardwareSerial.h>
|
||||
#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();
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef BOARD_H
|
||||
#define BOARD_H
|
||||
|
||||
#include "adc1256.h"
|
||||
#include "motor.h"
|
||||
// Your code here
|
||||
void board_init(void);
|
||||
|
||||
|
|
76
src/main.cpp
76
src/main.cpp
|
@ -1,6 +1,5 @@
|
|||
#include <Arduino.h>
|
||||
#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<float *>(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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
#include <Arduino.h>
|
||||
#include "motor.h"
|
||||
|
||||
void motor_init(void)
|
||||
{
|
||||
pinMode(PUL, OUTPUT);
|
||||
pinMode(DIR, OUTPUT);
|
||||
}
|
||||
|
||||
void motor_loop(void)
|
||||
{
|
||||
digitalWrite(DIR, LOW); // 先让arduino向驱动板输出一个低电平使其反转。
|
||||
}
|
|
@ -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
|
Reference in New Issue