修复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,12 +45,16 @@ void task_ads(void *pt)
String part01 = fenge(read_val, ",", 0);
String part02 = fenge(read_val, ",", 1);
read_val = "";
String part03 = fenge(read_val, ",", 2);
if (part01 == "r")
{
adc1256_set_channel(3);
if (part02 != "" && part03 != "")
{
int count = part02.toInt();
int delay = part03.toInt();
int count = part01.toInt();
int delay = part02.toInt();
array = static_cast<float *>(malloc(sizeof(float) * count));
array = (float *)malloc(count * sizeof(float));
memset(array, 0, sizeof(array));
for (i = 0; i < count; i++)
{
@ -71,13 +74,20 @@ void task_ads(void *pt)
}
}
}
Serial.println(array[count / 2], 8);
task_adc1256_flag = false;
Serial.printf("r,%.4f", array[count / 2]);
free(array);
}
else
{
Serial.println("Error: Invalid input");
}
}
read_val = "";
task_adc1256_flag = false;
break;
}
vTaskDelay(100); // 延时100ms
}
}
@ -85,6 +95,8 @@ void task_ads(void *pt)
void task_serial(void *pt)
{
for (;;)
{
if (task_adc1256_flag == false)
{
while (Serial.available() > 0)
{
@ -95,6 +107,12 @@ void task_serial(void *pt)
{
task_adc1256_flag = true;
}
}
else
{
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