ArduinoUNO实战-第二十一章-通过调整电位器来改变9克舵机的角度

你提供的代码和内容详细介绍了如何使用Arduino控制舵机,并通过电位器来改变舵机的角度。以下是对代码的详细解释和一些改进建议:
代码解释
方法一:手动计算脉冲宽度
#include <Arduino.h>
#define PWM_pin 9
int pulsewidth = 0;
void setup() {
pinMode(PWM_pin, OUTPUT);
}
void loop() {
// 旋转到90°
pulse(90);
}
void pulse(int angle) {
pulsewidth = int((angle * 11) + 500);
digitalWrite(PWM_pin, HIGH);
delayMicroseconds(pulsewidth);
digitalWrite(PWM_pin, LOW);
delay(20 - pulsewidth / 1000);
}
PWM_pin
定义了舵机连接的数字引脚。pulse(int angle)
函数根据给定的角度计算脉冲宽度,并控制舵机旋转到该角度。
方法二:使用Arduino自带的Servo库
#include <Servo.h> //引入lib
Servo myservo; //创建一个伺服电机对象
#define potpin A5 //设定连接可变电阻的模拟引脚
int val; //创建变量,储存从模拟端口读取的(0到1023之间)
void setup() {
myservo.attach(9); //9号引脚输出电机控制信号 注:仅能使用9、10号引脚
}
void loop() {
val = analogRead(potpin);
//读取来自可变电阻的模拟值(0到1023之间)
val = map(val, 0, 1023, 0, 179); //利用"map"函数缩放该,得到伺服电机需要的角度(0到180之间)
myservo.write(val); //设置伺服电机的位置
delay(15); //等待电机旋转到目标角度
}
Servo
库简化了舵机控制,myservo.attach(9)
将舵机连接到数字引脚9。myservo.write(val)
根据电位器的读值设置舵机的角度。
改进建议
注释和代码格式:
- 添加更多的注释以解释每个部分的功能。
- 保持代码缩进一致,提高可读性。
变量命名:
- 使用更具描述性的变量名,例如
angle
而不是pulsewidth
。
- 使用更具描述性的变量名,例如
错误处理:
- 添加错误处理机制,例如检查电位器的读值是否在有效范围内。
示例代码改进
#include <Servo.h> // 引入库
// 创建一个伺服电机对象
Servo myservo;
// 定义连接可变电阻的模拟引脚
#define potpin A5
// 创建变量,储存从模拟端口读取的值(0到1023之间)
int potValue;
void setup() {
// 将舵机连接到数字引脚9
myservo.attach(9);
}
void loop() {
// 读取来自可变电阻的模拟值(0到1023之间)
potValue = analogRead(potpin);
// 将模拟值映射到伺服电机的角度范围(0到180之间)
int angle = map(potValue, 0, 1023, 0, 179);
// 设置伺服电机的位置
myservo.write(angle);
// 等待电机旋转到目标角度
delay(15);
}
通过这些改进,代码将更加清晰和易于理解。希望这对你有所帮助!