假设我现在串口接收到了1000个数据,根据我接收到的一千个数字这一千个数字的大小都不大于80进行一个pid的算法数字越大速度越小对于以下代码进行一下优化。 #include <math.h>#define PWM 9#define STBY 8#define Leftmotor0 3#define Leftmotor1 4void setup() { pinMode(PWM, OUTPUT); // 设置模拟输出引脚为输出模式 digitalWrite(STBY, HIGH); pinMode(Leftmotor0, OUTPUT); pinMode(Leftmotor1, OUTPUT);}void xuanzhuan() { // 电机转 digitalWrite(Leftmotor0, HIGH); digitalWrite(Leftmotor1, LOW);}void ting() { // 电机停 digitalWrite(Leftmotor0, LOW); digitalWrite(Leftmotor1, LOW);}float genhao(float a) { float result; result = sqrt(a); return (result);}void loop() { for (int i = 0; i < 100; i++) { // 生成 100 个随机数并控制电机 float a = random(0, 81); // 生成随机数 float b, c; b = genhao(a * a); c = (1 - b / 80) * 255; analogWrite(PWM, c); // 使用 PWM 输出模拟信号 xuanzhuan(); // 电机转 delay(1000); // 持续时间 ting(); // 电机停 delay(1000); // 停止时间 }}
时间: 2024-01-24 19:04:44 浏览: 34
根据您的描述和代码,我了解到您想要根据一千个数字的大小进行PID算法控制电机的速度,同时您的代码中还包含了一些其他的功能。在这里,我将针对您的代码中的一些问题提出优化建议。
1. 避免使用不必要的库
您的代码中包含了 math.h 库,但是仅使用了其中的一个函数 sqrt()。如果您只需要使用一个函数,可以直接在代码中定义一个函数,避免使用不必要的库。
2. 简化控制代码
在您的代码中,使用了一个 xuanzhuan() 函数来控制电机转动,使用了一个 ting() 函数来控制电机停止。如果您只需要控制电机的转动和停止,可以不用定义额外的函数,直接在 loop() 函数中控制电机即可。
3. 优化控制算法
根据您的代码,我了解到您使用了一个开方函数 genhao() 来计算一个数的平方根,并将其作为控制算法的输入。但是这种控制算法并不是PID算法,而且使用了开方函数会增加计算量。如果您想要使用PID算法,可以将这一千个数字作为PID算法的输入信号,根据设备的具体情况来调整控制信号,以达到期望的控制效果。
4. 优化输出控制信号
在您的代码中,使用了一个公式来计算输出控制信号:c = (1 - b / 80) * 255。但是这个公式并不是一个线性函数,可能会导致输出信号的不连续性。如果您想要实现线性控制,可以使用一个线性函数来计算输出控制信号。
综上所述,以下是对您的代码进行优化的建议:
```
#define PWM 9
#define STBY 8
#define Leftmotor0 3
#define Leftmotor1 4
void setup() {
pinMode(PWM, OUTPUT);
digitalWrite(STBY, HIGH);
pinMode(Leftmotor0, OUTPUT);
pinMode(Leftmotor1, OUTPUT);
}
void loop() {
for (int i = 0; i < 1000; i++) {
float input = random(0, 81); // 生成随机数
float output = input * 255 / 80; // 计算输出控制信号
analogWrite(PWM, output); // 输出控制信号
digitalWrite(Leftmotor0, HIGH); // 电机转
delay(1000); // 持续时间
digitalWrite(Leftmotor0, LOW); // 电机停
delay(1000); // 停止时间
}
}
```
这里的优化包括:
1. 去掉不必要的库。
2. 简化电机控制代码。
3. 去掉不必要的控制算法,使用线性函数控制输出信号。
4. 将循环次数改为1000,与您的问题描述一致。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)