【Arduino】2种方法控制舵机

发布于:2023-02-18 ⋅ 阅读:(834) ⋅ 点赞:(0)

这是我参加第十一届海上航行器大赛 的 方案三:Arduino方案 中的控制舵机
详细的舵机控制 请参考好文-

在这里插入图片描述

第1种方法:为引脚写入电平,生成pwm

analogWrite(pin, value)

这种方法只能让舵机在 0~90度转 且输入的参数只能在 [70,350] 之间,否则会不动,达不到我的需求。

#define pinServo  11 /*舵机控制引脚  基于ATmega168和ATmega328的Arduino控制器中,
analogWrite()函数支持以下引脚: 3, 5, 6, 9, 10, 11*/

//舵机角度 测试出来的值
#define servoRight  70  
#define servoMiddle  210 
#define servoLeft  350  

void setup() 
{
   Serial.begin(9600);// 串口初始化,波特率9600字节/秒
}

void loop() 
{
   prePWM = angle2Pwm(realAngle);//计算返回当前舵机角度对应的 PWM
   analogWrite(pinServo,prePWM);
}

int angle2Pwm(int preAngle)
{//把角度转换成相应的 pwm
    int realAngle;
    prePWM = float(255*(float)preAngle / 360); 
    return prePWM;
}

第2种方法:调用Servo库,真香!

Servo库

能控制的角度范围较大,满足我的需求。nice

#include <Servo.h>
Servo myservo; //创建一个舵机控制对象
#define pinServo  11//舵机控制引脚  基于ATmega168和ATmega328的Arduino控制器中,analogWrite()函数支持以下引脚: 3, 5, 6, 9, 10, 11。

void setup() 
{
  myservo.attach(pinServo,500,2500); // 告知Arduino舵机的数据线连接在哪一个引脚上。
}

void loop() 
{ //让舵机在0~180来回转动
    myservo.write(0);
    delay(1000);
    myservo.write(180);
    delay(1000);
}

笔记仅供自学,用来回看复习,不一定适合你,如有错误请指出。


网站公告

今日签到

点亮在社区的每一天
去签到

热门文章