gpt4 book ai didi

c - Arduino C - 无法创建新方法和数组

转载 作者:行者123 更新时间:2023-11-30 19:18:34 26 4
gpt4 key购买 nike

所以我正在制作一个操纵杆来控制三轴飞行器的电机功率分配。我收到一些没有意义的错误(我是 java 的客户,所以如果它是 C 的东西,请告诉我我错了什么)。

这是代码:

  int ledPin = 13;
int potPinx = 0;
int potPiny = 1;
int motor1 = 2;
int motor2 = 3;
int motor3 = 4;

void setup() {
pinMode(ledPin, OUTPUT);

}

void loop()
{
int valx = analogRead(potPinx);
int valy = analogRead(potPiny);
//Serial.begin(9600);
//Serial.println("PotX = " + potPinx + " PotY = " + potPiny);

int motorCurrents[] = processMovement(potPinx, potPiny, 100);
int motorCurrent1 = motorCurrents[0];
int motorCurrent2 = motorCurrents[1];
int motorCurrent3 = motorCurrents[2];

//Serial.println("Motor 1 = " + motorCurrent1 + " Motor 2 = " + motorCurrent2 + " Motor 2 = " + motorCurrent2);

digitalWrite(motor1, motorCurrent1);
digitalWrite(motor2, motorCurrent2);
digitalWrite(motor3, motorCurrent3);

}

int[] processMovement(int x, int y, int total)
{
int motor1x;
int motor2x;
int motor3x;
int motor1y;
int motor2y;
int motor3y;
int motor1;
int motor2;
int motor3;
x = x - total/2;
y = y - total/2;

if(x > 0)
{
motor1x = x*2
motor2x = x;
motor3x = x*3;
}
else
{
x = x * (-1);
motor1x = x*2;
motor2x = x*3;
motor3x = x;
}


if(y > 0)
{
motor1y = y*2
motor2y = y;
motor3y = y*3;
}
else
{
y = y * (-1);
motor1y = y*2;
motor2y = y*3;
motor3y = y;
}

motor1 = (motor1x + motor1y)/2;
motor2 = (motor2x + motor2y)/2;
motor3 = (motor3x + motor3y)/2;

return {motor1, motor2, motor3};


}
}

如您所见,我创建了一个名为 processMovement() 的方法,它返回一个整数数组。然后,我制作 3 个单独的整数来表示数组中的每个位置,并将其值输出到数字引脚 2、3 和 4。出于某种原因,编译器说我没有在范围内声明 method processMovement() 并且我的 int 数组声明有问题 >.

错误如下:

ArduinoJoyStick.ino:7:4: error: expected unqualified-id before '[' token
ArduinoJoyStick.ino: In function 'void loop()':
ArduinoJoyStick.ino:23:64: error: 'processMovement' was not declared in this scope
ArduinoJoyStick.ino: At global scope:
ArduinoJoyStick.ino:36:6: error: expected unqualified-id before '[' token
Error compiling.

最佳答案

在 C 语言中,数组不能像值一样对待;它们不能从函数返回,也不能使用 { } 语法进行分配。另外,在申报时必须公布其尺寸。

第二个问题是您在声明之前调用 processMovement 函数。函数必须在调用之前声明,编译器不会在文件中“向前查看”以查看稍后是否存在该名称的函数。

您需要将函数设计为不返回数组。执行此操作的一种方法是调用者声明数组并告诉被调用函数该数组的位置,例如:

void processMovement(int x, int y, int total, int *output)  
{
// same logic...

output[0] = motor1;
output[1] = motor2;
output[2] = motor3;
}

void loop()
{
// ...
int motorCurrents[3];
processMovement(potPinx, potPiny, 100, motorCurrents);

digitalWrite(motor1, motorCurrents[0]); // no need for motorCurrent1 etc.

}

关于c - Arduino C - 无法创建新方法和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26623068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com