欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > Arduino控制舵机

Arduino控制舵机

2025/4/19 17:48:18 来源:https://blog.csdn.net/panjinliang066333/article/details/145882612  浏览:    关键词:Arduino控制舵机

一、舵机180度和270度

Arduino库文件中设置最大180度,如果是270度舵机需要手动修改库文件。

这几个文件夹中都要修改

二、舵机简单正反转运动

1、180度舵机


#include <Servo.h> //加载文件库
int pos = 0;
Servo myservo;
#define MOTOR_IO        46    //舵机引脚void setup() 
{Serial.begin(9600);                           //开启串口,波特率9600 myservo.attach(MOTOR_IO, 500, 2500);          //修正脉冲宽度,引脚4
}void loop() 
{//舵机正转180度for (pos = 0; pos <= 180; pos += 1) //pos+=1等价于pos=pos+1{       myservo.write(pos);delay(20);          }  //舵机反转180度for (pos = 180; pos >= 0; pos -= 1) {myservo.write(pos);delay(20);          }
}

2、270度舵机正反转


#include <Servo.h> //加载文件库
int pos = 0;
Servo myservo;
#define MOTOR_IO        46    //舵机引脚void setup() 
{Serial.begin(9600);                           //开启串口,波特率9600 myservo.attach(MOTOR_IO, 500, 2500);          //修正脉冲宽度,引脚4
}void loop() 
{//舵机正转270度for (pos = 0; pos <= 270; pos += 1) //pos+=1等价于pos=pos+1{       myservo.write(pos);delay(20);          }  //舵机反转270度for (pos = 270; pos >= 0; pos -= 1) {myservo.write(pos);delay(20);          }
}

三、PS2手柄控制舵机

Arduino使用PS2手柄控制舵机_arduino ps2手柄-CSDN博客

四、串口控制舵机

接收数据格式

比如:

"180,1000",1000毫秒转动到180度

"0,500",500毫秒转动到0度

库文件最大支持舵机转动到180度


#include <Servo.h> //加载文件库
int pos = 0;
int targetPos=0;
int lastPos=0;
int motorTime=0;
Servo myservo;
#define MOTOR_IO        46    //舵机引脚void setup() 
{Serial.begin(9600);                           //开启串口,波特率9600 myservo.attach(MOTOR_IO, 500, 2500);          //修正脉冲宽度,引脚4
}void loop() 
{/*//舵机正转180度for (pos = 0; pos <= 180; pos += 1) //pos+=1等价于pos=pos+1{       myservo.write(pos);delay(20);          }  //舵机反转180度for (pos = 180; pos >= 0; pos -= 1) {myservo.write(pos);delay(20);          }
*/
}//串口0中断
void serialEvent()
{  // 检查串口0是否有数据可用if(Serial.available() > 0) {// 读取字符串直到遇到换行符或达到缓冲区大小限制String receivedData = Serial.readStringUntil('\n');    //String data = "hello,world,this,is,arduino";//接收数据格式:"180,100"String data =receivedData;int commaIndex;String result; while ((commaIndex = data.indexOf(',')) != -1) {result = data.substring(0, commaIndex);//Serial.print("Found: ");//Serial.println(result);lastPos=targetPos;targetPos=result.toInt();data = data.substring(commaIndex + 1); // 移除已处理的部分,继续查找下一个逗号}//Serial.print("Last: ");//Serial.println(data); // 输出最后一个元素motorTime=data.toInt();int delayTime=0;delayTime=abs(motorTime/(targetPos-lastPos));if(targetPos>lastPos){for (pos = lastPos; pos <= targetPos; pos += 1) //pos+=1等价于pos=pos+1{       myservo.write(pos);delay(delayTime);          }  }else{for (pos = lastPos; pos >= targetPos; pos -= 1) {myservo.write(pos);delay(delayTime);          }}Serial.print("targetPos: ");Serial.println(targetPos);}else {// 如果没有数据,可以添加一些延时以避免CPU过度占用(可选)delay(10); // 例如延时10毫秒}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词