这个代码实现了舵机在 0-180 度之间循环摆动的功能。主要工作原理是:

1.通过 Servo 库控制舵机

2.在 setup () 函数中初始化舵机和串口通信

3.在 loop () 函数中不断改变舵机角度

4.当角度达到 180 度时开始减小角度

5.当角度达到 0 度时开始增加角度

6.通过 delay () 函数控制舵机的转动速度和频率

你只需要将舵机的信号线连接到 Arduino 的数字引脚 9,电源线连接到 5V,地线连接到 GND,上传代码后舵机就会自动开始摆动。

#include <Servo.h>  // 导入Servo库来控制舵机

Servo myServo;      // 创建一个舵机对象

int servoPin = 9;   // 舵机信号引脚连接到Arduino的数字引脚9
int angle = 0;      // 舵机初始角度
int direction = 1;  // 摆动方向:1表示增加角度,-1表示减小角度

void setup() {
  myServo.attach(servoPin);  // 将舵机连接到指定引脚
  Serial.begin(9600);        // 初始化串口通信,用于调试输出
  Serial.println("舵机开始摆动");
}

void loop() {
  // 移动舵机到当前角度
  myServo.write(angle);
  Serial.print("当前角度: ");
  Serial.println(angle);
  
  // 延迟一段时间,让舵机有足够的时间到达指定位置
  delay(15);
  
  // 更新角度
  angle = angle + direction;
  
  // 当角度达到最大值或最小值时,改变方向
  if (angle >= 180) {
    direction = -1;  // 改变方向为减小角度
    Serial.println("到达最大角度,开始往回摆动");
  } else if (angle <= 0) {
    direction = 1;   // 改变方向为增加角度
    Serial.println("到达最小角度,开始向前摆动");
  }
  
  // 延迟一段时间,控制摆动速度
  delay(15);
}

2 条评论

  • @ 2025-6-2 17:21:47

    如果你希望避免使用循环来实现舵机来回摆动的效果,我们可以采用递增或递减角度的方式,并通过条件判断改变方向。这样也可以让舵机实现来回摆动,而不需要显式的forwhile循环结构。

    下面是一个不使用循环但实现了舵机来回摆动效果的Arduino代码示例:

    #include <Servo.h>  // 引入Servo库
    
    Servo myServo;  // 创建一个Servo对象控制舵机
    int angle = 0;  // 当前角度初始化为0度
    int direction = 1;  // 方向变量:1表示增加角度,-1表示减少角度
    
    void setup() {
      myServo.attach(9);  // 将数字引脚9设置为舵机信号线输出
      myServo.write(angle);  // 初始位置设为0度
    }
    
    void loop() {
      // 改变角度
      angle += direction;
    
      // 如果到达最大角度(180度),则改变方向为减少
      if (angle >= 180) {
        direction = -1;
      }
    
      // 如果回到最小角度(0度),则改变方向为增加
      if (angle <= 0) {
        direction = 1;
      }
    
      // 舵机移动到新位置
      myServo.write(angle);
    
      // 等待一小段时间,使运动更平滑
      delay(15);
    }
    

    代码解释

    1. 引入库和创建对象

      • #include <Servo.h>:包含用于控制舵机的库。
      • Servo myServo;:创建一个Servo对象实例,用来控制舵机。
    2. 定义变量

      • int angle = 0;:当前舵机的角度,初始值为0度。
      • int direction = 1;:表示角度变化的方向。1代表角度增加(顺时针旋转),-1代表角度减少(逆时针旋转)。
    3. setup() 函数

      • myServo.attach(9);:将Arduino的第9号引脚与我们的myServo对象关联起来,用于发送控制信号给舵机。
      • myServo.write(angle);:初始化舵机的位置为0度。
    4. loop() 函数

      • 每次执行时,都会根据direction的值增加或减少angle的值,从而改变舵机的角度。
      • 使用两个if语句检查是否达到了角度限制(0度或180度),并相应地改变direction的值以反转舵机的方向。
      • 最后,调用myServo.write(angle);更新舵机的位置,并通过delay(15);添加短暂延迟,确保动作平滑进行。

    这种方法虽然没有直接使用循环结构,但是通过在每次程序循环中调整角度和方向,依然能够实现舵机来回摆动的效果。

    • @ 2025-6-2 17:21:35

      下面是一个非常基础的Arduino程序示例,它能让连接到Arduino板上的舵机来回摆动。这个例子适合零基础的小学生理解,并且我会在代码中加入详细的注释帮助你理解每一部分的作用。

      首先,你需要准备以下材料:

      • Arduino板(比如Arduino Uno)
      • 一个舵机(servo motor)
      • 连接线若干
      • Arduino IDE软件(用于编写和上传代码)

      接下来是代码:

      // 包含Servo库,这是控制舵机必须的
      #include <Servo.h> 
      
      // 创建一个Servo对象来控制舵机
      Servo myServo;  
      
      void setup() {
        // 将数字引脚9设置为舵机信号线的输出引脚
        myServo.attach(9); 
        // 设置初始角度为0度
        myServo.write(0);
      }
      
      void loop() {
        // 让舵机从0度转到180度
        for(int pos = 0; pos <= 180; pos += 1) { 
          myServo.write(pos);              // 舵机转到指定的角度
          delay(15);                       // 等待15毫秒让舵机有足够的时间到达目标位置
        }
        // 让舵机从180度转回到0度
        for(int pos = 180; pos >= 0; pos -= 1) { 
          myServo.write(pos);              // 舵机转到指定的角度
          delay(15);                       // 等待15毫秒让舵机有足够的时间到达目标位置
        }
      }
      

      代码解释

      1. #include <Servo.h>:这行代码告诉Arduino编译器我们需要使用Servo库,这是一个特殊的库,用来控制舵机。
      2. Servo myServo;:创建一个名为myServo的Servo类实例,用于控制舵机。
      3. myServo.attach(9);:将Arduino的第9号引脚与我们的myServo对象关联起来,这样我们就可以通过这个引脚发送控制信号给舵机了。
      4. loop()函数中,我们有两个循环,它们分别负责让舵机从一边摆动到另一边,然后再返回。每次改变角度后,都会有一个短暂的延迟(delay(15);),以确保舵机能够平稳地移动到下一个位置。

      当你完成编程并上传代码到Arduino板之后,你应该可以看到连接在Arduino上的舵机会缓慢而平滑地来回摆动。记得检查你的电路连接是否正确,特别是电源连接要确保稳定可靠。

      • 1