wall-e robot code system two

//求求了,不要点赞!不要评论!不然我就编辑不了了!
//求求了,不要点赞!不要评论!不然我就编辑不了了!
//求求了,不要点赞!不要评论!不然我就编辑不了了!
/*!
*TIP
*DFRobot, Raspberry Pi Pico
*/
#include <Servo.h>

// 动态变量
String mind_s_HuanCun, mind_s_usb;
volatile float mind_n_ShiFuYunXing, mind_n_DianLiang, mind_n_DianYa, mind_n_JiShu,
mind_n_LED_NK, mind_n_BoZiZuoYouKongZhi, mind_n_BoZiZuoYouMuBiao,
mind_n_BoZiZuoYouMuQian, mind_n_BoZiShangXiaKongZhi, mind_n_BoZiShangXiaMuBiao,
mind_n_BoZiShangXiaMuQian, mind_n_BoZiShangXiaShengJiangMuBiao, mind_n_ShouBuDongZuo,
mind_n_YouShouJiaoDu, mind_n_YouShouMuBiao, mind_n_ZuoShouJiaoDu,
mind_n_ZuoShouMuBiao, mind_n_FUCK, mind_n_YanJingYou, mind_n_YanJingZuo,
mind_n_YanYou, mind_n_YanKongZhiYou, mind_n_YanKongZhiZuo, mind_n_BoZiShangXiaShengJiangMuQian;

// 创建舵机对象
Servo servo_6;
Servo servo_7;
Servo servo_12;
Servo servo_13;

// 函数声明
void DF_text_UI();
void DF_BoZiZuoYouZiDong();
void DF_QianJin();
void DF_BoZiShangXiaZiDong();
void DF_led();
void DF_HouTui();
void DF_ShouBu();
void DF_ZuoZhuan();
void DF_YouZhuan();
void DF_ChuShiHua();
void DF_TingZhi();
void DF_ShouBuDaiMa();
void DF_BoZiShangXiaDaiMa();
void DF_BoZiZuoYouDaiMa();
void DF_JieShouESP32(String mind_s_ESP32);
void DF_Wu();

// 主程序初始化
void setup() {
Serial.begin(9600);
// 初始化电机驱动引脚
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(25, OUTPUT);
pinMode(11, INPUT_PULLUP);
// 舵机绑定引脚
servo_6.attach(6);
servo_7.attach(7);
servo_12.attach(12);
servo_13.attach(13);

mind_s_HuanCun = “”;
DF_ChuShiHua();
Serial.println(“”);
DF_Wu();
mind_n_ShiFuYunXing = 1;
mind_n_JiShu = 0;
}

// 主循环
void loop() {
// 电压/电量检测(模拟口27)
mind_n_DianYa = (((analogRead(27) * 1) * 0.013001) - 0.69);
mind_n_DianLiang = ((mind_n_DianYa * 27.78) - 250);
// 限制电量范围0-100%
if(mind_n_DianLiang < 0) mind_n_DianLiang = 0;
if(mind_n_DianLiang > 100) mind_n_DianLiang = 100;
mind_n_LED_NK = (mind_n_DianLiang * 2.55);

DF_text_UI();
DF_led();
DF_JieShouESP32(“USB”);

// 串口指令控制启停
if (mind_s_usb != “”) {usb
if (mind_s_usb == “run”) {
mind_n_ShiFuYunXing = 1;
} else if (mind_s_usb == “stop”) {
mind_n_ShiFuYunXing = 0;
}
}

// 运行动作组
if (mind_n_ShiFuYunXing == 1) {
DF_BoZiShangXiaDaiMa();
DF_BoZiZuoYouDaiMa();
DF_ShouBuDaiMa();
}

// 读取串口数据
if (Serial.available()) {
mind_s_usb = Serial.readStringUntil(‘\n’);
// 去除换行/回车符
mind_s_usb.trim();
}
if (Serial2.available()) {
mind_s_HuanCun = Serial1.readStringUntil(‘\n’);
mind_s_HuanCun.trim();
}
DF_JieShouESP32(“Serial”);

delay(5);
}

// 串口打印系统信息
void DF_text_UI() {
Serial.println(“----------------------WALL-E SYSTEM---------------------”);
Serial.println(“stop - 停止动作”);
Serial.println(“run - 运行动作”);
Serial.println(“SYSTEM PRINT:”);
Serial.println(" BY-TIP BY-China");
Serial.println(" TIP ARDUINO C++ SYSTEM");
Serial.println(" 版本:26N5.3 内核:2.1.3WALLE");
Serial.println(" 编写日期:2026/05/1");
Serial.println(" RX:GPIO9");
Serial.println(" TX:GPIO8");
Serial.print(" RX>>>“); Serial.println(mind_s_HuanCun);
Serial.print(” RUN OR STOP = "); Serial.println(mind_n_ShiFuYunXing);

// 运行时间格式化
unsigned long runSec = millis() / 1000;
unsigned long min = runSec / 60;
unsigned long sec = runSec % 60;
Serial.print(" RUN_TIME: 分:“); Serial.print(min); Serial.print(” 秒:"); Serial.println(sec);

Serial.println(" 温度:25.0");
Serial.print(" 电量:“); Serial.print(mind_n_DianLiang); Serial.println(”%“);
Serial.print(” 电压:“); Serial.print(mind_n_DianYa); Serial.println(“v”);
Serial.println(”----------------------------------------------------------");
}

// 脖子左右自动摆动
void DF_BoZiZuoYouZiDong() {
if (mind_n_BoZiZuoYouKongZhi == 0) {
if (round(mind_n_BoZiZuoYouMuBiao) == round(mind_n_BoZiZuoYouMuQian)) {
mind_n_BoZiZuoYouKongZhi = 1;
mind_n_BoZiZuoYouMuBiao = 0;
} else {
mind_n_BoZiZuoYouMuBiao = 140;
}
} else {
if (round(mind_n_BoZiZuoYouMuBiao) == round(mind_n_BoZiZuoYouMuQian)) {
mind_n_BoZiZuoYouKongZhi = 0;
mind_n_BoZiZuoYouMuBiao = 140;
} else {
mind_n_BoZiZuoYouMuBiao = 0;
}
}
}

// 前进
void DF_QianJin() {
digitalWrite(0, LOW);
digitalWrite(1, HIGH);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
}

// 脖子上下自动摆动
void DF_BoZiShangXiaZiDong() {
if (mind_n_BoZiShangXiaKongZhi == 0) {
if (round(mind_n_BoZiShangXiaMuBiao) == round(mind_n_BoZiShangXiaMuQian)) {
mind_n_BoZiShangXiaKongZhi = 1;
mind_n_BoZiShangXiaMuBiao = 180;
mind_n_BoZiShangXiaShengJiangMuBiao = 87;
} else {
mind_n_BoZiShangXiaMuBiao = 10;
mind_n_BoZiShangXiaShengJiangMuBiao = 170;
}
} else {
if (round(mind_n_BoZiShangXiaMuBiao) == round(mind_n_BoZiShangXiaMuQian)) {
mind_n_BoZiShangXiaKongZhi = 0;
mind_n_BoZiShangXiaMuBiao = 10;
mind_n_BoZiShangXiaShengJiangMuBiao = 170;
} else {
mind_n_BoZiShangXiaMuBiao = 180;
mind_n_BoZiShangXiaShengJiangMuBiao = 87;
}
}
}

// LED与低电量提醒
void DF_led() {
// 修复:舵机引脚不能用于模拟输出,移除冲突代码
if (mind_n_DianLiang <= 28) {
digitalWrite(25, HIGH);
} else {
digitalWrite(25, LOW);
}
}

// 后退
void DF_HouTui() {
digitalWrite(0, HIGH);
digitalWrite(1, LOW);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
}

// 手部动作自动控制
void DF_ShouBu() {
if (mind_n_ShouBuDongZuo == 0) {
if ((round(mind_n_YouShouJiaoDu) == round(mind_n_YouShouMuBiao)) && (round(mind_n_ZuoShouJiaoDu) == round(mind_n_ZuoShouMuBiao))) {
mind_n_ShouBuDongZuo = 1;
mind_n_ZuoShouMuBiao = 130;
mind_n_YouShouMuBiao = 130;
} else {
mind_n_YouShouMuBiao = 50;
mind_n_ZuoShouMuBiao = 50;
}
} else {
if ((round(mind_n_YouShouJiaoDu) == round(mind_n_YouShouMuBiao)) && (round(mind_n_ZuoShouJiaoDu) == round(mind_n_ZuoShouMuBiao))) {
mind_n_ShouBuDongZuo = 0;
mind_n_YouShouMuBiao = 50;
mind_n_ZuoShouMuBiao = 50;
} else {
mind_n_ZuoShouMuBiao = 130;
mind_n_YouShouMuBiao = 130;
}
}
}

// 左转
void DF_ZuoZhuan() {
digitalWrite(0, LOW);
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
}

// 右转
void DF_YouZhuan() {
digitalWrite(0, HIGH);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
}

// 初始化参数
void DF_ChuShiHua() {
Serial1.begin(115200);
DF_TingZhi();
mind_n_FUCK = 0;
mind_n_BoZiShangXiaMuQian = 0;
mind_n_BoZiShangXiaMuBiao = 80;
mind_n_ShouBuDongZuo = 0;
mind_n_ZuoShouJiaoDu = 50;
mind_n_YouShouJiaoDu = 130;
mind_n_BoZiZuoYouKongZhi = 0;
mind_n_BoZiZuoYouMuBiao = 70;
mind_n_BoZiZuoYouMuQian = 70;
mind_n_YanJingYou = 0;
mind_n_YanJingZuo = 0;
mind_n_YanYou = 0;
mind_n_YanKongZhiYou = 0;
mind_n_YanKongZhiZuo = 0;
}

// 停止所有电机
void DF_TingZhi() {
digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
}

// 手部舵机控制代码
void DF_ShouBuDaiMa() {
// 平滑控制手部角度
mind_n_YouShouJiaoDu += (mind_n_YouShouMuBiao - mind_n_YouShouJiaoDu) / 100;
mind_n_ZuoShouJiaoDu += (mind_n_ZuoShouMuBiao - mind_n_ZuoShouJiaoDu) / 100;

// 限制舵机角度0-180°
mind_n_YouShouJiaoDu = constrain(mind_n_YouShouJiaoDu, 0, 180);
mind_n_ZuoShouJiaoDu = constrain(mind_n_ZuoShouJiaoDu, 0, 180);

servo_6.write(round(mind_n_ZuoShouJiaoDu));
servo_7.write(round(mind_n_YouShouJiaoDu));
}

// 脖子上下舵机控制
void DF_BoZiShangXiaDaiMa() {
mind_n_BoZiShangXiaShengJiangMuQian += (mind_n_BoZiShangXiaShengJiangMuBiao - mind_n_BoZiShangXiaShengJiangMuQian) / 200;
mind_n_BoZiShangXiaMuQian += (mind_n_BoZiShangXiaMuBiao - mind_n_BoZiShangXiaMuQian) / 200;

mind_n_BoZiShangXiaShengJiangMuQian = constrain(mind_n_BoZiShangXiaShengJiangMuQian, 0, 180);
servo_12.write(round(mind_n_BoZiShangXiaShengJiangMuQian));
}

// 脖子左右舵机控制
void DF_BoZiZuoYouDaiMa() {
mind_n_BoZiZuoYouMuQian += (mind_n_BoZiZuoYouMuBiao - mind_n_BoZiZuoYouMuQian) / 130;
mind_n_BoZiZuoYouMuQian = constrain(mind_n_BoZiZuoYouMuQian, 0, 180);
servo_13.write(round(mind_n_BoZiZuoYouMuQian));
}

// 接收ESP32指令并执行
// 接收指令:纯 Serial 自带函数,只大写,自动提取数字
void DF_JieShouESP32() {
// ------------- 处理 Serial USB -------------
if (Serial.available()) {
char c = Serial.read(); // 自带函数

if (c == 'T') {
  mind_n_BoZiShangXiaShengJiangMuBiao = Serial.parseInt();
}
if (c == 'G') {
  mind_n_BoZiZuoYouMuBiao = Serial.parseInt();
}
if (c == 'L') {
  mind_n_ZuoShouMuBiao = Serial.parseInt();
}
if (c == 'R') {
  mind_n_YouShouMuBiao = Serial.parseInt();
}

if (c == 'X') {
  int v = Serial.parseInt();
  if (v == 100) DF_YouZhuan();
  if (v == -100) DF_ZuoZhuan();
  if (v == 0) DF_TingZhi();
}
if (c == 'Y') {
  int v = Serial.parseInt();
  if (v == 50 || v == 100) DF_QianJin();
  if (v == -50 || v == -100) DF_HouTui();
  if (v == 0) DF_TingZhi();
}
if (c == 'E') {
  Serial.parseInt();
  DF_TingZhi();
}
if (c == 'q') {
  DF_TingZhi();
  DF_Wu();
}
if (c == 'A') {
  int v = Serial.parseInt();
  if (v == 0) DF_Wu();
  if (v == 1) {
    DF_ShouBu();
    DF_BoZiZuoYouZiDong();
    DF_BoZiShangXiaZiDong();
  }
}

}

// ------------- 处理 Serial1 (ESP32) -------------
if (Serial1.available()) {
char c = Serial1.read();

if (c == 'T') {
  mind_n_BoZiShangXiaShengJiangMuBiao = Serial1.parseInt();
}
if (c == 'G') {
  mind_n_BoZiZuoYouMuBiao = Serial1.parseInt();
}
if (c == 'L') {
  mind_n_ZuoShouMuBiao = Serial1.parseInt();
}
if (c == 'R') {
  mind_n_YouShouMuBiao = Serial1.parseInt();
}

if (c == 'X') {
  int v = Serial1.parseInt();
  if (v == 100) DF_YouZhuan();
  if (v == -100) DF_ZuoZhuan();
  if (v == 0) DF_TingZhi();
}
if (c == 'Y') {
  int v = Serial1.parseInt();
  if (v == 50 || v == 100) DF_QianJin();
  if (v == -50 || v == -100) DF_HouTui();
  if (v == 0) DF_TingZhi();
}
if (c == 'E') {
  Serial1.parseInt();
  DF_TingZhi();
}
if (c == 'q') {
  DF_TingZhi();
  DF_Wu();
}
if (c == 'A') {
  int v = Serial1.parseInt();
  if (v == 0) DF_Wu();
  if (v == 1) {
    DF_ShouBu();
    DF_BoZiZuoYouZiDong();
    DF_BoZiShangXiaZiDong();
  }
}

}
}
// 复位所有机构
void DF_Wu() {
mind_n_BoZiShangXiaShengJiangMuBiao = 80;
mind_n_BoZiZuoYouMuBiao = 70;
mind_n_ZuoShouMuBiao = 130;
mind_n_YouShouMuBiao = 50;
DF_TingZhi();
}

//求求了,不要点赞!不要评论!不然我就编辑不了了!