修复ad读取失败

This commit is contained in:
许晟昊 2023-12-28 15:07:48 +08:00
parent edb98ecff6
commit 2792a8d347
7 changed files with 87 additions and 35 deletions

View File

@ -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();
}

View File

@ -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

View File

@ -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();
}

View File

@ -1,6 +1,7 @@
#ifndef BOARD_H
#define BOARD_H
#include "adc1256.h"
#include "motor.h"
// Your code here
void board_init(void);

View File

@ -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
}
}

13
src/motor.cpp Normal file
View File

@ -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向驱动板输出一个低电平使其反转。
}

8
src/motor.h Normal file
View File

@ -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