#include "headfile.h" #include "car_adc.h" unsigned int adc_get(uint32_t adc_periph, uint8_t adc_ch); float Kp = 0.2; float Ki = 0.5; float Kd = 0.5; double error = 0; double lastError = 0; ad_valu[0][i]= adc_get(ADC0, ADC_CH_10); ad_valu[1][i] = adc_get(ADC0, ADC_CH_11); ad_valu[4][i]= adc_get(ADC0, ADC_CH_12); ad_valu[5][i]= adc_get(ADC0, ADC_CH_13); ad_valu[6][i]= adc_get(ADC0, ADC_CH_15); error = ad_valu[0][i]+ad_valu[1][i] - ad_valu[5][i]- ad_valu[6][i]; double lastOutput = 0; double lastDeltaError=0; double deltaError = error - lastError; double integral=0; integral += error; double deltaOutput = Kp *error +Ki * integral + Kd * deltaError; lastError = error; error=0; motor_forward(right,1000+deltaOutput); motor_forward(left,1000-deltaOutput); } 为什么提示没有定义car_get
时间: 2024-04-18 15:23:50 浏览: 145
根据提供的代码,我们可以看到您调用了一个名为`adc_get()`的函数,但是在代码中并没有定义这个函数。提示错误“没有定义car_get”是因为编译器无法找到该函数的定义。要解决这个问题,您需要确保在代码中提供了`adc_get()`函数的定义或者在代码之前包含了正确的头文件以便引入该函数的定义。请确认是否有名为`adc_get()`的函数定义或者检查头文件是否正确引入。
相关问题
void adc_channel_init(uint32_t adc_periph, uint8_t adc_ch) { adc_init(adc_periph, adc_ch); } unsigned int adc_get(uint32_t adc_periph, uint8_t adc_ch) { unsigned int adc_value; adc_value = adc_convert(adc_periph, adc_ch); //adcת»»Ò»´Î return adc_value; }是什么意思
这段代码是一个简单的封装了 ADC 初始化和转换的函数。以下是对每个函数的解释:
. `void adc_channel_init(uint32_t adc_periph, uint8_t adc_ch)`
这个函数用于初始化 ADC 通道。它接受两个参数:`adc_periph` 表示 ADC 外设,`adc_ch` 表示要初始化的 ADC 通道。该函数内部调用了 `adc_init` 函数来完成初始化操作。
2. `unsigned int adc_get(uint32_t adc_periph, uint8_t adc_ch)`
这个函数用于获取 ADC 转换结果。它接受两个参数:`adc_periph` 表示 ADC 外设,`adc_ch` 表示要进行转换的 ADC 通道。该函数内部调用了 `adc_convert` 函数来进行一次 ADC 转换,并将转换结果保存在 `adc_value` 变量中,最后返回该值。
这些函数的目的是提供一个简单的接口,使得在应用程序中使用 ADC 更加方便。通过调用 `adc_channel_init` 函数来初始化 ADC 通道,然后通过调用 `adc_get` 函数来获取转换结果。
请注意,这段代码是一个示例,并不完整。在使用这些函数之前,您需要确保已经包含了正确的头文件,并正确配置了 ADC 外设和通道。
如果您需要进一步的帮助,请提供更多关于您的应用场景和具体问题的信息,以便我能够更准确地回答您的问题。
#include "headfile.h" //#include "common.h" #include "math.h" //#include "cmath" extern unsigned int AD_L[8]; extern int AD[8]; extern int chazhi[10]; extern float sensor_to_one[8]; extern unsigned int max_v[8]; void AD_nit(); void Max_ADC(void); void Max_ADC_H(void); //void Read_AD(void); //void Read_AD_H(void); //void Analyse_ADC(void); void Find_Max(void); void Read_ADC(void); //float absf(int a,int b); int ADC_2(void); void Computer_Display2(void); uint16_t ad_valu[8][5]; int16_t min[2][3], max[2][3]; uint16_t AD_L[8]; int16_t AD[8]; uint16_t AD_Round[8]; uint16_t AD_V[5]; uint16_t adsum[8]; uint16_t AD_sum[8]; uint16_t ad_valu1[8]; float sensor_to_one[8]; uint16_t max_v[8], min_v[8]; int16_t centre = 4000; int16_t chazhi[10]; int16_t move = 0; float Previous_Error[12]; float Previous_Error1[12]; void AD_nit() { adc_init(ADC0, ADC_CH_10, ADC_SAMPLETIME_55POINT5, ADC_RES_12BIT); adc_init(ADC0, ADC_CH_11, ADC_SAMPLETIME_55POINT5, ADC_RES_12BIT); adc_init(ADC0, ADC_CH_12, ADC_SAMPLETIME_55POINT5, ADC_RES_12BIT); adc_init(ADC0, ADC_CH_13, ADC_SAMPLETIME_55POINT5, ADC_RES_12BIT); adc_init(ADC0, ADC_CH_15, ADC_SAMPLETIME_55POINT5, ADC_RES_12BIT);为什么AD_L[8]会出现错误
AD_L[8]出现错误可能是因为它在代码中重复定义两次。在给变量命名时,要确保每个变量只被定义一次。在上述代码中,AD_L[8]被定义了两次。
首先,在头文件headfile.h中,我们可以看到以下代码:
```c
extern unsigned int AD_L[8];
```
这表示AD_L[8]是一个外部变量,在其他文件中已经定义过了。
然后,在当前文件中,我们又看到了以下代码:
```c
uint16_t AD_L[8];
```
这表示在当前文件中再次定义了AD_L[8],导致了重复定义的错误。
要解决这个问题,可以删除当前文件中的AD_L[8]的定义,只保留头文件中的声明即可。修改后的代码如下:
```c
#include "headfile.h"
//#include "common.h"
#include "math.h"
//#include "cmath"
extern unsigned int AD_L[8];
extern int AD[8];
extern int chazhi[10];
extern float sensor_to_one[8];
extern unsigned int max_v[8];
void AD_nit();
void Max_ADC(void);
void Max_ADC_H(void);
//void Read_AD(void);
//void Read_AD_H(void);
//void Analyse_ADC(void);
void Find_Max(void);
void Read_ADC(void);
//float absf(int a,int b);
int ADC_2(void);
void Computer_Display2(void);
uint16_t ad_valu[8][5];
int16_t min[2][3], max[2][3];
// uint16_t AD_L[8]; // 删除重复定义的行
int16_t AD[8];
uint16_t AD_Round[8];
uint16_t AD_V[5];
uint16_t adsum[8];
uint16_t AD_sum[8];
uint16_t ad_valu1[8];
float sensor_to_one[8];
uint16_t max_v[8], min_v[8];
int16_t centre = 4000;
int16_t chazhi[10];
int16_t move = 0;
float Previous_Error[12];
float Previous_Error1[12];
void AD_nit()
{
adc_init(ADC0, ADC_CH_10, ADC_SAMPLETIME_55POINT5, ADC_RES_12BIT);
adc_init(ADC0, ADC_CH_11, ADC_SAMPLETIME_55POINT5, ADC_RES_12BIT);
adc_init(ADC0, ADC_CH_12, ADC_SAMPLETIME_55POINT5, ADC_RES_12BIT);
adc_init(ADC0, ADC_CH_13, ADC_SAMPLETIME_55POINT5, ADC_RES_12BIT);
adc_init(ADC0, ADC_CH_15, ADC_SAMPLETIME_55POINT5, ADC_RES_12BIT);
}
```
这样就修复了AD_L[8]重复定义的问题。
阅读全文