arduino控制meArm机械臂中程序跑不起来-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2010|回复: 0

[未解决] arduino控制meArm机械臂中程序跑不起来

[复制链接]
发表于 2021-7-23 20:30 | 显示全部楼层 |阅读模式
第一次发帖 新手小白求大佬指教,遇到的问题是在串口中只能进入switch中的第一层,而其他的都进入不了,这是为什么呢?程序如下,求大佬指教



#include<Servo.h>
Servo base, fArm, rArm, claw;
int i;
const int baseMin = 0;
const int baseMax = 180;
const int fArmMin = 40;
const int fArmMax = 110;
const int rArmMin = 30;
const int rArmMax = 170;
const int clawMin = 0;
const int clawMax = 100;

void setup() {
  Serial.begin(9600);
  Serial.println("请输入要控制的电机与到达角度");
  base.attach(11);
  fArm.attach(9);
  rArm.attach(10);
  claw.attach(6);

  base.write(90);
  fArm.write(90);
  rArm.write(90);
  claw.write(90);
}

void loop() {
  if(Serial.available()>0){
    char DJM = Serial.read();
    int pos = Serial.parseInt();
    servoCmd(DJM, pos);  //(电机名, 到达角度)
  }
}

void servoCmd(char DJM, int pos){
  int dqBData;
  int dqFData;
  int dqRData;
  int dqCData;

  switch(DJM){
    case 'b':
      int dqBData = base.read();
      if(pos>=baseMin && pos<=baseMax){
        if(pos >= dqBData){
          for(i = dqBData; i <= pos; i++){
            base.write(i);
            delay(15);
          }
        }else{
          for(i = dqBData; i >= pos; i--){
            base.write(i);
            delay(15);
          }
        }
        Serial.print("接收指令的电机为");
        Serial.print(DJM);
        Serial.print(",  ");
        Serial.print("电机转动到");
        Serial.print(pos);
        Serial.println("°");
      }else{
        Serial.println("您输入的转动角度超出安全范围,请查正后重试");
      }
      break;
    case 'f':
      if(pos>=fArmMin && pos<=fArmMax){
        if(pos >= dqFData){
          for(i = dqFData; i <= pos; i++){
            fArm.write(i);
            delay(15);
          }
        }else{
          for(i = dqFData; i >= pos; i--){
            fArm.write(i);
            delay(15);
          }
        }
        Serial.print("接收指令的电机为");
        Serial.print(DJM);
        Serial.print(",  ");
        Serial.print("电机转动到");
        Serial.print(pos);
        Serial.println("°");
      }else{
        Serial.println("您输入的转动角度超出安全范围,请查正后重试");
      }
      break;

    case 'r':
      int dqRData = base.read();
      if(pos>=baseMin && pos<=baseMax){
        if(pos >= dqRData){
          for(i = dqRData; i <= pos; i++){
            rArm.write(i);
            delay(15);
          }
        }else{
          for(i = dqRData; i >= pos; i--){
            rArm.write(i);
            delay(15);
          }
        }
        Serial.print("接收指令的电机为");
        Serial.print(DJM);
        Serial.print(",  ");
        Serial.print("电机转动到");
        Serial.print(pos);
        Serial.println("°");
      }else{
        Serial.println("您输入的转动角度超出安全范围,请查正后重试");
      }
      break;

    case 'c':
      int dqCData = base.read();
      if(pos>=baseMin && pos<=baseMax){
        if(pos >= dqCData){
          for(i = dqCData; i <= pos; i++){
            claw.write(i);
            delay(15);
          }
        }else{
          for(i = dqCData; i >= pos; i--){
            claw.write(i);
            delay(15);
          }
        }
        Serial.print("接收指令的电机为");
        Serial.print(DJM);
        Serial.print(",  ");
        Serial.print("电机转动到");
        Serial.print(pos);
        Serial.println("°");
      }else{
        Serial.println("您输入的转动角度超出安全范围,请查正后重试");
      }
      break;
    case 'o':
    int bb = base.read();
    int ff = fArm.read();
    int rr = rArm.read();
    int cc = claw.read();
    Serial.print("基座电机base当前角度为");
    Serial.print(bb);
    Serial.println("°");
    Serial.print("前臂电机fArm当前角度为");
    Serial.print(ff);
    Serial.println("°");
    Serial.print("后臂电机rArm当前角度为");
    Serial.print(rr);
    Serial.println("°");
    Serial.print("钳爪claw当前角度为");
    Serial.print(cc);
    Serial.println("°");
    break;

    }
}




您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-29 03:43 , Processed in 0.076151 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表