首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TinkerCAD Ardunio代码错误参数太少

TinkerCAD Ardunio代码错误参数太少
EN

Stack Overflow用户
提问于 2020-10-01 05:06:48
回答 1查看 306关注 0票数 0

我正在为我的班级建造一个机器人,我们必须有两个伺服和一个直流电机以特定的方式工作。所有的东西都挂在一个arduino uno上,我的代码可以工作,但我使用tinkercad测试了一些东西,但我得到了一个错误,它阻止了我的代码在tinker cad中运行,我完全不知所措。

错误

代码语言:javascript
复制
In function 'void loop()': 
44:9: error: too few arguments to function 'void motor(char, char)' 
17:6: note: declared here 
exit status 1

代码

代码语言:javascript
复制
#include <Servo.h>   // set servo header to let ardduino know you intend to use a servo

Servo mycontinuousservo;      // declare servos to be used
Servo mydegreeservo;

int In1 = 7;        // declare your global variables to indicate pin numbers
int In2 = 8;
int pin = 6;
int servocontinuouspin = 10;
int servodegreepin = 9;
int angle = 90;

void servopos();
void servocontinous();
void motor(char Speed,char Direction);


void setup() {
  
  // put your setup code here, to run once:

  pinMode(In1, OUTPUT);
  pinMode(In2, OUTPUT);
  pinMode(pin, OUTPUT);

  digitalWrite(In1, HIGH);  //pin 7 moves forward
  digitalWrite(In2, LOW);   //pin 8 moves forward

  analogWrite(pin, 0);      // start  at 0
  pinMode(servocontinuouspin, OUTPUT);
  pinMode(servodegreepin, OUTPUT);
  mycontinuousservo.attach(servocontinuouspin);
  mydegreeservo.attach(servodegreepin);
  mycontinuousservo.write(90);

  Serial.begin(9600); // for serial communication
}
void loop() {
  
  servocontinous(); //call by ref aforedeclared functions
  servopos();
  motor();

}

// EXIT THE LOOP

void servopos() {         //position function
  int degree = 0;
  int i = 0;
  for (i = 0; i < 18; i++) {
    mydegreeservo.write(degree);
    delay(500); //delay 0.5 seconds
    degree = degree + 10;
  }

}

void servocontinous()    // continous servo settings
{
  for (int angle = 90; angle >= 0; angle--) {
    mycontinuousservo.write(angle);
    delay(50);
  }
  if (angle == 0) {
    Serial.print("speed\n");
  }
  for (angle = 0; angle < 90; angle++)
  {
    mycontinuousservo.write(angle);
    delay(50);
  }

}

void motor()            //motor function
{
  char Speed = 0;
  char Direction = 0;

  if (Serial.available() > 0)          //initialising
  {
    if (Direction == 'f')            //70 representing F on the ASCII table
    {
      delay(500);
      Serial.println("F");
    }
    if (Direction == 'r')
    {
      delay(500);
      Serial.println("R");
    }
  }
  if (Serial.available() > 0)
  {
    Speed = Serial.read();

    if (Speed == '0')
    {
      Speed = 0;
      Serial.println("Speed 0");
    }
    if (Speed == '1')
    {
      Speed = 14;
      Serial.println("Speed 1");
    }
    if (Speed == '2')
    {
      Speed = 29;
      Serial.println("Speed 2");
    }
    if (Speed == '3')
    {
      Speed = 42;
      Serial.println("Speed 3");
    }
    if (Speed == '4')
    {
      Speed = 56;
      Serial.println("Speed 4");
    }
    if (Speed == '5')
    {
      Speed = 70;
      Serial.println("Speed 5");
    }
    if (Speed == '6')
    {
      Speed = 84;
      Serial.println("Speed 6");
    }
    if (Speed == '7')
    {
      Speed = 98;
      Serial.println("Speed 7");
    }
    if (Speed == '8')
    {
      Speed = 112;
      Serial.println("Speed 8");
    }
    if (Speed == '9')
    {
      Speed = 128;
      Serial.println("Speed 9");
    }
  }  delay(5000);
  analogWrite(pin, Speed);
  if (Direction == 'f')
  { digitalWrite(In1, HIGH);
    digitalWrite(In2, LOW);
  } if (Direction == 'r')
  {
    digitalWrite(In1, LOW);
    digitalWrite(In2, HIGH);
  }
}
EN

回答 1

Stack Overflow用户

发布于 2020-10-01 05:25:19

在这里,您将该函数声明为接受两个参数:

代码语言:javascript
复制
void motor(char Speed,char Direction);

稍后,您可以不带参数地调用它,与该声明相比,这是无效的:

代码语言:javascript
复制
motor();

这将是一个直接的编译器错误。这个函数被描述为有两个参数,你可以用零来调用它。由于这一矛盾,硬编译会失败和停止。

然而,当你定义它时,参数已经消失了,它们实际上是局部变量:

代码语言:javascript
复制
void motor()            //motor function
{
  char Speed = 0;
  char Direction = 0;
  // ...
}

这也与前面的声明相矛盾,所以如果你注释掉它被调用的地方,你可能会得到一个不同的错误。

局部变量是函数的私有事务,它们不需要在函数签名中显示,所以不要认为它们需要作为参数包含在内。

您需要做的是从声明中截取参数,确保声明与函数签名完全匹配,或者将motor()函数定义移到第一次调用它之前的位置。

我更喜欢组织事情,这样预先声明是不必要的,或者至少最小化。没有理由不把motor()定义放在loop()之前。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64145756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档