但是豆包生成的这些代码,你们猜猜,这些都是用来干嘛的

6 达人 1天前 101次点击

#include

Servo R1; Servo R2;

Servo L1; Servo L2;

Servo RL1; Servo RL2;

Servo LL1; Servo LL2;

void setup(){

Serial.begin(115200);

R1.attach(13); R2.attach(12);

L1.attach(14); L2.attach(27);

RL1.attach(26); RL2.attach(25);

LL1.attach(33); LL2.attach(32);

initPose();

}

void initPose(){

R1.write(90); R2.write(90);

L1.write(90); L2.write(90);

RL1.write(90); RL2.write(80);

LL1.write(90); LL2.write(80);

delay(1000);

}

void armRight(){

R1.write(130); R2.write(40); delay(800); initPose();

}

void armLeft(){

L1.write(50); L2.write(140); delay(800); initPose();

}

void handShake(){

R1.write(110); R2.write(60); delay(500);

R2.write(30); delay(300); R2.write(60);

delay(300); R2.write(30); delay(300);

initPose();

}

void standUp(){

RL2.write(90); LL2.write(90); delay(1000);

}

void loop(){

if(Serial.available()){

String cmd = Serial.readStringUntil('\n');

if(cmd=="右胳膊") armRight();

if(cmd=="左胳膊") armLeft();

if(cmd=="握手") handShake();

if(cmd=="站起来") standUp();

if(cmd=="复位") initPose();

}

}

共 5 条评论
zhinzc2015 1天前
0 
根据提供的代码片段分析,这是一个Arduino控制多路舵机的程序,用于机械臂或机器人肢体运动。代码存在以下关键问题和改进建议: 问题分析 语法错误(核心问题):  void armLeft(  函数定义不完整,缺少右括号和函数体 缺少必要的头文件引用: #include   舵机控制逻辑优化:  initPose()  中RL2/LL2舵机初始角度不对称(80° vs 其他90°) 运动函数(如armRight)直接调用 delay(800) 会阻塞主线程 扩展性缺陷: 未预留串口指令解析接口 缺少错误处理机制(如舵机角度范围校验)
达人 [楼主] 1天前
0 
不错,真聪明,这么快就知道干啥用的。不过没错,这个包写的代码是有一些乱码错误。简单生活玩儿而已
火影 1天前
0 

控制动作的吧,不过这玩意不靠谱。

达人 [楼主] 1天前
0 
你还真猜对了,这就是食品机器人。代码用的
这段代码存在编译致命错误、功能逻辑BUG、硬件运行隐患,同时有不少可优化的点,我按优先级给你拆解清楚,最后附上修正后的可直接运行的完整代码。 一、致命编译错误(直接导致无法上传运行) 1. 缺少Servo库头文件 第一行仅写了 #include ,没有引入舵机库的核心头文件,编译器无法识别 Servo 类,直接编译报错。 正确写法: #include     二、功能逻辑BUG(能编译但大概率无法正常使用) 1. 串口指令匹配失效的核心坑  Serial.readStringUntil('\n')  读取指令时,Windows串口工具默认发送 \r\n 换行,会把 \r (回车符)留在字符串里,导致实际读取到的指令是 右胳膊\r ,和你写的 右胳膊 完全匹配不上,指令直接无效。 2. delay()阻塞导致串口响应完全失效 所有动作里的 delay() 会完全阻塞CPU,延时期间无法响应任何串口指令。比如你在握手动作的1秒多延时里发送「复位」,必须等整个握手动作全部执行完才会响应,实时性极差,还会丢指令。   三、硬件与运行隐患(能运行但容易烧硬件/出故障) 1. 平台兼容性问题 你用的 14、27、26、25、33、32 引脚是ESP32开发板的引脚,不是标准Arduino Uno/Nano的引脚(Uno最大数字引脚为13),如果用Uno板会直接报错,必须用ESP32开发板。 2. 舵机电源烧板风险 8个舵机同时动作时,瞬间启动电流非常大。如果直接用ESP32开发板的5V/3.3V给舵机供电,大概率会导致开发板反复复位、掉电,甚至烧坏电源芯片。 必须给舵机用独立5V电源(额定电流2A以上),且舵机电源必须和ESP32共地。 3. 舵机堵转烧毁风险 不同品牌舵机的有效角度范围不同(部分微型舵机仅支持0-120°),你代码里的40°、130°、140°等角度,若超出舵机的物理行程,会导致舵机堵转,长时间堵转直接烧毁舵机。   四、修正后的完整可运行代码 cpp #include // 引脚定义(统一管理,方便修改) #define R1_PIN 13 #define R2_PIN 12 #define L1_PIN 14 #define L2_PIN 27 #define RL1_PIN 26 #define RL2_PIN 25 #define LL1_PIN 33 #define LL2_PIN 32 // 舵机对象 Servo R1, R2; Servo L1, L2; Servo RL1, RL2; Servo LL1, LL2; // 初始姿态函数声明 void initPose(); void setup(){ Serial.begin(115200); // 等待串口连接稳定(ESP32可选,提升兼容性) while(!Serial) delay(10); // 舵机挂载引脚 R1.attach(R1_PIN); R2.attach(R2_PIN); L1.attach(L1_PIN); L2.attach(L2_PIN); RL1.attach(RL1_PIN); RL2.attach(RL2_PIN); LL1.attach(LL1_PIN); LL2.attach(LL2_PIN); // 上电复位到初始姿态 initPose(); Serial.println("机器人初始化完成,等待指令"); } // 初始姿态 void initPose(){ R1.write(90); R2.write(90); L1.write(90); L2.write(90); RL1.write(90); RL2.write(80); LL1.write(90); LL2.write(80); delay(1000); Serial.println("已复位到初始姿态"); } // 右胳膊动作 void armRight(){ R1.write(130); R2.write(40); delay(800); initPose(); Serial.println("右胳膊动作完成"); } // 左胳膊动作 void armLeft(){ L1.write(50); L2.write(140); delay(800); initPose(); Serial.println("左胳膊动作完成"); } // 握手动作 void handShake(){ R1.write(110); R2.write(60); delay(500); R2.write(30); delay(300); R2.write(60); delay(300); R2.write(30); delay(300); initPose(); Serial.println("握手动作完成"); } // 站起来动作 void standUp(){ RL2.write(90); LL2.write(90); delay(1000); Serial.println("已执行站起来动作"); } void loop(){ // 串口指令读取与处理 if(Serial.available()){ String cmd = Serial.readStringUntil('\n'); cmd.trim(); // 核心修复:去掉首尾的回车、空格、换行符,解决匹配失效问题 // 用else if提升效率,避免无效判断 if(cmd == "右胳膊"){ armRight(); } else if(cmd == "左胳膊"){ armLeft(); } else if(cmd == "握手"){ handShake(); } else if(cmd == "站起来"){ standUp(); } else if(cmd == "复位"){ initPose(); } else{ // 未知指令反馈,方便调试 Serial.print("未知指令:"); Serial.println(cmd); } } }     五、进阶优化建议 1. 用 millis() 定时器代替 delay() ,实现非阻塞动作,执行动作的同时可以随时响应新指令(比如紧急停止/复位)。 2. 给舵机角度加范围限制,避免输入超出行程的角度导致堵转。 3. 增加舵机缓动功能,让舵机转动更顺滑,减少冲击和电流峰值。
添加一条新评论

登录后可以发表评论 去登录