arduino外部中断控制PM15S舵机代码
时间: 2023-07-31 15:08:09 浏览: 217
以下是一个使用 Arduino 外部中断控制 PM15S 舵机的示例代码:
```c
#define INTERRUPT_PIN 2 // 外部中断引脚
#define SERVO_PIN 9 // 舵机控制引脚
volatile int pulseWidth = 1500; // 脉冲宽度变量,加上 volatile 关键字,表示该变量可能被中断修改
void setup() {
pinMode(INTERRUPT_PIN, INPUT_PULLUP); // 设置外部中断引脚为输入模式,并启用内部上拉电阻
attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), isr, RISING); // 绑定中断函数
pinMode(SERVO_PIN, OUTPUT); // 设置舵机控制引脚为输出模式
}
void loop() {
digitalWrite(SERVO_PIN, HIGH); // 将舵机控制引脚置为高电平
delayMicroseconds(pulseWidth); // 延迟脉冲宽度时间
digitalWrite(SERVO_PIN, LOW); // 将舵机控制引脚置为低电平
delay(20); // 等待20毫秒
}
void isr() {
pulseWidth = 1000 + random(1000); // 当外部中断触发时,将脉冲宽度设置为 1000~2000 之间的随机值
}
```
在上述代码中,我们使用了一个外部中断引脚(`INTERRUPT_PIN`)来触发中断函数(`isr()`),每当外部中断引脚从低电平变为高电平时,就会触发中断函数。在中断函数中,我们将脉冲宽度变量(`pulseWidth`)设置为 1000~2000 之间的随机值。在 `loop()` 函数中,我们通过 `digitalWrite(SERVO_PIN, HIGH)` 将舵机控制引脚置为高电平,然后通过 `delayMicroseconds(pulseWidth)` 延迟脉冲宽度时间,再通过 `digitalWrite(SERVO_PIN, LOW)` 将舵机控制引脚置为低电平。最后,我们再通过 `delay(20)` 等待20毫秒,使舵机有足够的时间转动到指定角度。需要注意的是,PM15S 舵机的控制方式是通过发送一定脉冲宽度的信号来控制转动角度,而不是通过直接设置角度值来控制。因此,在控制 PM15S 舵机时,需要根据具体的脉冲宽度值来计算出对应的转动角度。
阅读全文